package crazypants.enderio.machine.buffer; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import org.lwjgl.opengl.GL11; import com.enderio.core.client.gui.widget.TextFieldEnder; import com.enderio.core.client.render.RenderUtil; import crazypants.enderio.EnderIO; import crazypants.enderio.machine.IoMode; import crazypants.enderio.machine.gui.GuiPoweredMachineBase; import crazypants.enderio.machine.power.PowerDisplayUtil; import crazypants.enderio.network.PacketHandler; public class GuiBuffer extends GuiPoweredMachineBase<TileBuffer> { private static final String TEXTURE_SIMPLE = "buffer"; private static final String TEXTURE_FULL = "buffer_full"; private TextFieldEnder maxInput; private TextFieldEnder maxOutput; private int lastInput, lastOutput; public GuiBuffer(InventoryPlayer par1InventoryPlayer, TileBuffer te) { super(te, new ContainerBuffer(par1InventoryPlayer, te), TEXTURE_SIMPLE, TEXTURE_FULL); redstoneButton.setPosition(isFull() ? 153 : 120, 24); configB.setPosition(isFull() ? 153 : 120, 42); if(te.hasPower()) { int x = (isFull() ? 20 : 58); int y = guiTop + 27; maxInput = new TextFieldEnder(getFontRenderer(), x, y, 60, 12); y += 28; maxOutput = new TextFieldEnder(getFontRenderer(), x, y, 60, 12); textFields.add(maxInput); textFields.add(maxOutput); } } @Override public void initGui() { super.initGui(); if(getTileEntity().hasPower()) { maxInput.setMaxStringLength(10); maxInput.setText(PowerDisplayUtil.formatPower(getTileEntity().getMaxInput())); maxOutput.setMaxStringLength(10); maxOutput.setText(PowerDisplayUtil.formatPower(getTileEntity().getMaxOutput())); } } @Override protected void keyTyped(char par1, int par2) { super.keyTyped(par1, par2); if(par1 == 'e') { super.keyTyped(par1, 1); } if(getTileEntity().hasPower()) { updateInputOutput(); } } private void updateInputOutput() { int input = PowerDisplayUtil.parsePower(maxInput); setMaxInput(input); int output = PowerDisplayUtil.parsePower(maxOutput); setMaxOutput(output); sendUpdateToServer(); } private void setMaxOutput(int output) { if(output != lastOutput) { lastOutput = output; maxOutput.setText(PowerDisplayUtil.formatPower(output)); } } private void setMaxInput(int input) { if(input != lastInput) { lastInput = input; maxInput.setText(PowerDisplayUtil.formatPower(input)); sendUpdateToServer(); } } protected void sendUpdateToServer() { PacketHandler.INSTANCE.sendToServer(new PacketBufferIO(getTileEntity(), lastInput, lastOutput)); } @Override protected boolean showRecipeButton() { return false; } @Override protected boolean renderPowerBar() { return getTileEntity().hasPower(); } @Override public int getYSize() { return ySize; } @Override protected int getPowerHeight() { return 52; } @Override protected int getPowerX() { return isFull() ? 6 : 44; } @Override protected int getPowerY() { return 15; } @Override protected int getPowerV() { return 0; } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); bindGuiTexture(isFull() ? 1 : 0); int sx = (width - xSize) / 2; int sy = (height - ySize) / 2; drawTexturedModalRect(sx, sy, 0, 0, xSize, ySize); bindGuiTexture(); if(getTileEntity().hasPower()) { drawPowerBg(sx, sy); } if(getTileEntity().hasInventory()) { drawSlotBg(sx, sy); } super.drawGuiContainerBackgroundLayer(par1, par2, par3); String invName = EnderIO.lang.localizeExact(getTileEntity().getInventoryName() + ".name"); getFontRenderer().drawStringWithShadow(invName, sx + (xSize / 2) - (getFontRenderer().getStringWidth(invName) / 2), sy + 4, 0xFFFFFF); if(getTileEntity().hasPower()) { sx += isFull() ? 19 : 57; sy += 17; getFontRenderer().drawStringWithShadow(EnderIO.lang.localize("gui.simple.in"), sx, sy, 0xFFFFFF); getFontRenderer().drawStringWithShadow(EnderIO.lang.localize("gui.simple.out"), sx, sy + 27, 0xFFFFFF); } } boolean isFull() { return getTileEntity().hasInventory() && getTileEntity().hasPower(); } @Override public void renderSlotHighlights(IoMode mode) { if (!getTileEntity().hasInventory()) { return; } for (int slot = 0; slot < getTileEntity().getSizeInventory(); slot++) { renderSlotHighlight(slot, mode); } } protected void renderSlotHighlight(int slot, IoMode mode) { Slot invSlot = (Slot) inventorySlots.inventorySlots.get(slot); if(mode == IoMode.PULL) { renderSlotHighlight(slot, PULL_COLOR); } else if(mode == IoMode.PUSH) { renderSlotHighlight(slot, PUSH_COLOR); } else if(mode == IoMode.PUSH_PULL) { renderSplitHighlight(invSlot.xDisplayPosition, invSlot.yDisplayPosition, 16, 16); } } protected void renderSplitHighlight(int x, int y, int width, int height) { GL11.glEnable(GL11.GL_BLEND); RenderUtil.renderQuad2D(getGuiLeft() + x, getGuiTop() + y, 0, width, height / 2, PULL_COLOR); RenderUtil.renderQuad2D(getGuiLeft() + x, getGuiTop() + y + (height / 2), 0, width, height / 2, PUSH_COLOR); GL11.glDisable(GL11.GL_BLEND); } private void drawPowerBg(int sx, int sy) { drawTexturedModalRect(sx + (isFull() ? 5 : 43), sy + 14, xSize + 10, 0, 12, 54); } private void drawSlotBg(int sx, int sy) { drawTexturedModalRect(sx + (isFull() ? 95 : 61), sy + 14, xSize + 22, 0, 54, 54); } }