package com.pahimar.ee.item.crafting;
import com.pahimar.ee.exchange.WrappedStack;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
import java.util.List;
public class RecipeAludel
{
private ItemStack recipeOutput;
private WrappedStack inputStack;
private ItemStack dustStack;
public RecipeAludel(ItemStack recipeOutput, ItemStack inputStack, ItemStack dustStack)
{
this.recipeOutput = recipeOutput.copy();
this.inputStack = WrappedStack.build(inputStack);
this.dustStack = dustStack.copy();
}
public boolean matches(ItemStack inputStack, ItemStack dustStack)
{
return matches(WrappedStack.build(inputStack), dustStack);
}
public boolean matches(WrappedStack inputStack, ItemStack dustStack)
{
return compareStacks(this.inputStack, inputStack) && compareItemStacks(this.dustStack, dustStack);
}
private static boolean compareStacks(WrappedStack wrappedStack1, WrappedStack wrappedStack2)
{
if (wrappedStack1 != null && wrappedStack1.getObject() != null && wrappedStack2 != null && wrappedStack2.getObject() != null)
{
if (wrappedStack1.getObject() instanceof ItemStack && wrappedStack2.getObject() instanceof ItemStack)
{
ItemStack itemStack1 = (ItemStack) wrappedStack1.getObject();
itemStack1.setCount(wrappedStack1.getStackSize());
ItemStack itemStack2 = (ItemStack) wrappedStack2.getObject();
itemStack2.setCount(wrappedStack2.getStackSize());
return compareItemStacks(itemStack1, itemStack2);
}
}
return false;
}
private static boolean compareItemStacks(ItemStack itemStack1, ItemStack itemStack2)
{
if (itemStack1 != null && itemStack2 != null)
{
if (itemStack1.getItem().getIdFromItem(itemStack1.getItem()) == itemStack2.getItem().getIdFromItem(itemStack2.getItem()))
{
if (itemStack1.getItemDamage() == itemStack2.getItemDamage() || itemStack1.getItemDamage() == OreDictionary.WILDCARD_VALUE || itemStack2.getItemDamage() == OreDictionary.WILDCARD_VALUE)
{
if (itemStack1.hasTagCompound() && itemStack2.hasTagCompound())
{
if (itemStack1.getTagCompound().hashCode() == itemStack2.getTagCompound().hashCode())
{
return itemStack2.getCount() >= itemStack1.getCount();
}
}
else if (!itemStack1.hasTagCompound() && !itemStack2.hasTagCompound())
{
return itemStack2.getCount() >= itemStack1.getCount();
}
}
}
}
return false;
}
public ItemStack getRecipeOutput()
{
return this.recipeOutput;
}
public WrappedStack[] getRecipeInputs()
{
return new WrappedStack[]{inputStack, WrappedStack.build(dustStack)};
}
public List<WrappedStack> getRecipeInputsAsWrappedStacks()
{
List<WrappedStack> recipeInputs = new ArrayList<WrappedStack>();
recipeInputs.add(WrappedStack.build(inputStack));
recipeInputs.add(WrappedStack.build(dustStack));
return recipeInputs;
}
@Override
public boolean equals(Object object)
{
if (object instanceof RecipeAludel)
{
return matches((RecipeAludel) object);
}
return false;
}
public boolean matches(RecipeAludel recipeAludel)
{
return compareItemStacks(this.recipeOutput, recipeAludel.recipeOutput) && matches(recipeAludel.inputStack, recipeAludel.dustStack);
}
@Override
public String toString()
{
return String.format("Output: %s, Input: %s, Dust: %s", recipeOutput, inputStack, dustStack);
}
}