package shedar.mods.ic2.nuclearcontrol; import ic2.api.item.IC2Items; import java.util.Vector; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.oredict.RecipeSorter; import shedar.mods.ic2.nuclearcontrol.items.ItemCardEnergyArrayLocation; import shedar.mods.ic2.nuclearcontrol.items.ItemCardEnergySensorLocation; import shedar.mods.ic2.nuclearcontrol.items.ItemCardLiquidArrayLocation; import shedar.mods.ic2.nuclearcontrol.items.ItemCardMultipleSensorLocation; import shedar.mods.ic2.nuclearcontrol.items.ItemKitMultipleSensor; import shedar.mods.ic2.nuclearcontrol.panel.CardWrapperImpl; public class StorageArrayRecipe implements IRecipe { static { RecipeSorter.register("IC2NuclearControl:storagearrayRecipe", StorageArrayRecipe.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); } @Override public boolean matches(InventoryCrafting inventory, World world) { return getCraftingResult(inventory) != null; } @Override public ItemStack getCraftingResult(InventoryCrafting inventory) { int inventoryLength = inventory.getSizeInventory(); boolean fail = false; int cardCount = 0; int arrayCount = 0; int cardCountLiquid = 0; int arrayCountLiquid = 0; ItemStack array = null; Vector<ItemStack> cards = new Vector<ItemStack>(); for (int i = 0; i < inventoryLength; i++) { ItemStack itemStack = inventory.getStackInSlot(i); if (itemStack == null) continue; if (itemStack.getItem() instanceof ItemCardEnergySensorLocation) { cards.add(itemStack); cardCount++; }else if(itemStack.getItem() instanceof ItemCardMultipleSensorLocation && itemStack.getItemDamage() == ItemKitMultipleSensor.TYPE_LIQUID) { cards.add(itemStack); cardCountLiquid++; }else if (itemStack.getItem() instanceof ItemCardEnergyArrayLocation){ array = itemStack; arrayCount++; }else if(itemStack.getItem() instanceof ItemCardLiquidArrayLocation){ array = itemStack; arrayCountLiquid++; }else{ fail = true; break; } } if(fail || (cardCount != 0 && cardCountLiquid != 0) || (arrayCount != 0 && arrayCountLiquid != 0) || (cardCount != 0 && arrayCountLiquid != 0) || (arrayCount != 0 && cardCountLiquid != 0)) { return null; } if(cardCount >= 2 && cardCount <= 6 && arrayCount == 0) { ItemStack itemStack = new ItemStack(IC2NuclearControl.itemEnergyArrayLocationCard, 1, 0); ItemCardEnergyArrayLocation.initArray(new CardWrapperImpl(itemStack, -1), cards); return itemStack; }else if(cardCount == 0 && arrayCount == 1){ int cnt = ItemCardEnergyArrayLocation.getCardCount(new CardWrapperImpl(array, -1)); if (cnt > 0) { return new ItemStack(IC2Items.getItem("electronicCircuit").getItem(), cnt, 0); } }else if(arrayCount == 1 && cardCount > 0) { int cnt = ItemCardEnergyArrayLocation.getCardCount(new CardWrapperImpl(array, -1)); if (cnt + cardCount <= 6) { ItemStack itemStack = new ItemStack(IC2NuclearControl.itemEnergyArrayLocationCard,1, 0); itemStack.setTagCompound((NBTTagCompound) array.getTagCompound().copy()); ItemCardEnergyArrayLocation.initArray(new CardWrapperImpl(itemStack, -1), cards); return itemStack; } } if(cardCountLiquid >= 2 && cardCountLiquid <= 6 && arrayCountLiquid == 0) { ItemStack itemStack = new ItemStack(IC2NuclearControl.itemLiquidArrayLocationCard, 1, 0); ItemCardLiquidArrayLocation.initArray(new CardWrapperImpl(itemStack, -1), cards); return itemStack; }else if(cardCountLiquid == 0 && arrayCountLiquid == 1){ int cnt = ItemCardLiquidArrayLocation.getCardCount(new CardWrapperImpl(array, -1)); if (cnt > 0) { return new ItemStack(IC2Items.getItem("electronicCircuit").getItem(), cnt, 0); } }else if(arrayCountLiquid == 1 && cardCountLiquid > 0){ int cnt = ItemCardLiquidArrayLocation.getCardCount(new CardWrapperImpl(array, -1)); if (cnt + cardCount <= 6) { ItemStack itemStack = new ItemStack(IC2NuclearControl.itemLiquidArrayLocationCard); itemStack.setTagCompound((NBTTagCompound) array.getTagCompound().copy()); ItemCardLiquidArrayLocation.initArray(new CardWrapperImpl(itemStack, -1), cards); return itemStack; } } return null; } @Override public int getRecipeSize() { return 2; } @Override public ItemStack getRecipeOutput() { return null; } }