package mekanism.client.gui; import java.util.HashSet; import java.util.Set; import mekanism.common.IInvConfiguration; import mekanism.common.SideData; import mekanism.common.item.ItemConfigurator; import mekanism.common.tileentity.TileEntityContainerBlock; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public abstract class GuiMekanism extends GuiContainer { public Set guiElements = new HashSet(); private TileEntityContainerBlock tileEntity; public GuiMekanism(Container container) { super(container); } public GuiMekanism(TileEntityContainerBlock tile, Container container) { super(container); tileEntity = tile; } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { super.drawGuiContainerForegroundLayer(mouseX, mouseY); int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); for(GuiElement element : guiElements) { element.renderForeground(xAxis, yAxis); } if(tileEntity != null) { Slot hovering = null; for(int i = 0; i < inventorySlots.inventorySlots.size(); i++) { Slot slot = (Slot)inventorySlots.inventorySlots.get(i); if(isMouseOverSlot(slot, mouseX, mouseY)) { hovering = slot; break; } } ItemStack stack = mc.thePlayer.inventory.getItemStack(); if(stack != null && stack.getItem() instanceof ItemConfigurator && hovering != null) { SideData data = getFromSlot(hovering); if(data != null) { drawCreativeTabHoveringText(data.color.getName(), xAxis, yAxis); } } } } private SideData getFromSlot(Slot slot) { if(slot.slotNumber < tileEntity.getSizeInventory()) { IInvConfiguration config = (IInvConfiguration)tileEntity; for(SideData data : config.getSideData()) { for(int id : data.availableSlots) { if(id == slot.getSlotIndex()) { return data; } } } } return null; } protected boolean isMouseOverSlot(Slot slot, int mouseX, int mouseY) { return isPointInRegion(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX, mouseY); } @Override protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) { int guiWidth = (width - xSize) / 2; int guiHeight = (height - ySize) / 2; int xAxis = mouseX - guiWidth; int yAxis = mouseY - guiHeight; for(GuiElement element : guiElements) { element.renderBackground(xAxis, yAxis, guiWidth, guiHeight); } } @Override protected void mouseClicked(int mouseX, int mouseY, int button) { int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); for(GuiElement element : guiElements) { element.preMouseClicked(xAxis, yAxis, button); } super.mouseClicked(mouseX, mouseY, button); for(GuiElement element : guiElements) { element.mouseClicked(xAxis, yAxis, button); } } }