package tconstruct.plugins.nei; import java.awt.Rectangle; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.minecraft.util.StatCollector; import net.minecraftforge.fluids.FluidStack; import org.lwjgl.opengl.GL11; import tconstruct.library.crafting.AlloyMix; import tconstruct.library.crafting.Smeltery; import codechicken.lib.gui.GuiDraw; import codechicken.nei.PositionedStack; public class RecipeHandlerAlloying extends RecipeHandlerBase { public static final Rectangle OUTPUT_TANK = new Rectangle(118, 9, 18, 32); public class CachedAlloyingRecipe extends CachedBaseRecipe { private List fluidTanks; private int minAmount; public CachedAlloyingRecipe(AlloyMix recipe) { this.fluidTanks = new ArrayList(); int maxAmount = recipe.mixers.get(0).amount; int mult = 1; this.minAmount = maxAmount; for (FluidStack stack : recipe.mixers) { if (stack.amount > maxAmount) { maxAmount = stack.amount; } if (stack.amount < this.minAmount) { this.minAmount = stack.amount; } } FluidTankElement tank = new FluidTankElement(OUTPUT_TANK, maxAmount * mult, recipe.result); tank.fluid.amount *= mult; this.fluidTanks.add(tank); int width = 36 / recipe.mixers.size(); int counter = 0; for (FluidStack stack : recipe.mixers) { if (counter == recipe.mixers.size() - 1) { tank = new FluidTankElement(new Rectangle(21 + width * counter, 9, 36 - width * counter, 32), maxAmount * mult, stack); } else { tank = new FluidTankElement(new Rectangle(21 + width * counter, 9, width, 32), maxAmount * mult, stack); } tank.fluid.amount *= mult; this.fluidTanks.add(tank); counter++; } } @Override public PositionedStack getIngredient () { return null; } @Override public PositionedStack getResult () { return null; } @Override public List getFluidTanks () { return this.fluidTanks; } } @Override public String getRecipeName () { return StatCollector.translateToLocal("tconstruct.nei.alloying"); } @Override public String getRecipeID () { return "tconstruct.smeltery.alloying"; } @Override public String getGuiTexture () { return "tinker:textures/gui/nei/smeltery.png"; } @Override public void loadTransferRects () { this.transferRects.add(new RecipeTransferRect(new Rectangle(76, 21, 22, 15), this.getRecipeID(), new Object[0])); } @Override public void drawBackground (int recipe) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GuiDraw.changeTexture(this.getGuiTexture()); GuiDraw.drawTexturedModalRect(0, 0, 0, 62, 160, 65); } @Override public void loadCraftingRecipes (String outputId, Object... results) { if (outputId.equals(this.getRecipeID())) { for (AlloyMix recipe : Smeltery.getAlloyList()) { if (!recipe.mixers.isEmpty()) { this.arecipes.add(new CachedAlloyingRecipe(recipe)); } } } else { super.loadCraftingRecipes(outputId, results); } } @Override public void loadCraftingRecipes (FluidStack result) { for (AlloyMix recipe : Smeltery.getAlloyList()) { if (areFluidsEqual(recipe.result, result) && !recipe.mixers.isEmpty()) { this.arecipes.add(new CachedAlloyingRecipe(recipe)); } } } @Override public void loadUsageRecipes (FluidStack ingredient) { for (Iterator i = Smeltery.getAlloyList().iterator(); i.hasNext();) { AlloyMix recipe = i.next(); for (FluidStack liquid : recipe.mixers) { if (areFluidsEqual(liquid, ingredient) && !recipe.mixers.isEmpty()) { this.arecipes.add(new CachedAlloyingRecipe(recipe)); break; } } } } }