package tonius.neiintegration.mods.railcraft; import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; import mods.railcraft.api.crafting.IRockCrusherRecipe; import mods.railcraft.api.crafting.RailcraftCraftingManager; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import tonius.neiintegration.PositionedStackAdv; import tonius.neiintegration.RecipeHandlerBase; import tonius.neiintegration.Utils; import codechicken.lib.gui.GuiDraw; import codechicken.nei.PositionedStack; import codechicken.nei.api.API; public class RecipeHandlerRockCrusher extends RecipeHandlerBase { private static final int[][] RESULTS = { { 0, 0 }, { 1, 0 }, { 2, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, { 0, 2 }, { 1, 2 }, { 2, 2 } }; private static Class<? extends GuiContainer> guiClass; @Override public void prepare() { guiClass = Utils.getClass("mods.railcraft.client.gui.GuiRockCrusher"); API.setGuiOffset(guiClass, -3, 11); } public class CachedRockCrusherRecipe extends CachedBaseRecipe { public PositionedStack input; public List<PositionedStack> outputs = new ArrayList<PositionedStack>(); public CachedRockCrusherRecipe(IRockCrusherRecipe recipe) { if (recipe.getInput() != null) { this.input = new PositionedStack(recipe.getInput(), 12, 10); } if (recipe.getOutputs() != null) { this.setResults(recipe.getOutputs()); } } private void setResults(List<Entry<ItemStack, Float>> outputs) { int i = 0; for (Entry<ItemStack, Float> output : outputs) { if (i >= RESULTS.length) { return; } this.outputs.add(new PositionedStackAdv(output.getKey(), 102 + RESULTS[i][0] * 18, 10 + RESULTS[i][1] * 18).setChance(output.getValue())); i++; } } @Override public PositionedStack getIngredient() { this.randomRenderPermutation(this.input, RecipeHandlerRockCrusher.this.cycleticks / 20); return this.input; } @Override public List<PositionedStack> getOtherStacks() { return this.outputs; } @Override public PositionedStack getResult() { return null; } } @Override public String getRecipeName() { return Utils.translate("tile.railcraft.machine.alpha.rock.crusher.name", false); } @Override public String getRecipeID() { return "railcraft.rockcrusher"; } @Override public String getGuiTexture() { return "railcraft:textures/gui/gui_crusher.png"; } @Override public void loadTransferRects() { this.addTransferRect(68, 9, 29, 53); } @Override public Class<? extends GuiContainer> getGuiClass() { return guiClass; } @Override public void drawBackground(int recipe) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GuiDraw.changeTexture(this.getGuiTexture()); GuiDraw.drawTexturedModalRect(9, 0, 5, 11, 146, 65); } @Override public void drawExtras(int recipe) { this.drawProgressBar(68, 9, 176, 0, 29, 53, 48, 0); } @Override public void loadAllRecipes() { for (IRockCrusherRecipe recipe : RailcraftCraftingManager.rockCrusher.getRecipes()) { if (recipe == null) { continue; } this.arecipes.add(new CachedRockCrusherRecipe(recipe)); } } @Override public void loadCraftingRecipes(ItemStack result) { for (IRockCrusherRecipe recipe : RailcraftCraftingManager.rockCrusher.getRecipes()) { if (recipe == null) { continue; } if (recipe.getOutputs() != null) { for (Entry<ItemStack, Float> output : recipe.getOutputs()) { if (Utils.areStacksSameTypeCraftingSafe(output.getKey(), result)) { this.arecipes.add(new CachedRockCrusherRecipe(recipe)); break; } } } } } @Override public void loadUsageRecipes(ItemStack ingredient) { for (IRockCrusherRecipe recipe : RailcraftCraftingManager.rockCrusher.getRecipes()) { if (recipe == null) { continue; } if (Utils.areStacksSameTypeCraftingSafe(recipe.getInput(), ingredient)) { this.arecipes.add(new CachedRockCrusherRecipe(recipe)); } } } }