package crazypants.enderio.conduit.gui.item; import java.awt.Color; import java.awt.Rectangle; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import com.enderio.core.client.gui.button.IconButton; import com.enderio.core.client.render.ColorUtil; import com.enderio.core.client.render.RenderUtil; import crazypants.enderio.EnderIO; import crazypants.enderio.conduit.gui.GuiExternalConnection; import crazypants.enderio.conduit.item.IItemConduit; import crazypants.enderio.conduit.item.filter.ModItemFilter; import crazypants.enderio.gui.IconEIO; import crazypants.enderio.network.PacketHandler; public class ModItemFilterGui implements IItemFilterGui { private static final int MOD_NAME_COLOR = ColorUtil.getRGB(Color.white); private final IItemConduit itemConduit; private final GuiExternalConnection gui; boolean isInput; private final ModItemFilter filter; private final Rectangle[] inputBounds; private final IconButton[] deleteButs; private final IconButton whiteListB; private final int inputOffsetX; private final int tfWidth; private final int tfTextureX; private final int tfTextureY; public ModItemFilterGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) { this.gui = gui; this.itemConduit = itemConduit; this.isInput = isInput; if(isInput) { filter = (ModItemFilter) itemConduit.getInputFilter(gui.getDir()); inputOffsetX = 50; tfWidth = 96; tfTextureX = 120; tfTextureY = 214; } else { filter = (ModItemFilter) itemConduit.getOutputFilter(gui.getDir()); inputOffsetX = 32; tfWidth = 114; tfTextureX = 120; tfTextureY = 238; } inputBounds = new Rectangle[] { new Rectangle(inputOffsetX,47,16,16), new Rectangle(inputOffsetX,68,16,16), new Rectangle(inputOffsetX,89,16,16) }; deleteButs = new IconButton[inputBounds.length]; for(int i=0; i < deleteButs.length; i++) { Rectangle r = inputBounds[i]; IconButton but = new IconButton(gui, GuiExternalConnection.nextButtonId(), r.x + 19, r.y, IconEIO.MINUS); deleteButs[i] = but; } whiteListB = new IconButton(gui, -1, inputOffsetX - 19, 89, IconEIO.FILTER_WHITELIST); whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist")); } @Override public void deactivate() { for(IconButton but : deleteButs) { but.detach(); } whiteListB.detach(); } @Override public void updateButtons() { for(IconButton but : deleteButs) { but.onGuiInit(); } whiteListB.onGuiInit(); if (filter.isBlacklist()) { whiteListB.setIcon(IconEIO.FILTER_BLACKLIST); whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.blacklist")); } else { whiteListB.setIcon(IconEIO.FILTER_WHITELIST); whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist")); } } @Override public void actionPerformed(GuiButton guiButton) { for(int i=0; i < deleteButs.length; i++) { IconButton but = deleteButs[i]; if(but.id == guiButton.id) { setMod(i, null); return; } } if (guiButton == whiteListB) { toggleBlacklist(); } } @Override public void renderCustomOptions(int top, float par1, int par2, int par3) { GL11.glColor3f(1, 1, 1); gui.bindGuiTexture(); for(Rectangle r : inputBounds) { //slot gui.drawTexturedModalRect(gui.getGuiLeft() + r.x - 1, gui.getGuiTop() + r.y - 1, 24, 214, 18, 18); //text box gui.drawTexturedModalRect(gui.getGuiLeft() + r.x + 38, gui.getGuiTop() + r.y - 1, tfTextureX, tfTextureY, tfWidth, 18); } FontRenderer fr = Minecraft.getMinecraft().fontRenderer; for(int i=0;i<inputBounds.length;i++) { String mod = filter.getModAt(i); if(mod != null) { Rectangle r = inputBounds[i]; mod = fr.trimStringToWidth(mod, tfWidth - 6); fr.drawStringWithShadow(mod, gui.getGuiLeft() + r.x + 41, gui.getGuiTop() + r.y + 4, MOD_NAME_COLOR); } } } @Override public void mouseClicked(int x, int y, int par3) { ItemStack st = Minecraft.getMinecraft().thePlayer.inventory.getItemStack(); if(st == null) { return; } for(int i=0;i<inputBounds.length;i++) { Rectangle bound = inputBounds[i]; if(bound.contains(x,y)) { setMod(i, st); } } } private void setMod(int i, ItemStack st) { String mod = filter.setMod(i, st); PacketHandler.INSTANCE.sendToServer(new PacketModItemFilter(itemConduit, gui.getDir(),isInput,i, mod)); } private void toggleBlacklist() { filter.setBlacklist(!filter.isBlacklist()); PacketHandler.INSTANCE.sendToServer(new PacketModItemFilter(itemConduit, gui.getDir(), isInput, -1, filter.isBlacklist() ? "1" : "0")); } }