package crazypants.enderio.conduit.item.filter; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.world.World; import net.minecraftforge.oredict.RecipeSorter; import net.minecraftforge.oredict.RecipeSorter.Category; import crazypants.enderio.conduit.item.FilterRegister; public class CopyFilterRecipe implements IRecipe{ static { RecipeSorter.register("EnderIO:copyFilter", CopyFilterRecipe.class, Category.SHAPELESS, "after:minecraft:shapeless"); } private ItemStack output; @Override public boolean matches(InventoryCrafting inv, World world) { int blankCount = 0; ItemStack filterInput = null; for (int i = 0; i < inv.getSizeInventory(); i++) { ItemStack checkStack = inv.getStackInSlot(i); if (checkStack != null && checkStack.getItem() instanceof IItemFilterUpgrade) { if(FilterRegister.isFilterSet(checkStack)) { if(filterInput != null) { return false; } filterInput = checkStack; } else { if(!isSameTypeOrNull(filterInput, checkStack)) { return false; } blankCount++; } } } if(blankCount == 0 || filterInput == null) { return false; } output = filterInput.copy(); output.stackSize = blankCount + 1; return true; } private boolean isSameTypeOrNull(ItemStack matchOrNull, ItemStack checkStack) { return matchOrNull == null || (matchOrNull.getItem() == checkStack.getItem() && matchOrNull.getItemDamage() == checkStack.getItemDamage()); } @Override public ItemStack getCraftingResult(InventoryCrafting inv) { return output.copy(); } @Override public int getRecipeSize() { return 1; } @Override public ItemStack getRecipeOutput() { return output; } }