package openmods.gui.component; import com.google.common.base.Objects; import com.google.common.collect.Maps; import java.util.List; import java.util.Map; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import openmods.gui.misc.BoxRenderer; import openmods.gui.misc.ISlotBackgroundRenderer; import org.lwjgl.opengl.GL11; public class GuiComponentPanel extends GuiComponentResizableComposite { private static final BoxRenderer BOX_RENDERER = new BoxRenderer(0, 5); public static final ISlotBackgroundRenderer normalSlot = new ISlotBackgroundRenderer() { @Override public void render(Gui gui, Slot slot) { gui.drawTexturedModalRect(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1, 0, 20, 18, 18); } }; public static final ISlotBackgroundRenderer bigSlot = new ISlotBackgroundRenderer() { @Override public void render(Gui gui, Slot slot) { gui.drawTexturedModalRect(slot.xDisplayPosition - 5, slot.yDisplayPosition - 5, 29, 20, 26, 26); } }; public static final ISlotBackgroundRenderer noRenderSlot = new ISlotBackgroundRenderer() { @Override public void render(Gui gui, Slot slot) {} }; public static ISlotBackgroundRenderer coloredSlot(final int color) { return new ISlotBackgroundRenderer() { @Override public void render(Gui gui, Slot slot) { GL11.glColor3ub((byte)(color >> 16), (byte)(color >> 8), (byte)(color >> 0)); gui.drawTexturedModalRect(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1, 0, 20, 18, 18); GL11.glColor3f(1, 1, 1); } }; } private final Map<Integer, ISlotBackgroundRenderer> slotRenderers = Maps.newHashMap(); private final Container container; public GuiComponentPanel(int x, int y, int width, int height, Container container) { super(x, y, width, height); this.container = container; } public void setSlotRenderer(int slotId, ISlotBackgroundRenderer renderer) { slotRenderers.put(slotId, renderer); } @Override protected void renderComponentBackground(Minecraft minecraft, int x, int y, int mouseX, int mouseY) { GL11.glColor3f(1, 1, 1); bindComponentsSheet(); BOX_RENDERER.render(this, this.x + x, this.y + y, width, height, 0xFFFFFFFF); } @Override @SuppressWarnings("unchecked") protected void renderComponentForeground(Minecraft minecraft, int x, int y, int mouseX, int mouseY) { GL11.glColor3f(1, 1, 1); bindComponentsSheet(); if (container != null) { for (Slot slot : (List<Slot>)container.inventorySlots) { Objects.firstNonNull(slotRenderers.get(slot.slotNumber), normalSlot).render(this, slot); } } } }