package com.austinv11.peripheralsplusplus.event.handler;
import com.austinv11.collectiveframework.minecraft.utils.NBTHelper;
import com.austinv11.peripheralsplusplus.hooks.ComputerCraftRegistry;
import com.austinv11.peripheralsplusplus.reference.Config;
import com.austinv11.peripheralsplusplus.reference.Reference;
import cpw.mods.fml.common.registry.GameRegistry;
import dan200.computercraft.shared.pocket.items.ItemPocketComputer;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagFloat;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
public class PocketComputerCraftingHandler implements IRecipe {
private int findUpgradeItem(ItemStack stack) {
for (ItemStack stack1 : ComputerCraftRegistry.craftingRecipes.keySet())
if (stack.isItemEqual(stack1))
return ComputerCraftRegistry.craftingRecipes.get(stack1);
return -1;
}
@Override
public boolean matches(InventoryCrafting inventory, World world) {
int computerSlot = -1;
int upgradeSlot = -1;
for (int i = 0; i < inventory.getSizeInventory(); i++) {
if (inventory.getStackInSlot(i) != null) {
if (inventory.getStackInSlot(i).getItem() instanceof ItemPocketComputer) {
if (computerSlot != -1)
return false;
computerSlot = i;
} else if (findUpgradeItem(inventory.getStackInSlot(i)) != -1) {
if (upgradeSlot != -1)
return false;
upgradeSlot = i;
} else
return false;
}
}
if (computerSlot == -1 || upgradeSlot == -1)
return false;
ItemStack computerStack = inventory.getStackInSlot(computerSlot).copy();
if (NBTHelper.hasTag(computerStack, "upgrade")) {
if (NBTHelper.getShort(computerStack, "upgrade") == Reference.PERIPHERAL_CONTAINER) {
if (!NBTHelper.hasTag(computerStack, "upgrades"))
return true;
NBTTagList list = NBTHelper.getList(computerStack, "upgrades", Constants.NBT.TAG_FLOAT);
if (list.tagCount() > Config.maxNumberOfPeripherals)
return false;
return true;
}
return false;
}
return true;
}
@Override
public ItemStack getCraftingResult(InventoryCrafting inventory) {
int computerSlot = -1;
int upgradeSlot = -1;
int upgrade = 1;
for (int i = 0; i < inventory.getSizeInventory(); i++) {
if (inventory.getStackInSlot(i) != null) {
if (inventory.getStackInSlot(i).getItem() instanceof ItemPocketComputer) {
if (computerSlot != -1)
return null;
computerSlot = i;
} else if ((upgrade = findUpgradeItem(inventory.getStackInSlot(i))) != -1) {
if (upgradeSlot != -1)
return null;
upgradeSlot = i;
} else
return null;
}
}
if (computerSlot == -1 || upgradeSlot == -1)
return null;
ItemStack computerStack = inventory.getStackInSlot(computerSlot).copy();
if (NBTHelper.hasTag(computerStack, "upgrade")) {
if (NBTHelper.getShort(computerStack, "upgrade") == Reference.PERIPHERAL_CONTAINER) {
if (!NBTHelper.hasTag(computerStack, "upgrades"))
NBTHelper.setList(computerStack, "upgrades", new NBTTagList());
NBTTagList list = NBTHelper.getList(computerStack, "upgrades", Constants.NBT.TAG_FLOAT);
if (list.tagCount() > Config.maxNumberOfPeripherals)
return null;
list.appendTag(new NBTTagFloat(upgrade));
} else
return null;
} else
NBTHelper.setShort(computerStack, "upgrade", (short)upgrade);
NBTHelper.removeTag(computerStack, "instanceID");
NBTHelper.removeTag(computerStack, "sessionID");
return computerStack;
}
@Override
public int getRecipeSize() {
return 2;
}
@Override
public ItemStack getRecipeOutput() {
return new ItemStack(GameRegistry.findItem("ComputerCraft", "pocketComputer"));
}
}