OSDN Git Service

素材製作台多分完成
authormozipi <mozipi@users.sourceforge.jp>
Sat, 29 Dec 2012 07:43:20 +0000 (16:43 +0900)
committermozipi <mozipi@users.sourceforge.jp>
Sat, 29 Dec 2012 07:43:20 +0000 (16:43 +0900)
common/chemicraft/container/ContainerChemicalCraftingTable.java
common/chemicraft/inventory/InventoryChemicalCraftingResult.java
common/chemicraft/util/MaterialRecipe.java
common/chemicraft/util/NBTRecipeGrenade.java

index 613614f..2205736 100644 (file)
@@ -84,7 +84,7 @@ public class ContainerChemicalCraftingTable extends Container {
 
        @Override
        public void onCraftMatrixChanged(IInventory par1IInventory){
-               ChemiCraftAPI.instance.getCraftingManager().chemicalCrafting(this.invm, this.invr, this.invn);
+               this.useNBT = ChemiCraftAPI.instance.getCraftingManager().chemicalCrafting(this.invm, this.invr, this.invn);
        }
 
        @Override
@@ -92,7 +92,40 @@ public class ContainerChemicalCraftingTable extends Container {
                super.onCraftGuiClosed(par1EntityPlayer);
        }
 
-
+       @Override
+       public ItemStack slotClick(int par1, int par2, boolean par3, EntityPlayer par4EntityPlayer)
+       {
+               if(par1 == 12){
+                       if(this.invr.getStackInSlot(0) == null) return super.slotClick(par1, par2, par3, par4EntityPlayer);
+                       ItemStack var1 = par4EntityPlayer.inventory.getItemStack();
+                       if(var1 != null){
+                               if(var1.stackSize + this.invr.getStackInSlot(0).stackSize >= var1.getMaxStackSize()) return super.slotClick(par1, par2, par3, par4EntityPlayer);
+                       }
+                       for(int i = 0;i < this.invm.getSizeInventory();i++){
+                               if(this.invm.getStackInSlot(i) != null){
+                                       if(this.invm.getStackInSlot(i).stackSize > 1){
+                                               this.invm.getStackInSlot(i).stackSize--;
+                                       }else{
+                                               this.invm.setInventorySlotContents(i, null);
+                                       }
+                               }
+                       }
+                       ItemStack[] matchNBT = new ItemStack[this.invn.getSizeInventory()];
+                       for(int i = 0;i < this.invn.getSizeInventory();i++){
+                               matchNBT[i] = this.invn.getStackInSlot(i);
+                       }
+                       if(this.useNBT == null) return super.slotClick(par1, par2, par3, par4EntityPlayer);
+                       ItemStack[] useItems = this.useNBT.getMatchItems(matchNBT);
+                       for(int i = 0;i < useItems.length;i++){
+                               if(useItems != null){
+                                       if(useItems[i] != null){
+                                               this.invn.setInventorySlotContents(i, null);
+                                       }
+                               }
+                       }
+               }
+               return super.slotClick(par1, par2, par3, par4EntityPlayer);
+       }
 
        @Override
        public boolean canInteractWith(EntityPlayer par1EntityPlayer){
index 9b6deae..418100b 100644 (file)
@@ -72,6 +72,7 @@ public class InventoryChemicalCraftingResult implements IInventory {
 
        @Override
        public void onInventoryChanged() {
+               this.eventHandelr.onCraftMatrixChanged(this);
        }
 
        @Override
index 6d26e7d..e36dd78 100644 (file)
@@ -75,6 +75,8 @@ public class MaterialRecipe {
                }else{
                        if(this.material.length != invItems.length) return null;
                        for(int i = 0;i < this.material.length;i++){
+                               if(this.material[i] == null && invItems[i] != null) return null;
+                               if(this.material[i] != null && invItems[i] == null) return null;
                                if(this.material[i] != null && invItems[i] != null){
                                        if(this.material[i].itemID != invItems[i].itemID) return null;
                                        if(this.material[i].getItemDamage() != invItems[i].getItemDamage()) return null;
index a7c5e18..8a04c8e 100644 (file)
@@ -14,7 +14,23 @@ public class NBTRecipeGrenade extends ChemicalNBTRecipe {
 
        @Override
        public ItemStack[] getMatchItems(ItemStack[] materials) {
-               return null;
+               ItemStack[] var1 = new ItemStack[materials.length];
+               for(int i = 0;i < var1.length;i++){
+                       if(materials[i] != null){
+                               if(materials[i].getItemDamage() == ChemiCraft.HYDROGEN){
+                                       var1[i] = materials[i];
+                               }else if(materials[i].getItemDamage() == ChemiCraft.CARBON){
+                                       var1[i] = materials[i];
+                               }else if(materials[i].getItemDamage() == ChemiCraft.URANIUM){
+                                       var1[i] = materials[i];
+                               }else{
+                                       var1[i] = null;
+                               }
+                       }else{
+                               var1[i] = null;
+                       }
+               }
+               return var1;
        }
 
 }