package mekanism.client.gui; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import mekanism.api.Coord4D; import mekanism.api.EnumColor; import mekanism.client.gui.element.GuiScrollList; import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; import mekanism.common.inventory.container.ContainerSecurityDesk; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.security.ISecurityTile.SecurityMode; import mekanism.common.tile.TileEntitySecurityDesk; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.util.ResourceLocation; 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 GuiSecurityDesk extends GuiMekanism { public static int MAX_LENGTH = 24; public ResourceLocation resource; public TileEntitySecurityDesk tileEntity; public EntityPlayer entityPlayer; public GuiButton removeButton; public GuiScrollList scrollList; public GuiTextField trustedField; public static final List<Character> SPECIAL_CHARS = Arrays.asList('-', '|', '_'); public GuiSecurityDesk(InventoryPlayer inventory, TileEntitySecurityDesk tentity) { super(tentity, new ContainerSecurityDesk(inventory, tentity)); tileEntity = tentity; resource = MekanismUtils.getResource(ResourceType.GUI, "GuiSecurityDesk.png"); guiElements.add(scrollList = new GuiScrollList(this, resource, 14, 14, 120, 4)); ySize+=64; } @Override public void initGui() { super.initGui(); int guiWidth = (width - xSize) / 2; int guiHeight = (height - ySize) / 2; buttonList.clear(); removeButton = new GuiButton(0, guiWidth + 13, guiHeight + 81, 122, 20, LangUtils.localize("gui.remove")); trustedField = new GuiTextField(1, fontRendererObj, guiWidth + 35, guiHeight + 69, 86, 11); trustedField.setMaxStringLength(MAX_LENGTH); trustedField.setEnableBackgroundDrawing(false); updateButtons(); buttonList.add(removeButton); } public void addTrusted(String trusted) { if(trusted.isEmpty()) { return; } ArrayList<Object> data = new ArrayList<Object>(); data.add(0); data.add(trusted); Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); } public void updateButtons() { if(tileEntity.owner == null) { return; } List<String> text = new ArrayList<String>(); if(tileEntity.frequency != null) { for(String s : tileEntity.frequency.trusted) { text.add(s); } } scrollList.setText(text); if(scrollList.hasSelection()) { removeButton.enabled = true; } else { removeButton.enabled = false; } } @Override public void updateScreen() { super.updateScreen(); updateButtons(); trustedField.updateCursorCounter(); } @Override public void mouseClicked(int mouseX, int mouseY, int button) throws IOException { super.mouseClicked(mouseX, mouseY, button); updateButtons(); trustedField.mouseClicked(mouseX, mouseY, button); if(button == 0) { int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); if(tileEntity.frequency != null && tileEntity.owner != null && tileEntity.owner.equals(mc.thePlayer.getName())) { if(xAxis >= 123 && xAxis <= 134 && yAxis >= 68 && yAxis <= 79) { addTrusted(trustedField.getText()); trustedField.setText(""); SoundHandler.playSound(SoundEvents.UI_BUTTON_CLICK); } ArrayList<Object> data = new ArrayList<Object>(); if(xAxis >= 146 && xAxis <= 162 && yAxis >= 59 && yAxis <= 75) { data.add(2); } if(tileEntity.frequency.securityMode != SecurityMode.PUBLIC) { if(xAxis >= 13 && xAxis <= 53 && yAxis >= 113 && yAxis <= 129) { data.add(3); data.add(0); } } if(tileEntity.frequency.securityMode != SecurityMode.PRIVATE) { if(xAxis >= 54 && xAxis <= 94 && yAxis >= 113 && yAxis <= 129) { data.add(3); data.add(1); } } if(tileEntity.frequency.securityMode != SecurityMode.TRUSTED) { if(xAxis >= 95 && xAxis <= 135 && yAxis >= 113 && yAxis <= 129) { data.add(3); data.add(2); } } if(!data.isEmpty()) { Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); } } } } @Override public void keyTyped(char c, int i) throws IOException { if(!trustedField.isFocused() || i == Keyboard.KEY_ESCAPE) { super.keyTyped(c, i); } if(i == Keyboard.KEY_RETURN) { if(trustedField.isFocused()) { addTrusted(trustedField.getText()); trustedField.setText(""); } } if(SPECIAL_CHARS.contains(c) || Character.isDigit(c) || Character.isLetter(c) || isTextboxKey(c, i)) { trustedField.textboxKeyTyped(c, i); } updateButtons(); } @Override protected void actionPerformed(GuiButton guibutton) throws IOException { super.actionPerformed(guibutton); if(guibutton.id == 0) { int selection = scrollList.getSelection(); if(tileEntity.frequency != null && selection != -1) { if(tileEntity != null) { ArrayList<Object> data = new ArrayList<Object>(); data.add(1); data.add(tileEntity.frequency.trusted.get(selection)); Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); } scrollList.selected = -1; } } updateButtons(); } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { int xAxis = (mouseX-(width-xSize)/2); int yAxis = (mouseY-(height-ySize)/2); String ownerText = EnumColor.RED + tileEntity.owner != null ? (LangUtils.localize("gui.owner") + ": " + tileEntity.owner) : LangUtils.localize("gui.noOwner"); fontRendererObj.drawString(tileEntity.getName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getName())/2), 4, 0x404040); fontRendererObj.drawString(ownerText, (xSize - 7) - fontRendererObj.getStringWidth(ownerText), (ySize - 96) + 2, 0x404040); fontRendererObj.drawString(LangUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040); String trusted = LangUtils.localize("gui.trustedPlayers"); fontRendererObj.drawString(trusted, 74-(fontRendererObj.getStringWidth(trusted)/2), 57, 0x787878); String security = EnumColor.RED + LangUtils.localize("gui.securityOffline"); if(tileEntity.frequency != null) { security = LangUtils.localize("gui.security") + ": " + tileEntity.frequency.securityMode.getDisplay(); } fontRendererObj.drawString(security, 13, 103, 0x404040); renderScaledText(LangUtils.localize("gui.add") + ":", 13, 70, 0x404040, 20); if(tileEntity.frequency != null && xAxis >= 146 && xAxis <= 162 && yAxis >= 59 && yAxis <= 75) { displayTooltip(LangUtils.localize("gui.securityOverride") + ": " + LangUtils.transOnOff(tileEntity.frequency.override), xAxis, yAxis); } if(xAxis >= 13 && xAxis <= 53 && yAxis >= 113 && yAxis <= 129) { displayTooltip(LangUtils.localize("gui.publicMode"), xAxis, yAxis); } if(xAxis >= 54 && xAxis <= 94 && yAxis >= 113 && yAxis <= 129) { displayTooltip(LangUtils.localize("gui.privateMode"), xAxis, yAxis); } if(xAxis >= 95 && xAxis <= 135 && yAxis >= 113 && yAxis <= 129) { displayTooltip(LangUtils.localize("gui.trustedMode"), xAxis, yAxis); } super.drawGuiContainerForegroundLayer(mouseX, mouseY); } @Override protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) { mc.renderEngine.bindTexture(resource); 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); int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); if(tileEntity.frequency != null && tileEntity.owner != null && mc.thePlayer.getName().equals(tileEntity.owner)) { drawTexturedModalRect(guiWidth + 145, guiHeight + 78, xSize + (tileEntity.frequency.override ? 0 : 6), 22, 6, 6); if(xAxis >= 146 && xAxis <= 162 && yAxis >= 59 && yAxis <= 75) { drawTexturedModalRect(guiWidth + 146, guiHeight + 59, xSize + 12, 0, 16, 16); } else { drawTexturedModalRect(guiWidth + 146, guiHeight + 59, xSize + 12, 16, 16, 16); } if(tileEntity.frequency.securityMode != SecurityMode.PUBLIC) { if(xAxis >= 13 && xAxis <= 53 && yAxis >= 113 && yAxis <= 129) { drawTexturedModalRect(guiWidth + 13, guiHeight + 113, xSize, 48, 40, 16); } else { drawTexturedModalRect(guiWidth + 13, guiHeight + 113, xSize, 64, 40, 16); } } else { drawTexturedModalRect(guiWidth + 13, guiHeight + 113, xSize, 80, 40, 16); } if(tileEntity.frequency.securityMode != SecurityMode.PRIVATE) { if(xAxis >= 54 && xAxis <= 94 && yAxis >= 113 && yAxis <= 129) { drawTexturedModalRect(guiWidth + 54, guiHeight + 113, xSize + 40, 48, 40, 16); } else { drawTexturedModalRect(guiWidth + 54, guiHeight + 113, xSize + 40, 64, 40, 16); } } else { drawTexturedModalRect(guiWidth + 54, guiHeight + 113, xSize + 40, 80, 40, 16); } if(tileEntity.frequency.securityMode != SecurityMode.TRUSTED) { if(xAxis >= 95 && xAxis <= 135 && yAxis >= 113 && yAxis <= 129) { drawTexturedModalRect(guiWidth + 95, guiHeight + 113, xSize, 96, 40, 16); } else { drawTexturedModalRect(guiWidth + 95, guiHeight + 113, xSize, 112, 40, 16); } } else { drawTexturedModalRect(guiWidth + 95, guiHeight + 113, xSize, 128, 40, 16); } } else { drawTexturedModalRect(guiWidth + 145, guiHeight + 78, xSize, 28, 6, 6); drawTexturedModalRect(guiWidth + 146, guiHeight + 59, xSize + 12, 32, 16, 16); drawTexturedModalRect(guiWidth + 13, guiHeight + 113, xSize, 80, 40, 16); drawTexturedModalRect(guiWidth + 54, guiHeight + 113, xSize + 40, 80, 40, 16); drawTexturedModalRect(guiWidth + 95, guiHeight + 113, xSize, 128, 40, 16); } if(xAxis >= 123 && xAxis <= 134 && yAxis >= 68 && yAxis <= 79) { drawTexturedModalRect(guiWidth + 123, guiHeight + 68, xSize, 0, 11, 11); } else { drawTexturedModalRect(guiWidth + 123, guiHeight + 68, xSize, 11, 11, 11); } super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); trustedField.drawTextBox(); } }