package crazypants.enderio.teleport; import java.awt.Color; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import com.enderio.core.client.gui.button.CheckBox; import com.enderio.core.client.gui.widget.TextFieldEnder; import com.enderio.core.client.render.ColorUtil; import com.enderio.core.client.render.RenderUtil; import com.enderio.core.common.util.BlockCoord; import crazypants.enderio.EnderIO; import crazypants.enderio.api.teleport.ITravelAccessable; import crazypants.enderio.api.teleport.ITravelAccessable.AccessMode; import crazypants.enderio.gui.GuiContainerBaseEIO; import crazypants.enderio.network.PacketHandler; import crazypants.enderio.teleport.packet.PacketAccessMode; import crazypants.enderio.teleport.packet.PacketLabel; public class GuiTravelAccessable extends GuiContainerBaseEIO { private static final int ID_PUBLIC = 0; private static final int ID_PRIVATE = 1; private static final int ID_PROTECTED = 2; private CheckBox publicCB; private CheckBox privateCB; private CheckBox protectedCB; private TextFieldEnder tf; private String publicStr; private String privateStr; private String protectedStr; private ITravelAccessable te; private int col0x; private int col1x; private int col2x; protected World world; public GuiTravelAccessable(InventoryPlayer playerInv, ITravelAccessable te, World world) { this(new ContainerTravelAccessable(playerInv, te, world)); } public GuiTravelAccessable(ContainerTravelAccessable container) { super(container, "travelAccessable"); this.te = container.ta; this.world = container.world; publicStr = EnderIO.lang.localize("gui.travelAccessable.public"); privateStr = EnderIO.lang.localize("gui.travelAccessable.private"); protectedStr = EnderIO.lang.localize("gui.travelAccessable.protected"); FontRenderer fr = Minecraft.getMinecraft().fontRenderer; tf = new TextFieldEnder(fr, 28, 10, 90, 16); col1x = 88; col0x = (col1x - fr.getStringWidth(protectedStr) / 2) / 2; col2x = (col1x + fr.getStringWidth(protectedStr) / 2); col2x += (176 - col2x) / 2; int x = 0; int y = 50; x = col0x - 8; privateCB = new CheckBox(this, ID_PRIVATE, x, y); privateCB.setSelected(te.getAccessMode() == AccessMode.PRIVATE); x = col1x - 8; protectedCB = new CheckBox(this, ID_PROTECTED, x, y); protectedCB.setSelected(te.getAccessMode() == AccessMode.PROTECTED); x = col2x - 8; publicCB = new CheckBox(this, ID_PUBLIC, x, y); publicCB.setSelected(te.getAccessMode() == AccessMode.PUBLIC); ySize = 185; textFields.add(tf); } @Override protected void actionPerformed(GuiButton b) { privateCB.setSelected(b.id == ID_PRIVATE); protectedCB.setSelected(b.id == ID_PROTECTED); publicCB.setSelected(b.id == ID_PUBLIC); AccessMode curMode = b.id == ID_PRIVATE ? AccessMode.PRIVATE : b.id == ID_PROTECTED ? AccessMode.PROTECTED : AccessMode.PUBLIC; te.setAccessMode(curMode); BlockCoord bc = te.getLocation(); PacketAccessMode p = new PacketAccessMode(bc.x, bc.y, bc.z, curMode); PacketHandler.INSTANCE.sendToServer(p); } @Override public void initGui() { super.initGui(); buttonList.clear(); publicCB.setPaintSelectedBorder(false); publicCB.onGuiInit(); privateCB.onGuiInit(); protectedCB.onGuiInit(); tf.setMaxStringLength(32); tf.setFocused(true); String txt = te.getLabel(); if(txt != null && txt.length() > 0) { tf.setText(txt); } ((ContainerTravelAccessable) inventorySlots).addGhostSlots(getGhostSlots()); } @Override public void updateScreen() { super.updateScreen(); } @Override public void mouseClicked(int x, int y, int par3) { super.mouseClicked(x, y, par3); } @Override public void drawGuiContainerBackgroundLayer(float f, int i, int j) { 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 col = ColorUtil.getRGB(Color.white); int x = sx; int y = sy + 38; FontRenderer fontRenderer = getFontRenderer(); x = sx + col0x - fontRenderer.getStringWidth(privateStr) / 2; fontRenderer.drawStringWithShadow(privateStr, x, y, col); x = sx + col1x - fontRenderer.getStringWidth(protectedStr) / 2; fontRenderer.drawStringWithShadow(protectedStr, x, y, col); x = sx + col2x - fontRenderer.getStringWidth(publicStr) / 2; fontRenderer.drawStringWithShadow(publicStr, x, y, col); checkLabelForChange(); super.drawGuiContainerBackgroundLayer(f, i, j); } private void checkLabelForChange() { String newTxt = tf.getText(); if(newTxt != null && newTxt.length() == 0) { newTxt = null; } String curText = te.getLabel(); if(curText != null && curText.length() == 0) { curText = null; } boolean changed = false; if(newTxt == null) { if(curText == null) { changed = false; } else { changed = true; } } else { changed = !newTxt.equals(curText); } if(!changed) { return; } te.setLabel(newTxt); BlockCoord bc = te.getLocation(); PacketLabel p = new PacketLabel(bc.x, bc.y, bc.z, te.getLabel()); PacketHandler.INSTANCE.sendToServer(p); } @Override protected void drawForegroundImpl(int mouseX, int mouseY) { super.drawForegroundImpl(mouseX, mouseY); if(te.getAccessMode() != AccessMode.PROTECTED) { bindGuiTexture(); GL11.glColor4f(1, 1, 1, 0.75f); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_DEPTH_TEST); drawTexturedModalRect(43, 72, 5, 35, 90, 18); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glColor4f(1, 1, 1, 1); } } @Override public void drawScreen(int par1, int par2, float par3) { super.drawScreen(par1, par2, par3); } }