package mekanism.client.gui; import java.io.IOException; import java.util.ArrayList; import mekanism.api.Coord4D; import mekanism.client.gui.element.GuiAmplifierTab; import mekanism.client.gui.element.GuiGauge.Type; import mekanism.client.gui.element.GuiNumberGauge; import mekanism.client.gui.element.GuiNumberGauge.INumberInfoHandler; import mekanism.client.gui.element.GuiRedstoneControl; import mekanism.client.gui.element.GuiSecurityTab; import mekanism.client.render.MekanismRenderer; import mekanism.common.Mekanism; import mekanism.common.inventory.container.ContainerLaserAmplifier; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.tile.TileEntityLaserAmplifier; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.entity.player.InventoryPlayer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; @SideOnly(Side.CLIENT) public class GuiLaserAmplifier extends GuiMekanism { public TileEntityLaserAmplifier tileEntity; public GuiTextField minField; public GuiTextField maxField; public GuiTextField timerField; public GuiLaserAmplifier(InventoryPlayer inventory, TileEntityLaserAmplifier tentity) { super(tentity, new ContainerLaserAmplifier(inventory, tentity)); tileEntity = tentity; guiElements.add(new GuiNumberGauge(new INumberInfoHandler() { @Override public TextureAtlasSprite getIcon() { return MekanismRenderer.energyIcon; } @Override public double getLevel() { return tileEntity.collectedEnergy; } @Override public double getMaxLevel() { return tileEntity.MAX_ENERGY; } @Override public String getText(double level) { return LangUtils.localize("gui.storing") + ": " + MekanismUtils.getEnergyDisplay(level); } }, Type.STANDARD, this, MekanismUtils.getResource(ResourceType.GUI, "GuiBlank.png"), 6, 10)); guiElements.add(new GuiSecurityTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiBlank.png"))); guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiBlank.png"))); guiElements.add(new GuiAmplifierTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiBlank.png"))); } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); fontRendererObj.drawString(tileEntity.getName(), 55, 6, 0x404040); fontRendererObj.drawString(LangUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040); fontRendererObj.drawString(tileEntity.time > 0 ? LangUtils.localize("gui.delay") + ": " + tileEntity.time + "t" : LangUtils.localize("gui.noDelay"), 26, 30, 0x404040); fontRendererObj.drawString(LangUtils.localize("gui.min") + ": " + MekanismUtils.getEnergyDisplay(tileEntity.minThreshold), 26, 45, 0x404040); fontRendererObj.drawString(LangUtils.localize("gui.max") + ": " + MekanismUtils.getEnergyDisplay(tileEntity.maxThreshold), 26, 60, 0x404040); super.drawGuiContainerForegroundLayer(mouseX, mouseY); } @Override protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) { mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiBlank.png")); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); int guiWidth = (width - xSize) / 2; int guiHeight = (height - ySize) / 2; drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); minField.drawTextBox(); maxField.drawTextBox(); timerField.drawTextBox(); } @Override public void updateScreen() { super.updateScreen(); minField.updateCursorCounter(); maxField.updateCursorCounter(); timerField.updateCursorCounter(); } @Override public void mouseClicked(int mouseX, int mouseY, int button) throws IOException { super.mouseClicked(mouseX, mouseY, button); minField.mouseClicked(mouseX, mouseY, button); maxField.mouseClicked(mouseX, mouseY, button); timerField.mouseClicked(mouseX, mouseY, button); } @Override public void keyTyped(char c, int i) throws IOException { if(!(minField.isFocused() || maxField.isFocused() || timerField.isFocused()) || i == Keyboard.KEY_ESCAPE) { super.keyTyped(c, i); } if(i == Keyboard.KEY_RETURN) { if(minField.isFocused()) { setMinThreshold(); } if(maxField.isFocused()) { setMaxThreshold(); } if(timerField.isFocused()) { setTime(); } } if(Character.isDigit(c) || c == '.' || c == 'E' || isTextboxKey(c, i)) { minField.textboxKeyTyped(c, i); maxField.textboxKeyTyped(c, i); timerField.textboxKeyTyped(c, i); } } private void setMinThreshold() { if(!minField.getText().isEmpty()) { double toUse; try { toUse = Math.max(0, Double.parseDouble(minField.getText())); } catch(Exception e) { minField.setText(""); return; } ArrayList data = new ArrayList(); data.add(0); data.add(toUse); Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); minField.setText(""); } } private void setMaxThreshold() { if(!maxField.getText().isEmpty()) { double toUse; try { toUse = Math.max(0, Double.parseDouble(maxField.getText())); } catch(Exception e) { maxField.setText(""); return; } ArrayList data = new ArrayList(); data.add(1); data.add(toUse); Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); maxField.setText(""); } } private void setTime() { if(!timerField.getText().isEmpty()) { int toUse = Math.max(0, Integer.parseInt(timerField.getText())); ArrayList data = new ArrayList(); data.add(2); data.add(toUse); Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); timerField.setText(""); } } @Override public void initGui() { super.initGui(); int guiWidth = (width - xSize) / 2; int guiHeight = (height - ySize) / 2; String prevTime = timerField != null ? timerField.getText() : ""; timerField = new GuiTextField(0, fontRendererObj, guiWidth + 96, guiHeight + 28, 36, 11); timerField.setMaxStringLength(4); timerField.setText(prevTime); String prevMin = minField != null ? minField.getText() : ""; minField = new GuiTextField(1, fontRendererObj, guiWidth + 96, guiHeight + 43, 72, 11); minField.setMaxStringLength(10); minField.setText(prevMin); String prevMax = maxField != null ? maxField.getText() : ""; maxField = new GuiTextField(2, fontRendererObj, guiWidth + 96, guiHeight + 58, 72, 11); maxField.setMaxStringLength(10); maxField.setText(prevMax); } }