2014-09-19 13:58:12 +02:00
|
|
|
package tconstruct.plugins.nei;
|
2014-09-18 19:23:28 +02:00
|
|
|
|
|
|
|
|
import java.awt.Rectangle;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
2014-10-22 22:37:12 +02:00
|
|
|
import net.minecraft.util.StatCollector;
|
|
|
|
|
|
2014-09-18 19:23:28 +02:00
|
|
|
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<FluidTankElement> fluidTanks;
|
|
|
|
|
private int minAmount;
|
|
|
|
|
|
|
|
|
|
public CachedAlloyingRecipe(AlloyMix recipe)
|
|
|
|
|
{
|
|
|
|
|
this.fluidTanks = new ArrayList<FluidTankElement>();
|
|
|
|
|
|
|
|
|
|
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<FluidTankElement> getFluidTanks ()
|
|
|
|
|
{
|
|
|
|
|
return this.fluidTanks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getRecipeName ()
|
|
|
|
|
{
|
2014-10-22 22:37:12 +02:00
|
|
|
return StatCollector.translateToLocal("tconstruct.nei.alloying");
|
2014-09-18 19:23:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getRecipeID ()
|
|
|
|
|
{
|
|
|
|
|
return "tconstruct.smeltery.alloying";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String getGuiTexture ()
|
|
|
|
|
{
|
|
|
|
|
return "tinker:textures/gui/nei/smeltery.png";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void loadTransferRects ()
|
|
|
|
|
{
|
2014-09-19 13:58:12 +02:00
|
|
|
this.transferRects.add(new RecipeTransferRect(new Rectangle(76, 21, 22, 15), this.getRecipeID(), new Object[0]));
|
2014-09-18 19:23:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@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<AlloyMix> 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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|