buildcraft.silicon.gui.GuiAssemblyTableOld.java Source code

Java tutorial

Introduction

Here is the source code for buildcraft.silicon.gui.GuiAssemblyTableOld.java

Source

/** Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team http://www.mod-buildcraft.com
 * <p/>
 * BuildCraft is distributed under the terms of the Minecraft Mod Public License 1.0, or MMPL. Please check the contents
 * of the license located in http://www.mod-buildcraft.com/MMPL-1.0.txt */
package buildcraft.silicon.gui;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.lwjgl.opengl.GL11;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;

import buildcraft.BuildCraftCore;
import buildcraft.api.recipes.CraftingResult;
import buildcraft.core.client.CoreIconProvider;
import buildcraft.core.lib.gui.AdvancedSlot;
import buildcraft.core.lib.gui.GuiAdvancedInterface;
import buildcraft.core.lib.gui.Ledger;
import buildcraft.lib.misc.LocaleUtil;
import buildcraft.silicon.TileAssemblyTable;

public class GuiAssemblyTableOld extends GuiAdvancedInterface {

    private static final ResourceLocation TEXTURE = new ResourceLocation(
            "buildcraftsilicon:textures/gui/assembly_table.png");

    private class LaserTableLedger extends Ledger {

        int headerColour = 0xe1c92f;
        int subheaderColour = 0xaaafb8;
        int textColour = 0x000000;

        public LaserTableLedger() {
            super(GuiAssemblyTableOld.this);
            maxHeight = 94;
            overlayColor = 0xd46c1f;
        }

        @Override
        public void draw(int x, int y) {

            // Draw background
            drawBackground(x, y);

            // Draw icon
            Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
            drawIcon(CoreIconProvider.ENERGY.getSprite(), x + 3, y + 4);

            if (!isFullyOpened()) {
                return;
            }

            fontRendererObj.drawStringWithShadow(LocaleUtil.localize("gui.energy"), x + 22, y + 8, headerColour);
            fontRendererObj.drawStringWithShadow(LocaleUtil.localize("gui.assemblyCurrentRequired") + ":", x + 22,
                    y + 20, subheaderColour);
            fontRendererObj.drawString(String.format("%d RF", table.clientRequiredEnergy), x + 22, y + 32,
                    textColour);
            fontRendererObj.drawStringWithShadow(LocaleUtil.localize("gui.stored") + ":", x + 22, y + 44,
                    subheaderColour);
            fontRendererObj.drawString(String.format("%d RF", table.getEnergy()), x + 22, y + 56, textColour);
            fontRendererObj.drawStringWithShadow(LocaleUtil.localize("gui.assemblyRate") + ":", x + 22, y + 68,
                    subheaderColour);
            fontRendererObj.drawString(String.format("%.1f RF/t", table.getRecentEnergyAverage() / 100.0f), x + 22,
                    y + 80, textColour);

        }

        @Override
        public String getTooltip() {
            return String.format("%.1f RF/t", table.getRecentEnergyAverage() / 100.0f);
        }
    }

    private final TileAssemblyTable table;

    class RecipeSlot extends AdvancedSlot {
        public CraftingResult<ItemStack> crafting;
        public boolean craftable;

        public RecipeSlot(int x, int y) {
            super(GuiAssemblyTableOld.this, x, y);
        }

        @Override
        public ItemStack getItemStack() {
            if (crafting != null) {
                return crafting.crafted;
            } else {
                return null;
            }
        }
    }

    public GuiAssemblyTableOld(EntityPlayer player, TileAssemblyTable assemblyTable) {
        super(new ContainerAssemblyTable(player, assemblyTable), assemblyTable, TEXTURE);

        this.table = assemblyTable;
        xSize = 176;
        ySize = 207;

        for (int j = 0; j < 3; ++j) {
            for (int i = 0; i < 4; ++i) {
                slots.add(new RecipeSlot(116 + 18 * j, 36 + 18 * i));
            }
        }

        updateRecipes();
    }

    public void updateRecipes() {
        Set<String> addedRecipes = new HashSet<>();
        List<CraftingResult<ItemStack>> potentialRecipes = table.getPotentialOutputs();
        Iterator<CraftingResult<ItemStack>> cur = potentialRecipes.iterator();
        Collection<String> plannedIcons = table.plannedOutputIcons.keySet();
        Iterator<String> cur2 = plannedIcons.iterator();

        for (AdvancedSlot s : slots) {
            if (cur.hasNext()) {
                ((RecipeSlot) s).crafting = cur.next();
                ((RecipeSlot) s).craftable = true;
                addedRecipes.add(((RecipeSlot) s).crafting.recipe.getId());
            } else {
                String recipe = null;
                while (cur2.hasNext() && (recipe == null || addedRecipes.contains(recipe))) {
                    recipe = cur2.next();
                }
                if (recipe != null && !addedRecipes.contains(recipe)) {
                    ((RecipeSlot) s).crafting = table.plannedOutputIcons.get(recipe);
                    ((RecipeSlot) s).craftable = false;
                } else {
                    ((RecipeSlot) s).crafting = null;
                }
            }
        }
    }

    @Override
    protected void drawGuiContainerForegroundLayer(int par1, int par2) {
        super.drawGuiContainerForegroundLayer(par1, par2);
        String title = LocaleUtil.localize("tile.assemblyTableBlock.name");
        fontRendererObj.drawString(title, getCenteredOffset(title), 15, 0x404040);
        fontRendererObj.drawString(LocaleUtil.localize("gui.inventory"), 8, ySize - 97, 0x404040);
        drawTooltipForSlotAt(par1, par2);
    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float f, int x, int y) {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.renderEngine.bindTexture(TEXTURE);
        drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);

        updateRecipes();

        for (AdvancedSlot slot2 : slots) {
            RecipeSlot slot = (RecipeSlot) slot2;

            if (slot.crafting != null) {
                if (!slot.craftable) {
                    drawTexturedModalRect(guiLeft + slot.x, guiTop + slot.y, 215, 1, 16, 16);
                } else if (table.isAssembling(slot.crafting.recipe)) {
                    drawTexturedModalRect(guiLeft + slot.x, guiTop + slot.y, 196, 1, 16, 16);
                } else if (table.isPlanned(slot.crafting.recipe)) {
                    drawTexturedModalRect(guiLeft + slot.x, guiTop + slot.y, 177, 1, 16, 16);
                }
            }
        }

        int h = table.getProgressScaled(70);

        drawTexturedModalRect(guiLeft + 86, guiTop + 36 + 70 - h, 176, 18, 4, h);

        drawBackgroundSlots(x, y);
    }

    @Override
    protected void slotClicked(AdvancedSlot aslot, int mouseButton) {
        super.slotClicked(aslot, mouseButton);

        if (aslot instanceof RecipeSlot) {
            RecipeSlot slot = (RecipeSlot) aslot;

            if (slot.crafting == null) {
                return;
            }

            boolean select;

            if (table.isPlanned(slot.crafting.recipe)) {
                select = false;
            } else {
                select = true;
            }

            String id = slot.crafting.recipe.getId();

            table.rpcSelectRecipe(id, select);
        }
    }

    @Override
    protected void initLedgers(IInventory inventory) {
        super.initLedgers(inventory);
        if (!BuildCraftCore.hidePowerNumbers) {
            ledgerManager.add(new LaserTableLedger());
        }
    }
}