package crazypants.enderio.machine.vacuum; import java.awt.Color; import java.awt.Rectangle; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import com.enderio.core.client.gui.button.MultiIconButton; import com.enderio.core.client.gui.button.ToggleButton; import com.enderio.core.client.gui.widget.GhostSlot; import com.enderio.core.client.gui.widget.GuiToolTip; import com.enderio.core.client.render.ColorUtil; import com.enderio.core.client.render.EnderWidget; import com.enderio.core.client.render.RenderUtil; import com.enderio.core.common.util.BlockCoord; import crazypants.enderio.EnderIO; import crazypants.enderio.conduit.item.filter.ItemFilter; import crazypants.enderio.gui.GuiContainerBaseEIO; import crazypants.enderio.gui.IconEIO; import crazypants.enderio.gui.RedstoneModeButton; import crazypants.enderio.network.PacketHandler; public class GuiVacuumChest extends GuiContainerBaseEIO { private static final int RANGE_LEFT = 145; private static final int RANGE_TOP = 86; private static final int RANGE_WIDTH = 16; private static final int FILTER_LEFT = 29; private static final int FILTER_TOP = 85; private static final int ID_RANGE_UP = 4711; private static final int ID_RANGE_DOWN = 4712; private static final int ID_WHITELIST = 4713; private static final int ID_MATCHMETA = 4714; private static final int ID_REDSTONE = 4715; private final TileVacuumChest te; private final GuiToolTip rangeTooltip; private final MultiIconButton rangeUpB; private final MultiIconButton rangeDownB; private final ToggleButton whiteListB; private final ToggleButton useMetaB; private final RedstoneModeButton rsB; private final String headerChest; private final String headerFilter; private final String headerRange; private final String headerInventory; public GuiVacuumChest(EntityPlayer player, InventoryPlayer inventory, TileVacuumChest te) { super(new ContainerVacuumChest(player, inventory, te), "vacumChest"); this.te = te; ySize = 206; int x = RANGE_LEFT; int y = RANGE_TOP; rangeTooltip = new GuiToolTip(new Rectangle(x, y, RANGE_WIDTH, 16), EnderIO.lang.localize("gui.vacuum.range")); x += RANGE_WIDTH; rangeUpB = MultiIconButton.createAddButton(this, ID_RANGE_UP, x, y); y += 8; rangeDownB = MultiIconButton.createMinusButton(this, ID_RANGE_DOWN, x, y); x = xSize - 16 - 7; y = 104; rsB = new RedstoneModeButton(this, ID_REDSTONE, x, y, te, new BlockCoord(te)); x = FILTER_LEFT + TileVacuumChest.FILTER_SLOTS*18 + 2; y = 86; whiteListB = new ToggleButton(this, ID_WHITELIST, x, y, IconEIO.FILTER_WHITELIST, IconEIO.FILTER_BLACKLIST); whiteListB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist")); whiteListB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.blacklist")); whiteListB.setPaintSelectedBorder(false); y += 18; useMetaB = new ToggleButton(this, ID_MATCHMETA, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META); useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData")); useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData")); useMetaB.setPaintSelectedBorder(false); for(int i=0 ; i<TileVacuumChest.FILTER_SLOTS ; i++) { ghostSlots.add(new FilterGhostSlot(i, FILTER_LEFT + i*18 + 1, FILTER_TOP + 1)); } headerChest = EnderIO.lang.localize("gui.vacuum.header.chest"); headerFilter = EnderIO.lang.localize("gui.vacuum.header.filter"); headerRange = EnderIO.lang.localize("gui.vacuum.header.range"); headerInventory = EnderIO.lang.localizeExact("container.inventory"); ((ContainerVacuumChest)inventorySlots).setFilterChangedCB(new Runnable() { @Override public void run() { filterChanged(); } }); } @Override public void initGui() { super.initGui(); rangeUpB.onGuiInit(); rangeDownB.onGuiInit(); rsB.onGuiInit(); addToolTip(rangeTooltip); filterChanged(); ((ContainerVacuumChest) inventorySlots).createGhostSlots(getGhostSlots()); } @Override public void actionPerformed(GuiButton guiButton) { ItemFilter itemFilter; switch (guiButton.id) { case ID_RANGE_UP: setRange(te.getRange() + 1); break; case ID_RANGE_DOWN: setRange(te.getRange() - 1); break; case ID_WHITELIST: itemFilter = te.getItemFilter(); if(itemFilter != null) { PacketHandler.INSTANCE.sendToServer(PacketVaccumChest.setFilterBlacklist(te, !itemFilter.isBlacklist())); updateButtons(); } break; case ID_MATCHMETA: itemFilter = te.getItemFilter(); if(itemFilter != null) { PacketHandler.INSTANCE.sendToServer(PacketVaccumChest.setFilterMatchMeta(te, !itemFilter.isMatchMeta())); updateButtons(); } break; } } private void setRange(int range) { PacketHandler.INSTANCE.sendToServer(PacketVaccumChest.setRange(te, range)); } void setFilterSlot(int slot, ItemStack stack) { PacketHandler.INSTANCE.sendToServer(PacketVaccumChest.setFilterSlot(te, slot, stack)); } void filterChanged() { if(te.hasItemFilter()) { whiteListB.onGuiInit(); useMetaB.onGuiInit(); updateButtons(); } else { whiteListB.detach(); useMetaB.detach(); } } private void updateButtons() { ItemFilter itemFilter = te.getItemFilter(); whiteListB.setSelected(itemFilter.isBlacklist()); useMetaB.setSelected(itemFilter.isMatchMeta()); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int mouseX, int mouseY) { 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); if(te.getItemFilter() != null) { drawTexturedModalRect(sx + FILTER_LEFT, sy + FILTER_TOP, 0, 238, TileVacuumChest.FILTER_SLOTS*18, 18); } int headerColor = 0x404040; FontRenderer fr = getFontRenderer(); fr.drawString(headerChest, sx+7, sy+6, headerColor); fr.drawString(headerFilter, sx+7, sy+74, headerColor); fr.drawString(headerRange, sx+xSize-7-fr.getStringWidth(headerRange), sy+74, headerColor); fr.drawString(headerInventory, sx+7, sy+111, headerColor); IconEIO.map.render(EnderWidget.BUTTON_DOWN, sx + RANGE_LEFT, sy + RANGE_TOP, RANGE_WIDTH, 16, 0, true); String str = Integer.toString(te.getRange()); int sw = fr.getStringWidth(str); fr.drawString(str, sx + RANGE_LEFT + RANGE_WIDTH - sw - 5, sy + RANGE_TOP + 5, ColorUtil.getRGB(Color.black)); super.drawGuiContainerBackgroundLayer(par1, mouseX, mouseY); } class FilterGhostSlot extends GhostSlot { final int slot; FilterGhostSlot(int slot, int x, int y) { this.slot = slot; this.x = x; this.y = y; } @Override public boolean isVisible() { return GuiVacuumChest.this.te.hasItemFilter(); } @Override public void putStack(ItemStack stack) { PacketHandler.INSTANCE.sendToServer(PacketVaccumChest.setFilterSlot(GuiVacuumChest.this.te, slot, stack)); } @Override public ItemStack getStack() { ItemFilter itemFilter = GuiVacuumChest.this.te.getItemFilter(); if(itemFilter != null) { return itemFilter.getStackInSlot(slot); } return null; } } }