OSDN Git Service

素材製作台(減算処理・NBT処理抜き)を製作
[chemicraft/chemicraft.git] / common / chemicraft / util / MaterialRecipe.java
1 package chemicraft.util;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5
6 import net.minecraft.src.ItemStack;
7 import chemicraft.ChemiCraft;
8 import chemicraft.inventory.InventoryChemicalCraftingMaterial;
9 import chemicraft.inventory.InventoryChemicalCraftingNBT;
10
11 public class MaterialRecipe {
12
13         private ChemicalNBTRecipe nbtRecipe;
14         private ItemStack result;
15         private ItemStack[] material;
16         private boolean isSharpless = true;
17
18         public MaterialRecipe(ItemStack par1ItemStack, ItemStack[] par2ItemStacks, ChemicalNBTRecipe par3NBTRecipe, boolean par4){
19                 this.result = par1ItemStack;
20                 this.material = par2ItemStacks;
21                 this.nbtRecipe = par3NBTRecipe;
22                 this.isSharpless = par4;
23         }
24
25         public ItemStack match(InventoryChemicalCraftingMaterial par1IInventory){
26                 ArrayList<ItemStack> invItemsArray = new ArrayList<ItemStack>();
27                 ItemStack[] invItems;
28                 for(int i = 0;i < par1IInventory.getSizeInventory();i++){
29                         invItemsArray.add(par1IInventory.getStackInSlot(i));
30                 }
31                 invItems = invItemsArray.toArray(new ItemStack[invItemsArray.size()]);
32                 invItems = (ItemStack[]) ChemiCraft.instance.arrayAuxiliary.deleteNull(invItems);
33
34                 if(isSharpless){
35                         Arrays.sort(invItems, new ComparatorItemStack());
36                         Arrays.sort(this.material, new ComparatorItemStack());
37                         if(invItems.length != this.material.length) return null;
38                         for(int i = 0;i < this.material.length;i++){
39                                 if(this.material[i].itemID != invItems[i].itemID) return null;
40                                 if(this.material[i].getItemDamage() != invItems[i].getItemDamage()) return null;
41                         }
42                         return this.result;
43                 }else{
44                         if(this.material.length != invItems.length) return null;
45                         for(int i = 0;i < this.material.length;i++){
46                                 if(this.material[i] == null && invItems[i] != null) return null;
47                                 if(this.material[i] != null && invItems[i] == null) return null;
48                                 if(this.material[i] != null && invItems[i] != null){
49                                         if(this.material[i].itemID != invItems[i].itemID) return null;
50                                         if(this.material[i].getItemDamage() != invItems[i].getItemDamage()) return null;
51                                 }
52                         }
53                         return this.result;
54                 }
55         }
56
57         public ChemicalNBTRecipe nbtMatch(InventoryChemicalCraftingMaterial par1IInventory){
58                 ArrayList<ItemStack> invItemsArray = new ArrayList<ItemStack>();
59                 ItemStack[] invItems;
60                 for(int i = 0;i < par1IInventory.getSizeInventory();i++){
61                         invItemsArray.add(par1IInventory.getStackInSlot(i));
62                 }
63                 invItems = invItemsArray.toArray(new ItemStack[invItemsArray.size()]);
64                 invItems = (ItemStack[]) ChemiCraft.instance.arrayAuxiliary.deleteNull(invItems);
65
66                 if(isSharpless){
67                         Arrays.sort(invItems, new ComparatorItemStack());
68                         Arrays.sort(this.material, new ComparatorItemStack());
69                         if(invItems.length != this.material.length) return null;
70                         for(int i = 0;i < this.material.length;i++){
71                                 if(this.material[i].itemID != invItems[i].itemID) return null;
72                                 if(this.material[i].getItemDamage() != invItems[i].getItemDamage()) return null;
73                         }
74                         return this.nbtRecipe;
75                 }else{
76                         if(this.material.length != invItems.length) return null;
77                         for(int i = 0;i < this.material.length;i++){
78                                 if(this.material[i] != null && invItems[i] != null){
79                                         if(this.material[i].itemID != invItems[i].itemID) return null;
80                                         if(this.material[i].getItemDamage() != invItems[i].getItemDamage()) return null;
81                                 }
82                         }
83                         return this.nbtRecipe;
84                 }
85         }
86
87 }