package tonius.neiintegration.mods.forestry36;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
import tonius.neiintegration.PositionedFluidTank;
import tonius.neiintegration.PositionedStackAdv;
import tonius.neiintegration.RecipeHandlerBase;
import tonius.neiintegration.Utils;
import codechicken.nei.PositionedStack;
import forestry.factory.gadgets.MachineSqueezer;
public class RecipeHandlerSqueezer extends RecipeHandlerBase {
private static final int[][] INPUTS = new int[][] { { 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("forestry.factory.gui.GuiSqueezer");
}
public class CachedSqueezerRecipe extends CachedBaseRecipe {
public List<PositionedStack> inputs = new ArrayList<PositionedStack>();
public PositionedFluidTank tank;
public PositionedStackAdv remnants = null;
public CachedSqueezerRecipe(MachineSqueezer.Recipe recipe, boolean genPerms) {
if (recipe.resources != null) {
this.setIngredients(recipe.resources);
}
if (recipe.liquid != null) {
this.tank = new PositionedFluidTank(recipe.liquid, 10000, new Rectangle(80, 4, 16, 58), RecipeHandlerSqueezer.this.getGuiTexture(), new Point(176, 0));
}
if (recipe.remnants != null) {
this.remnants = new PositionedStackAdv(recipe.remnants, 118, 8).setChance(recipe.chance / 100F);
}
if (genPerms) {
this.generatePermutations();
}
}
public CachedSqueezerRecipe(MachineSqueezer.Recipe recipe) {
this(recipe, false);
}
public void setIngredients(ItemStack[] inputs) {
int i = 0;
for (ItemStack stack : inputs) {
if (i >= INPUTS.length) {
return;
}
this.inputs.add(new PositionedStack(stack, 14 + INPUTS[i][0] * 18, 7 + INPUTS[i][1] * 18, false));
i++;
}
}
@Override
public List<PositionedStack> getIngredients() {
return this.getCycledIngredients(RecipeHandlerSqueezer.this.cycleticks / 20, this.inputs);
}
@Override
public PositionedFluidTank getFluidTank() {
return this.tank;
}
@Override
public PositionedStack getResult() {
return this.remnants;
}
public void generatePermutations() {
for (PositionedStack p : this.inputs) {
p.generatePermutations();
}
}
}
@Override
public String getRecipeID() {
return "forestry.squeezer";
}
@Override
public String getRecipeName() {
return Utils.translate("tile.for.factory.5.name", false);
}
@Override
public String getGuiTexture() {
return "forestry:textures/gui/squeezer.png";
}
@Override
public void loadTransferRects() {
this.addTransferRect(98, 9, 15, 15);
}
@Override
public void drawExtras(int recipe) {
this.drawProgressBar(70, 8, 176, 60, 43, 18, 80, 0);
}
@Override
public Class<? extends GuiContainer> getGuiClass() {
return guiClass;
}
@Override
public void loadAllRecipes() {
for (MachineSqueezer.Recipe recipe : MachineSqueezer.RecipeManager.recipes) {
this.arecipes.add(new CachedSqueezerRecipe(recipe, true));
}
}
@Override
public void loadCraftingRecipes(ItemStack result) {
super.loadCraftingRecipes(result);
for (MachineSqueezer.Recipe recipe : MachineSqueezer.RecipeManager.recipes) {
if (Utils.areStacksSameTypeCraftingSafe(recipe.remnants, result)) {
this.arecipes.add(new CachedSqueezerRecipe(recipe, true));
}
}
}
@Override
public void loadCraftingRecipes(FluidStack result) {
for (MachineSqueezer.Recipe recipe : MachineSqueezer.RecipeManager.recipes) {
if (Utils.areFluidsSameType(recipe.liquid, result)) {
this.arecipes.add(new CachedSqueezerRecipe(recipe, true));
}
}
}
@Override
public void loadUsageRecipes(ItemStack ingred) {
for (MachineSqueezer.Recipe recipe : MachineSqueezer.RecipeManager.recipes) {
CachedSqueezerRecipe crecipe = new CachedSqueezerRecipe(recipe);
if (crecipe.inputs != null && crecipe.contains(crecipe.inputs, ingred)) {
crecipe.generatePermutations();
crecipe.setIngredientPermutation(crecipe.inputs, ingred);
this.arecipes.add(crecipe);
}
}
}
}