package mods.eln.gui; import mods.eln.gui.GuiTextFieldEln.GuiTextFieldElnObserver; import mods.eln.gui.IGuiObject.IGuiObjectObserver; import mods.eln.gui.ISlotSkin.SlotSkin; import mods.eln.misc.UtilsClient; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import java.util.ArrayList; public abstract class GuiContainerEln extends GuiContainer implements IGuiObjectObserver, GuiTextFieldElnObserver { public GuiHelperContainer helper; protected abstract GuiHelperContainer newHelper(); static final ResourceLocation slotSkin = new ResourceLocation("textures/gui/container/furnace.png"); public GuiContainerEln(Container par1Container) { super(par1Container); } public void add(IGuiObject object) { helper.add(object); } @Override public void initGui() { helper = newHelper(); xSize = helper.xSize; ySize = helper.ySize; super.initGui(); if (helper instanceof GuiHelperContainer) { apply((GuiHelperContainer) helper); } } void apply(GuiHelperContainer helper) { for (int idx = inventorySlots.inventorySlots.size() - 36; idx < inventorySlots.inventorySlots.size(); idx++) { Slot s = (Slot) inventorySlots.inventorySlots.get(idx); s.xDisplayPosition += helper.xInv; s.yDisplayPosition += helper.yInv; } } public GuiTextFieldEln newGuiTextField(int x, int y, int width) { GuiTextFieldEln o = helper.newGuiTextField(x, y, width); o.setObserver(this); return o; } public GuiButtonEln newGuiButton(int x, int y, int width, String name) { GuiButtonEln o = helper.newGuiButton(x, y, width, name); o.setObserver(this); return o; } public GuiVerticalTrackBar newGuiVerticalTrackBar(int x, int y, int width, int height) { GuiVerticalTrackBar o = helper.newGuiVerticalTrackBar(x, y, width, height); o.setObserver(this); return o; } public GuiVerticalTrackBarHeat newGuiVerticalTrackBarHeat(int x, int y, int width, int height) { GuiVerticalTrackBarHeat o = helper.newGuiVerticalTrackBarHeat(x, y, width, height); o.setObserver(this); return o; } public GuiVerticalProgressBar newGuiVerticalProgressBar(int x, int y, int width, int height) { GuiVerticalProgressBar o = helper.newGuiVerticalProgressBar(x, y, width, height); return o; } public void drawTexturedModalRectEln(int x, int y, int u, int v, int width, int height) { helper.drawTexturedModalRect(x, y, u, v, width, height); } @Override protected void keyTyped(char key, int code) { helper.keyTyped(key, code); if (code == Keyboard.KEY_ESCAPE) { super.keyTyped(key, code); } } protected void mouseClicked(int x, int y, int code) { helper.mouseClicked(x, y, code); super.mouseClicked(x, y, code); } @Override protected void mouseMovedOrUp(int x, int y, int witch) { helper.mouseMovedOrUp(x, y, witch); super.mouseMovedOrUp(x, y, witch); } public boolean doesGuiPauseGame() { return false; } @Override public void drawScreen(int x, int y, float f) { super.drawScreen(x, y, f); } @Override public void textFieldNewValue(GuiTextFieldEln textField, String value) { guiObjectEvent(textField); } @Override public void guiObjectEvent(IGuiObject object) { } @SuppressWarnings("incomplete-switch") @Override protected void drawGuiContainerBackgroundLayer(float f, int mx, int my) { GL11.glColor4f(1f, 1f, 1f, 1f); preDraw(f, mx, my); helper.mouseMove(mx, my); helper.draw(mx, my, f); UtilsClient.bindTexture(slotSkin); GL11.glColor4f(1f, 1f, 1f, 1f); for (Object o : inventorySlots.inventorySlots) { Slot slot = (Slot) o; SlotSkin skin = SlotSkin.none; if (slot instanceof ISlotSkin) skin = ((ISlotSkin) slot).getSlotSkin(); switch (skin) { case medium: drawTexturedModalRectEln(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1, 55, 16, 73 - 55, 34 - 16); break; case big: drawTexturedModalRectEln(slot.xDisplayPosition - 5, slot.yDisplayPosition - 5, 111, 30, 137 - 111, 56 - 30); break; } } postDraw(f, mx, my); } @Override protected void drawGuiContainerForegroundLayer(int mx, int my) { super.drawGuiContainerForegroundLayer(mx, my); helper.draw2(mx, my); ArrayList<String> list = new ArrayList<String>(); GL11.glColor4f(1f, 1f, 1f, 1f); for (Object o : inventorySlots.inventorySlots) { Slot slot = (Slot) o; if (slot.getHasStack() == false && mx - guiLeft >= slot.xDisplayPosition && my - guiTop >= slot.yDisplayPosition && mx - guiLeft < slot.xDisplayPosition + 17 && my - guiTop < slot.yDisplayPosition + 17) { list.clear(); SlotSkin comment = SlotSkin.none; if (slot instanceof ISlotWithComment) { ((ISlotWithComment) slot).getComment(list); int x, y; int strWidth = 0; for (String str : list) { int size = fontRendererObj.getStringWidth(str); if (size > strWidth) strWidth = size; } x = slot.xDisplayPosition; y = slot.yDisplayPosition; int xOffset = 0; if (guiLeft + x + strWidth + 30 > this.width) { xOffset -= strWidth + 20; } if (!list.isEmpty()) drawHoveringText((java.util.List) list, mx - guiLeft + xOffset, my - guiTop, fontRendererObj); } } } } protected void preDraw(float f, int x, int y) { } protected void postDraw(float f, int x, int y) { if (helper.background != null) UtilsClient.bindTexture(helper.background); } protected void drawString(int x, int y, String str) { drawString(x, y, 4210752, str); } protected void drawString(int x, int y, int color, String str) { helper.drawString(x, y, color, str); } }