1 package pcc.chemicraft.system;
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Collections;
7 import net.minecraft.inventory.IInventory;
8 import net.minecraft.item.ItemStack;
9 import pcc.chemicraft.ChemiCraft;
10 import pcc.chemicraft.ChemiCraftAPI;
11 import pcc.chemicraft.inventory.InventoryChemicalCraftingMaterial;
12 import pcc.chemicraft.inventory.InventoryChemicalCraftingNBT;
13 import pcc.chemicraft.inventory.InventoryChemicalCraftingResult;
14 import pcc.chemicraft.inventory.InventoryToolAndWeaponCraftingTableMaterial;
15 import pcc.chemicraft.util.ChemicalNBTRecipe;
16 import pcc.chemicraft.util.ComparatorFormulaPart;
17 import pcc.chemicraft.util.ComparatorItemStack;
18 import pcc.chemicraft.util.FormulaPart;
20 public class ChemiCraftCraftingManager {
22 public ItemStack getToolAndWeaponCraftingResult(InventoryToolAndWeaponCraftingTableMaterial par1IInventory){
23 ChemiCraftAPI api = ChemiCraftAPI.getInstance();
24 ArrayList<ItemStack[]> materials = api.getToolAndWeaponMaterials();
25 ArrayList<ItemStack> result = api.getToolAndWeaponResult();
26 ArrayList<Boolean> sharpless = api.getToolAndWeaponSharpless();
28 ItemStack[] slotItems = new ItemStack[par1IInventory.getSizeInventory()];
29 for (int i = 0; i < par1IInventory.getSizeInventory(); i++) {
30 slotItems[i] = (par1IInventory.getStackInSlot(i));
34 for (int i = 0; i < materials.size(); i++) {
35 if (sharpless.get(i)) {
36 slotItems = ChemiCraft.instance.arrayAuxiliary.deleteNull(slotItems);
37 Collections.sort(materials, new ComparatorItemStack());
38 Arrays.sort(slotItems, new ComparatorItemStack());
39 if (materials.size() != slotItems.length) continue label1;
41 for (int j = 0; j < materials.size(); j++) {
42 if (materials.get(i)[j].itemID != slotItems[j].itemID) {
43 if (materials.get(i)[j].getItemDamage() != slotItems[j].getItemDamage()) {
50 slotItems = ChemiCraft.instance.arrayAuxiliary.deleteNull(slotItems);
51 if (materials.get(i).length != slotItems.length) continue label1;
53 for (int j = 0; j < materials.size(); j++) {
54 if (materials.get(i)[j].itemID != slotItems[j].itemID) {
55 if (materials.get(i)[j].getItemDamage() != slotItems[j].getItemDamage()) {
68 public ItemStack getChemicalCombinationResult(ArrayList<String> atomsList, ArrayList<Integer> atomsAmountList){
69 ChemiCraftAPI api = ChemiCraftAPI.getInstance();
71 for (int i = 0; i < api.getChemicalCombinationAtoms().size(); i++) {
72 FormulaPart[] var1 = new FormulaPart[atomsList.size()];
73 FormulaPart[] var2 = new FormulaPart[api.getChemicalCombinationAtoms().get(i).length];
74 for (int j = 0; j < atomsList.size(); j++) {
75 var1[j] = new FormulaPart(atomsList.get(j), atomsAmountList.get(j));
77 for (int j = 0; j < api.getChemicalCombinationAtoms().get(i).length; j++) {
78 var2[j] = new FormulaPart(api.getChemicalCombinationAtoms().get(i)[j], api.getChemicalCombinationAmounts().get(i)[j]);
80 Arrays.sort(var1, new ComparatorFormulaPart());
81 Arrays.sort(var2, new ComparatorFormulaPart());
82 if (var1.length != var2.length) {
85 for (int j = 0; j < var1.length; j++) {
86 if (!var1[j].equals(var2[j])) {
90 return api.getChemicalCombinationResult().get(i);
97 public ChemicalNBTRecipe chemicalCrafting(InventoryChemicalCraftingMaterial par1IInventory, InventoryChemicalCraftingResult par2IInventory, InventoryChemicalCraftingNBT par3IInventory){
98 ChemiCraftAPI api = ChemiCraftAPI.getInstance();
99 ChemicalNBTRecipe returnObj = null;
100 for(int i = 0;i < api.getMaterialRecipe().size();i++){
101 ItemStack result = api.getMaterialRecipe().get(i).match(par1IInventory);
102 ItemStack resultArg = null;
104 resultArg = new ItemStack(result.itemID, result.stackSize, result.getItemDamage());
105 if(api.getMaterialRecipe().get(i).nbtMatch(par1IInventory) != null){
106 ItemStack[] nbtInv = new ItemStack[par3IInventory.getSizeInventory()];
107 for(int j = 0;j < par3IInventory.getSizeInventory();j++){
108 nbtInv[j] = par3IInventory.getStackInSlot(j);
110 api.getMaterialRecipe().get(i).nbtMatch(par1IInventory).setNBT(nbtInv, resultArg);
112 returnObj = api.getMaterialRecipe().get(i).nbtMatch(par1IInventory);
114 par2IInventory.setInventorySlotContents(0, resultArg);
121 private void clearResults(IInventory par1IInventory, int par2){
123 * Commented by mozipi.
124 ((InventoryDecomposition)par1IInventory).setFlag(false);
126 for(int i = 0;i < par2;i++){
127 par1IInventory.setInventorySlotContents(i, null);