package lumaceon.mods.clockworkphase2.recipe.customrecipe;
import net.minecraft.block.Block;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ShapelessOreRecipeDegradeItem extends ShapelessOreRecipe
{
public Item itemToDegrade;
public ShapelessOreRecipeDegradeItem(Block result, Item itemToDegrade, Object... recipe) {
super(result, recipe);
this.itemToDegrade = itemToDegrade;
}
public ShapelessOreRecipeDegradeItem(Item result, Item itemToDegrade, Object... recipe) {
super(result, recipe);
this.itemToDegrade = itemToDegrade;
}
public ShapelessOreRecipeDegradeItem(ItemStack result, Item itemToDegrade, Object... recipe) {
super(result, recipe);
this.itemToDegrade = itemToDegrade;
}
@SuppressWarnings("unchecked")
@Override
public boolean matches(InventoryCrafting var1, World world)
{
ArrayList<Object> required = new ArrayList<Object>(input);
for (int x = 0; x < var1.getSizeInventory(); x++)
{
ItemStack slot = var1.getStackInSlot(x);
if (slot != null)
{
boolean inRecipe = false;
Iterator<Object> req = required.iterator();
while(req.hasNext())
{
boolean match = false;
Object next = req.next();
if(next instanceof ItemStack)
{
match = itemMatches((ItemStack) next, slot);
}
else if(next instanceof List)
{
Iterator<ItemStack> itr = ((List<ItemStack>)next).iterator();
while(itr.hasNext() && !match)
{
match = itemMatches(itr.next(), slot);
}
}
if (match)
{
inRecipe = true;
required.remove(next);
break;
}
}
if (!inRecipe)
{
return false;
}
}
}
return required.isEmpty();
}
public boolean itemMatches(ItemStack target, ItemStack input) {
return !(input == null && target != null || input != null && target == null) && target != null && (target.getItem() == input.getItem());
}
@Override
public ItemStack[] getRemainingItems(InventoryCrafting inv)
{
ItemStack[] ret = new ItemStack[inv.getSizeInventory()];
for(int n = 0; n < ret.length; n++)
{
ItemStack i = inv.getStackInSlot(n);
if(i != null && i.getItem().equals(itemToDegrade))
{
if(i.getItemDamage() == i.getMaxDamage() - 1)
continue;
ItemStack stack = new ItemStack(i.getItem());
stack.setItemDamage(i.getItemDamage() + 1);
ret[n] = stack;
}
}
return ret;
}
}