package net.lomeli.ec.client.gui; import com.google.common.collect.Lists; import java.io.IOException; import java.util.List; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiLabel; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import net.lomeli.ec.client.CreeperEntry; import net.lomeli.ec.client.gui.button.GuiItemButton; import net.lomeli.ec.client.gui.button.GuiPageButton; import net.lomeli.ec.lib.ModLib; public class GuiItemList extends GuiScreen { public static final ResourceLocation bookGuiTextures = new ResourceLocation(ModLib.MOD_ID + ":textures/gui/book.png"); private final List<CreeperEntry> entries; private List<GuiCreeperEntry> pages; private int listSize = 12; private int selected, left, top; private int bookImageWidth = 192; private int bookImageHeight = 192; public GuiPageButton buttonNextPage; public GuiPageButton buttonPreviousPage; public boolean ghostClear; public GuiItemList(List<CreeperEntry> list, boolean ghostClear) { this.entries = list; this.pages = Lists.newArrayList(); this.selected = 0; this.ghostClear = ghostClear; } @Override public void initGui() { super.initGui(); left = width / 2 - bookImageWidth / 2; top = height / 2 - bookImageHeight / 2; this.buttonList.add(this.buttonNextPage = new GuiPageButton(0, left + 120, top + 156, true)); this.buttonList.add(this.buttonPreviousPage = new GuiPageButton(1, left + 38, top + 156, false)); this.buttonPreviousPage.visible = false; this.buttonNextPage.visible = entries.size() > listSize; for (int i = 0; i < entries.size(); i++) { CreeperEntry entry = entries.get(i); if (entry != null) { pages.add(new GuiCreeperEntry(this, entry)); Entity entity = entry.getEntity(mc.theWorld); String name = entry.getEntityClass().getCanonicalName(); if (entity != null) name = entity.getName(); GuiItemButton itemButton = new GuiItemButton(2 + i, left + 40, top + 15 + (11 * (i % listSize)), bookImageWidth / 2, name); if (i >= listSize) { itemButton.visible = false; itemButton.enabled = false; } if (entity == null) itemButton.enabled = false; this.buttonList.add(itemButton); } } resetButtons(); } @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(GuiItemList.bookGuiTextures); this.drawTexturedModalRect(left, top, 0, 0, this.bookImageWidth, this.bookImageHeight); for (int i = 0; i < this.buttonList.size(); ++i) { GuiButton button = (GuiButton) this.buttonList.get(i); int id = i - 2; if (button instanceof GuiItemButton) ((GuiItemButton) button).draw(this.mc, mouseX, mouseY, id >= selected * listSize && id < listSize + (selected * listSize)); else button.drawButton(this.mc, mouseX, mouseY); } for (int i = 0; i < this.labelList.size(); ++i) { ((GuiLabel) this.labelList.get(i)).drawLabel(this.mc, mouseX, mouseY); } } @Override protected void actionPerformed(GuiButton button) throws IOException { super.actionPerformed(button); if (button == null) return; switch (button.id) { case 0: if (selected < (entries.size() / listSize)) selected++; if (!buttonPreviousPage.visible) buttonPreviousPage.visible = true; if (selected == (entries.size() / listSize)) button.visible = false; break; case 1: if (selected > -1) selected--; if (!buttonNextPage.visible) buttonNextPage.visible = true; if (selected == 0) button.visible = false; break; default: if (button.id - 2 < pages.size()) mc.displayGuiScreen(pages.get(button.id - 2)); return; } } public void resetButtons() { if (entries.size() > listSize) { buttonNextPage.visible = true; buttonPreviousPage.visible = true; if (selected >= (entries.size() / listSize)) buttonNextPage.visible = false; if (selected == 0) buttonPreviousPage.visible = false; } } }