package erogenousbeef.bigreactors.client.gui; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.inventory.Container; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import erogenousbeef.bigreactors.client.ClientProxy; import erogenousbeef.bigreactors.common.BigReactors; import erogenousbeef.bigreactors.common.multiblock.tileentity.TileEntityReactorControlRod; import erogenousbeef.bigreactors.gui.controls.BeefGuiIcon; import erogenousbeef.bigreactors.gui.controls.BeefGuiInsertionProgressBar; import erogenousbeef.bigreactors.gui.controls.BeefGuiLabel; import erogenousbeef.bigreactors.gui.controls.GuiIconButton; import erogenousbeef.bigreactors.net.CommonPacketHandler; import erogenousbeef.bigreactors.net.message.ControlRodChangeInsertionMessage; import erogenousbeef.bigreactors.net.message.ControlRodChangeNameMessage; public class GuiReactorControlRod extends BeefGuiBase { TileEntityReactorControlRod entity; BeefGuiLabel titleString; BeefGuiLabel rodNameLabel; BeefGuiLabel insertionLabel; GuiButton setNameBtn; BeefGuiIcon rodInsertIcon; GuiIconButton rodInsertBtn; GuiIconButton rodRetractBtn; BeefGuiInsertionProgressBar insertionBar; private GuiTextField rodName; public GuiReactorControlRod(Container c, TileEntityReactorControlRod controlRod) { super(c); entity = controlRod; } @Override public ResourceLocation getGuiBackground() { return new ResourceLocation (BigReactors.GUI_DIRECTORY + "BasicBackground.png"); } @Override public void initGui() { super.initGui(); int leftX = guiLeft + 4; int topY = guiTop + 4; Keyboard.enableRepeatEvents(true); titleString = new BeefGuiLabel(this, "Reactor Control Rod", leftX, topY); topY += titleString.getHeight() + 8; rodNameLabel = new BeefGuiLabel(this, "Name:", leftX, topY + 6); rodName = new GuiTextField(fontRendererObj, leftX + 4 + rodNameLabel.getWidth(), topY, 100, 20); rodName.setCanLoseFocus(true); rodName.setMaxStringLength(32); rodName.setText(entity.getName()); rodName.setEnabled(true); setNameBtn = new GuiButton(2, guiLeft + 140, topY, 30, 20, "Set"); setNameBtn.enabled = false; topY += 28; rodInsertIcon = new BeefGuiIcon(this, leftX+42, topY, 16, 16, ClientProxy.GuiIcons.getIcon("controlRod"), new String[] { EnumChatFormatting.AQUA + "Rod Insertion", "", "Change the control rod's insertion.", "Higher insertion slows reaction rate.", "", "Lower reaction rates reduce heat,", "energy, radiation output, and", "fuel consumption." }); insertionLabel = new BeefGuiLabel(this, "", leftX+62, topY+5); topY += 20; insertionBar = new BeefGuiInsertionProgressBar(this, leftX+40, topY); topY += 12; rodRetractBtn = new GuiIconButton(0, leftX+70, topY, 20, 20, ClientProxy.GuiIcons.getIcon("upArrow"), new String[] { EnumChatFormatting.AQUA + "Insert Rod", "Increase insertion by 10.", "", "Shift: +100", "Alt: +5", "Shift+Alt: +1", "", "Ctrl: Change ALL Rods" }); topY += 20; rodInsertBtn = new GuiIconButton(1, leftX+70, topY, 20, 20, ClientProxy.GuiIcons.getIcon("downArrow"), new String[] { EnumChatFormatting.AQUA + "Retract Rod", "Reduce insertion by 10.", "", "Shift: -100", "Alt: -5", "Shift+Alt: -1", "", "Ctrl: Change ALL Rods" }); topY += 32; registerControl(insertionBar); registerControl(titleString); registerControl(rodNameLabel); registerControl(rodInsertIcon); registerControl(insertionLabel); registerControl(rodName); registerControl(rodRetractBtn); registerControl(rodInsertBtn); registerControl(setNameBtn); updateStrings(); } @Override public void onGuiClosed() { super.onGuiClosed(); Keyboard.enableRepeatEvents(false); } @Override public void updateScreen() { super.updateScreen(); updateStrings(); } protected void updateStrings() { if(entity.isConnected()) { rodInsertBtn.enabled = true; rodRetractBtn.enabled = true; } else { rodInsertBtn.enabled = false; rodRetractBtn.enabled = false; } insertionLabel.setLabelText(String.format("%d%%", entity.getControlRodInsertion())); this.setNameBtn.enabled = !entity.getName().equals(this.rodName.getText()); insertionBar.setInsertion((float)entity.getControlRodInsertion() / 100f); } @Override protected void actionPerformed(GuiButton button) { switch(button.id) { case 2: CommonPacketHandler.INSTANCE.sendToServer(new ControlRodChangeNameMessage(entity.xCoord, entity.yCoord, entity.zCoord, this.rodName.getText())); this.rodName.setFocused(false); break; case 0: case 1: default: int change = 10; if(isShiftKeyDown()) { if(isAltKeyDown()) { change = 1; } else { change = 100; } } else if(isAltKeyDown()) { change = 5; } if(button.id == 1) { change = -change; } CommonPacketHandler.INSTANCE.sendToServer(new ControlRodChangeInsertionMessage(entity.xCoord, entity.yCoord, entity.zCoord, change, isCtrlKeyDown())); } } @Override protected void keyTyped(char inputChar, int keyCode) { if (keyCode == Keyboard.KEY_ESCAPE || (!this.rodName.isFocused() && keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode())) { this.mc.thePlayer.closeScreen(); } this.rodName.textboxKeyTyped(inputChar, keyCode); if(keyCode == Keyboard.KEY_TAB) { // Tab if(this.rodName.isFocused()) { this.rodName.setFocused(false); } else { this.rodName.setFocused(true); } } if(keyCode == Keyboard.KEY_RETURN) { // Return/enter this.actionPerformed((GuiButton)this.buttonList.get(2)); } } }