package mekanism.common.content.assemblicator;
import mekanism.api.util.StackUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.RecipeUtils;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World;
public class RecipeFormula
{
private InventoryCrafting dummy = MekanismUtils.getDummyCraftingInv();
public ItemStack[] input = new ItemStack[9];
public IRecipe recipe = null;
public RecipeFormula(World world, ItemStack[] inv)
{
this(world, inv, 0);
}
public RecipeFormula(World world, ItemStack[] inv, int start)
{
for(int i = 0; i < 9; i++)
{
input[i] = StackUtils.size(inv[start+i], 1);
}
resetToRecipe();
recipe = RecipeUtils.getRecipeFromGrid(dummy, world);
}
private void resetToRecipe()
{
for(int i = 0; i < 9; i++)
{
dummy.setInventorySlotContents(i, input[i]);
}
}
public boolean matches(World world, ItemStack[] newInput, int start)
{
for(int i = 0; i < 9; i++)
{
dummy.setInventorySlotContents(i, newInput[start+i]);
}
return recipe.matches(dummy, world);
}
public boolean isIngredientInPos(World world, ItemStack stack, int i)
{
resetToRecipe();
dummy.setInventorySlotContents(i, stack);
return recipe.matches(dummy, world);
}
public boolean isIngredient(World world, ItemStack stack)
{
for(int i = 0; i < 9; i++)
{
dummy.setInventorySlotContents(i, stack);
if(recipe.matches(dummy, world))
{
return true;
}
dummy.setInventorySlotContents(i, input[i]);
}
return false;
}
public boolean isValidFormula(World world)
{
return getRecipe(world) != null;
}
public IRecipe getRecipe(World world)
{
return recipe;
}
public boolean isFormulaEqual(World world, RecipeFormula formula)
{
return formula.getRecipe(world) == getRecipe(world);
}
}