package mods.eln.wiki; import mods.eln.gui.GuiLabel; import mods.eln.gui.IGuiObject; import mods.eln.misc.Recipe; import mods.eln.misc.RecipesList; import mods.eln.misc.Utils; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; import java.util.ArrayList; import java.util.List; import static mods.eln.i18n.I18N.tr; public class ItemDefault extends Default { public static interface IPlugIn { public int top(int y, GuiVerticalExtender extender, ItemStack stack); public int bottom(int y, GuiVerticalExtender extender, ItemStack stack); } private ItemStack stack; private GuiScreen previewScreen; public ItemDefault(ItemStack stack, GuiScreen previewScreen) { super(previewScreen); this.stack = stack; } GuiItemStack self; @Override public void initGui() { super.initGui(); try { if (stack == null) return; int y = 6; Object desc = Utils.getItemObject(stack); IPlugIn plugIn = null; if (desc instanceof IPlugIn) { plugIn = (IPlugIn) desc; } self = new GuiItemStack(6, y, stack, helper); extender.add(self); extender.add(new GuiLabel(6 + 21, y + 3, stack.getDisplayName())); y += 24; if (plugIn != null) y = plugIn.top(y, extender, stack); List<IRecipe> recipeOutList = new ArrayList<IRecipe>(); List<IRecipe> recipeInList = new ArrayList<IRecipe>(); if (stack != null) { List list = CraftingManager.getInstance().getRecipeList(); for (Object o : list) { try { if (o instanceof IRecipe) { IRecipe r = (IRecipe) o; ItemStack out = r.getRecipeOutput(); if (out != null && out.getItem() == stack.getItem() && out.getItemDamage() == stack.getItemDamage()) { recipeOutList.add(r); } for (ItemStack rStack : Utils.getRecipeInputs(r)) { if (rStack != null && rStack.getItem() == stack.getItem() && rStack.getItemDamage() == stack.getItemDamage()) { recipeInList.add(r); break; } } } } catch (Exception e) { // TODO: handle exception } } } int counter = 0; if (recipeOutList.isEmpty()) { extender.add(new GuiLabel(6, y, tr("Cannot be crafted!"))); y += 12; } else { extender.add(new GuiLabel(6, y, tr("Recipe:"))); y += 12; counter = -1; for (IRecipe r : recipeOutList) { if (counter == 0) y += 60; if (counter == -1) counter = 0; ItemStack[][] stacks = Utils.getItemStackGrid(r); if (stacks != null) { for (int idx2 = 0; idx2 < 3; idx2++) { for (int idx = 0; idx < 3; idx++) { GuiItemStack gui = new GuiItemStack(idx * 18 + 6 + counter * 60, idx2 * 18 + y, stacks[idx2][idx], helper); extender.add(gui); } } counter = (counter + 1) % 3; } } y += 70; } if (recipeInList.isEmpty()) { extender.add(new GuiLabel(6, y, tr("Is not a crafting material!"))); y += 12; } else { extender.add(new GuiLabel(6, y, tr("Can be used to craft:"))); y += 12; counter = -1; for (IRecipe r : recipeInList) { if (counter == 0) y += 60; if (counter == -1) counter = 0; ItemStack[][] stacks = Utils.getItemStackGrid(r); if (stacks != null) { for (int idx2 = 0; idx2 < 3; idx2++) { for (int idx = 0; idx < 3; idx++) { ItemStack rStack = stacks[idx2][idx]; GuiItemStack gui = new GuiItemStack(idx * 18 + 6 + counter * 105, idx2 * 18 + y, rStack, helper); extender.add(gui); } } GuiItemStack gui = new GuiItemStack((int) (3.5 * 18) + 6 + counter * 105, 1 * 18 + y, r.getRecipeOutput(), helper); extender.add(gui); counter = (counter + 1) % 2; } } y += 70; } { counter = -1; List<Recipe> list = RecipesList.getGlobalRecipeWithInput(stack); if (list.isEmpty()) { //extender.add(new GuiLabel(6, y, "Can't Product")); } else { extender.add(new GuiLabel(6, y, tr("Can create:"))); y += 12; for (Recipe r : list) { if (counter == 0) y += (int) (18 * 1.3); if (counter == -1) counter = 0; int x = 6 + counter * 60; extender.add(new GuiItemStack(x, y, r.input, helper)); x += 18 * 2; for (ItemStack m : r.machineList) { extender.add(new GuiItemStack(x, y, m, helper)); x += 18; } x += 18; extender.add(new GuiItemStack(x, y, r.getOutputCopy()[0], helper)); x += 22; extender.add(new GuiLabel(x, y + 4, tr("Cost %1$J", r.energy))); counter = (counter + 1) % 1; } y += (int) (18 * 1.3); } } { counter = -1; List<Recipe> list = RecipesList.getGlobalRecipeWithOutput(stack); if (list.isEmpty()) { //extender.add(new GuiLabel(6, y, "Can't Product")); } else { extender.add(new GuiLabel(6, y, tr("Created by:"))); y += 12; for (Recipe r : list) { if (counter == 0) y += (int) (18 * 1.3); if (counter == -1) counter = 0; int x = 6 + counter * 60; extender.add(new GuiItemStack(x, y, r.input, helper)); x += 18 * 2; for (ItemStack m : r.machineList) { extender.add(new GuiItemStack(x, y, m, helper)); x += 18; } x += 18; extender.add(new GuiItemStack(x, y, r.getOutputCopy()[0], helper)); x += 22; extender.add(new GuiLabel(x, y + 4, tr("Cost %1$J", r.energy))); counter = (counter + 1) % 1; } y += (int) (18 * 1.3); } } if (plugIn != null) y = plugIn.bottom(y, extender, stack); } catch (Exception e) { // TODO: handle exception } } @Override public void guiObjectEvent(IGuiObject object) { super.guiObjectEvent(object); } }