package crazypants.enderio.teleport.telepad; import java.awt.Rectangle; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.Entity; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.StatCollector; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import com.enderio.core.client.gui.widget.GuiToolTip; import com.enderio.core.client.gui.widget.TextFieldEnder; import com.enderio.core.client.render.RenderUtil; import com.enderio.core.common.util.BlockCoord; import com.enderio.core.common.util.Util; import com.google.common.collect.Lists; import crazypants.enderio.EnderIO; import crazypants.enderio.GuiHandler; import crazypants.enderio.config.Config; import crazypants.enderio.gui.GuiContainerBaseEIO; import crazypants.enderio.gui.IconEIO; import crazypants.enderio.machine.power.PowerDisplayUtil; import crazypants.enderio.network.PacketHandler; public class GuiTelePad extends GuiContainerBaseEIO implements IToggleableGui { private static final int ID_SWITCH_BUTTON = 95; private static final int ID_TELEPORT_BUTTON = 96; ToggleTravelButton switchButton; GuiButton teleportButton; private World world; private TileTelePad te; private TextFieldEnder xTF, yTF, zTF, dimTF; private int powerX = 8; private int powerY = 9; private int powerScale = 100; private int progressX = 26; private int progressY = 90; private int progressScale = 124; public static int SWITCH_X = 155, SWITCH_Y = 5; public GuiTelePad(InventoryPlayer playerInv, TileTelePad te, World world) { super(new ContainerTelePad(playerInv), "telePad"); this.world = world; this.te = te; ySize += 34; addToolTip(new GuiToolTip(new Rectangle(powerX, powerY, 10, powerScale), "") { @Override protected void updateText() { text.clear(); updatePowerBarTooltip(text); } }); addToolTip(new GuiToolTip(new Rectangle(progressX, progressY, progressScale, 10), "") { @Override protected void updateText() { text.clear(); text.add(Math.round(GuiTelePad.this.te.getProgress() * 100) + "%"); } }); FontRenderer fr = Minecraft.getMinecraft().fontRenderer; int x = 42; int y = 8; xTF = new TextFieldEnder(fr, x, y, xSize - x * 2, 12, TextFieldEnder.FILTER_NUMERIC); yTF = new TextFieldEnder(fr, x, y + xTF.height + 2, xSize - x * 2, 12, TextFieldEnder.FILTER_NUMERIC); zTF = new TextFieldEnder(fr, x, y + (xTF.height * 2) + 4, xSize - x * 2, 12, TextFieldEnder.FILTER_NUMERIC); dimTF = new TextFieldEnder(fr, x, y + (xTF.height * 3) + 6, xSize - x * 2, 12, TextFieldEnder.FILTER_NUMERIC); xTF.setText(Integer.toString(te.getX())); yTF.setText(Integer.toString(te.getY())); zTF.setText(Integer.toString(te.getZ())); dimTF.setText(Integer.toString(te.getTargetDim())); xTF.setCanLoseFocus(!Config.telepadLockCoords); yTF.setCanLoseFocus(!Config.telepadLockCoords); zTF.setCanLoseFocus(!Config.telepadLockCoords); dimTF.setCanLoseFocus(!Config.telepadLockDimension); textFields.addAll(Lists.newArrayList(xTF, yTF, zTF, dimTF)); switchButton = new ToggleTravelButton(this, ID_SWITCH_BUTTON, SWITCH_X, SWITCH_Y, IconEIO.IO_WHATSIT); switchButton.setToolTip(EnderIO.lang.localize("gui.telepad.configure.travel")); } private String getPowerOutputLabel() { return StatCollector.translateToLocal("enderio.gui.max"); } protected int getPowerOutputValue() { return te.getUsage(); } protected void updatePowerBarTooltip(List<String> text) { text.add(getPowerOutputLabel() + " " + PowerDisplayUtil.formatPower(getPowerOutputValue()) + " " + PowerDisplayUtil.abrevation() + PowerDisplayUtil.perTickStr()); text.add(PowerDisplayUtil.formatStoredPower(te.getEnergyStored(), te.getMaxEnergyStored())); } @Override public void initGui() { super.initGui(); switchButton.onGuiInit(); String text = EnderIO.lang.localize("gui.telepad.teleport"); int width = getFontRenderer().getStringWidth(text) + 10; int x = guiLeft + (xSize / 2) - (width / 2); int y = guiTop + 65; teleportButton = new GuiButton(ID_TELEPORT_BUTTON, x, y, width, 20, text); addButton(teleportButton); } @Override public void updateScreen() { super.updateScreen(); } @Override protected void keyTyped(char par1, int par2) { super.keyTyped(par1, par2); updateCoords(); } private void updateCoords() { BlockCoord bc = new BlockCoord(getIntFromTextBox(xTF), getIntFromTextBox(yTF), getIntFromTextBox(zTF)); int targetDim = getIntFromTextBox(dimTF); if(bc.x != te.getX() || bc.y != te.getY() || bc.z != te.getZ() || targetDim != te.getTargetDim()) { te.setX(bc.x); te.setY(bc.y); te.setZ(bc.z); te.setTargetDim(targetDim); PacketHandler.INSTANCE.sendToServer(new PacketUpdateCoords(te, bc, targetDim)); } } private int getIntFromTextBox(TextFieldEnder tf) { String text = tf.getText(); if("".equals(text) || "-".equals(text)) { return 0; } return Integer.parseInt(text); } @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); bindGuiTexture(); int sx = (width - xSize) / 2; int sy = (height - ySize) / 2; drawTexturedModalRect(sx, sy, 0, 0, this.xSize, this.ySize); int powerScaled = te.getPowerScaled(powerScale); drawTexturedModalRect(sx + powerX, sy + powerY + powerScale - powerScaled, xSize, 0, 10, powerScaled); int progressScaled = Util.getProgressScaled(progressScale, te); drawTexturedModalRect(sx + progressX, sy + progressY, 0, ySize, progressScaled, 10); FontRenderer fnt = getFontRenderer(); String[] text = { "X", "Y", "Z", "DIM" }; for (int i = 0; i < text.length; i++) { TextFieldEnder f = textFields.get(i); fnt.drawString(text[i], f.xPosition - (fnt.getStringWidth(text[i]) / 2) - 10, f.yPosition + ((f.height - fnt.FONT_HEIGHT) / 2) + 1, 0x000000); if(!f.getCanLoseFocus()) { IconEIO.map.render(IconEIO.LOCK_LOCKED, f.xPosition + f.width - 2, f.yPosition - 2, true); } } Entity e = te.getCurrentTarget(); if(e != null) { String name = e.getCommandSenderName(); fnt.drawString(name, sx + xSize / 2 - fnt.getStringWidth(name) / 2, sy + progressY + fnt.FONT_HEIGHT + 6, 0x000000); } else if(te.wasBlocked) { String s = EnderIO.lang.localize("gui.telepad.blocked"); fnt.drawString(s, sx + xSize / 2 - fnt.getStringWidth(s) / 2, sy + progressY + fnt.FONT_HEIGHT + 6, 0xAA0000); } super.drawGuiContainerBackgroundLayer(p_146976_1_, p_146976_2_, p_146976_3_); } @Override public void switchGui() { mc.thePlayer.openGui(EnderIO.instance, GuiHandler.GUI_ID_TELEPAD_TRAVEL, world, te.xCoord, te.yCoord, te.zCoord); PacketHandler.INSTANCE.sendToServer(new PacketOpenServerGui(te, GuiHandler.GUI_ID_TELEPAD_TRAVEL)); } @Override protected void actionPerformed(GuiButton button) { super.actionPerformed(button); if (button.id == ID_TELEPORT_BUTTON) { te.teleportAll(); } } }