package ihl.recipes; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; public class UniversalRecipeOutput{ private final List fluidOutputs=new ArrayList(); private final List itemOutputs=new ArrayList(); private final int time; public UniversalRecipeOutput(List fluidOutputs1, List itemOutputs1, int time1) { if(fluidOutputs1!=null)fluidOutputs.addAll(fluidOutputs1); if(itemOutputs1!=null)itemOutputs.addAll(itemOutputs1); time=time1; } public UniversalRecipeOutput(FluidStack fluidStack) { fluidOutputs.add(fluidStack); time=20; } public UniversalRecipeOutput(List fluidOutputs1, int time1) { if(fluidOutputs1!=null)fluidOutputs.addAll(fluidOutputs1); time=time1; } public UniversalRecipeOutput(List itemOutputs1) { if(itemOutputs1!=null)itemOutputs.addAll(itemOutputs1); time=0; } public UniversalRecipeOutput(ItemStack itemStack) { itemOutputs.add(itemStack); time=0; } public boolean matches(List fluidOutputs1, List itemOutputs1) { if(fluidOutputs.size()!=fluidOutputs1.size()||itemOutputs.size()!=itemOutputs.size()) { return false; } Iterator fi1 = fluidOutputs1.iterator(); Iterator ii1 = itemOutputs1.iterator(); Iterator fi = fluidOutputs.iterator(); Iterator ii = itemOutputs.iterator(); while(fi.hasNext()) { FluidStack fs = fi.next(); FluidStack fs1 = fi1.next(); if(fs.getFluid()!=fs1.getFluid()) { return false; } } while(ii.hasNext()) { ItemStack is = ii.next(); ItemStack is1 = ii1.next(); if(is==null) { return true; } if((is!=null && is1==null)||(is.getItem()!=is1.getItem())) { return false; } else if(is.getItemDamage()!=OreDictionary.WILDCARD_VALUE && is.getItemDamage()!=is1.getItemDamage()) { return false; } } return true; } public List getFluidOutputs() { return fluidOutputs; } public List getItemOutputs() { return itemOutputs; } public UniversalRecipeOutput copy() { ArrayList fluidStacks = new ArrayList(); ArrayList itemStacks = new ArrayList(); if(fluidOutputs!=null && !fluidOutputs.isEmpty()) { Iterator fi = fluidOutputs.iterator(); while(fi.hasNext()) { FluidStack fs = fi.next(); fluidStacks.add(fs.copy()); } } if(itemOutputs!=null && !itemOutputs.isEmpty()) { Iterator ii = itemOutputs.iterator(); while(ii.hasNext()) { ItemStack is = ii.next(); if(is!=null) { itemStacks.add(is.copy()); } else { itemStacks.add(is); } } } return new UniversalRecipeOutput(fluidStacks,itemStacks, time); } public boolean containItem(Item item) { if(itemOutputs==null || itemOutputs.isEmpty()) { return false; } Iterator ii = itemOutputs.iterator(); while(ii.hasNext()) { ItemStack is = ii.next(); if(is.getItem()==item) { return true; } } return false; } public boolean replaceItem(ItemStack newItemStack) { if(itemOutputs==null || itemOutputs.isEmpty()) { return false; } Iterator ii = itemOutputs.iterator(); while(ii.hasNext()) { ItemStack is = ii.next(); if(is.getItem()==newItemStack.getItem()) { is=newItemStack; return true; } } return false; } public UniversalRecipeOutput copyWithMultiplier(int mulipier) { ArrayList fluidStacks = new ArrayList(); ArrayList itemStacks = new ArrayList(); if(fluidOutputs!=null && !fluidOutputs.isEmpty()) { Iterator fi = fluidOutputs.iterator(); while(fi.hasNext()) { FluidStack fs = fi.next(); FluidStack newFs = fs.copy(); newFs.amount*=mulipier; fluidStacks.add(newFs); } } if(itemOutputs!=null && !itemOutputs.isEmpty()) { Iterator ii = itemOutputs.iterator(); while(ii.hasNext()) { ItemStack is = ii.next(); if(is!=null) { ItemStack newIs = is.copy(); newIs.stackSize*=mulipier; itemStacks.add(newIs); } else { itemStacks.add(is); } } } return new UniversalRecipeOutput(fluidStacks,itemStacks, time); } }