From cc4e3aeca1c1b152e392e867e2b8bff97b5d01d0 Mon Sep 17 00:00:00 2001 From: mozipi Date: Sat, 29 Dec 2012 19:01:43 +0900 Subject: [PATCH] =?utf8?q?=E7=B4=A0=E6=9D=90=E8=A3=BD=E4=BD=9C=E5=8F=B0&?= =?utf8?q?=E6=89=8B=E6=A6=B4=E5=BC=BE=E5=AE=8C=E6=88=90=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- common/chemicraft/ChemiCraft.java | 2 +- common/chemicraft/entity/EntityAtomGrenade.java | 19 +++++++++++----- .../inventory/InventoryChemicalCraftingNBT.java | 1 + .../system/ChemiCraftCraftingManager.java | 10 +++++---- common/chemicraft/util/ComparatorItemStack.java | 13 ++++++++--- common/chemicraft/util/MaterialRecipe.java | 5 +++-- common/chemicraft/util/NBTRecipeGrenade.java | 26 ++++++++++++++++++++++ 7 files changed, 61 insertions(+), 15 deletions(-) diff --git a/common/chemicraft/ChemiCraft.java b/common/chemicraft/ChemiCraft.java index 991b668..db86a69 100644 --- a/common/chemicraft/ChemiCraft.java +++ b/common/chemicraft/ChemiCraft.java @@ -294,7 +294,7 @@ public class ChemiCraft { ChemiCraftAPI.instance.addChemicalCombinationRecipe(new ItemStack[]{new ItemStack(this.itemAtoms, 5), new ItemStack(this.itemAtoms, 7)}, new ItemStack(this.itemCompounds, 0)); //手榴弾の追加 - ChemiCraftAPI.instance.addMaterialRecipe(new ItemStack[]{new ItemStack(Item.gunpowder), new ItemStack(Block.stone)}, new ItemStack(this.itemAtomGrenade, 16, 0), new NBTRecipeGrenade()); + ChemiCraftAPI.instance.addMaterialRecipe(new ItemStack[]{null, new ItemStack(Block.stone), null, new ItemStack(Block.stone), new ItemStack(Item.gunpowder), new ItemStack(Block.stone), null, new ItemStack(Block.stone), null}, new ItemStack(this.itemAtomGrenade, 16, 0), new NBTRecipeGrenade()); } diff --git a/common/chemicraft/entity/EntityAtomGrenade.java b/common/chemicraft/entity/EntityAtomGrenade.java index 98823db..ad7e9fa 100644 --- a/common/chemicraft/entity/EntityAtomGrenade.java +++ b/common/chemicraft/entity/EntityAtomGrenade.java @@ -1,6 +1,6 @@ package chemicraft.entity; -import java.util.List; +import java.util.Iterator; import net.minecraft.src.DamageSource; import net.minecraft.src.Entity; @@ -52,10 +52,19 @@ public class EntityAtomGrenade extends EntityThrowable this.isDead = true; }else if(!this.worldObj.isRemote && isNuke){ this.worldObj.newExplosion((Entity)null, this.posX, this.posY, this.posZ, explodeSize, onFire); - List entity = this.worldObj.getEntitiesWithinAABB(EntityLiving.class, this.boundingBox.expand(20, 20, 20)); - for(int i = 0;i < entity.size();i++){ - ((EntityLiving)entity.get(i)).addPotionEffect(new PotionEffect(18, 1, 60 * 20)); - ((EntityLiving)entity.get(i)).addPotionEffect(new PotionEffect(19, 1, 60 * 20)); + Iterator itr = this.worldObj.getEntitiesWithinAABB(EntityLiving.class, this.boundingBox.expand(30, 30, 30)).iterator(); + while(itr.hasNext()){ + EntityLiving entity = (EntityLiving) itr.next(); + double dx = Math.abs(entity.posX - this.posX); + double dy = Math.abs(entity.posY - this.posY); + double dz = Math.abs(entity.posZ - this.posZ); + int distance = (int)Math.sqrt( Math.pow(dx, 2) + Math.pow(dy, 2) + Math.pow(dz, 2) ); + if(30 - distance >= 0){ + entity.addPotionEffect(new PotionEffect(2, (60 + (30 - distance)) * 20, (30 - distance) / 5)); + entity.addPotionEffect(new PotionEffect(4, (60 + (30 - distance)) * 20, (30 - distance) / 5)); + entity.addPotionEffect(new PotionEffect(18, (60 + (30 - distance)) * 20, (30 - distance) / 5)); + entity.addPotionEffect(new PotionEffect(19, (60 + (30 - distance)) * 20, (30 - distance) / 5)); + } } this.isDead = true; } diff --git a/common/chemicraft/inventory/InventoryChemicalCraftingNBT.java b/common/chemicraft/inventory/InventoryChemicalCraftingNBT.java index b390bc1..9c21cc2 100644 --- a/common/chemicraft/inventory/InventoryChemicalCraftingNBT.java +++ b/common/chemicraft/inventory/InventoryChemicalCraftingNBT.java @@ -72,6 +72,7 @@ public class InventoryChemicalCraftingNBT implements IInventory { @Override public void onInventoryChanged() { + this.eventHandelr.onCraftMatrixChanged(this); } @Override diff --git a/common/chemicraft/system/ChemiCraftCraftingManager.java b/common/chemicraft/system/ChemiCraftCraftingManager.java index 5ecf8c5..a9dbf13 100644 --- a/common/chemicraft/system/ChemiCraftCraftingManager.java +++ b/common/chemicraft/system/ChemiCraftCraftingManager.java @@ -144,11 +144,13 @@ public class ChemiCraftCraftingManager { ItemStack resultArg = null; if(result != null){ resultArg = new ItemStack(result.itemID, result.stackSize, result.getItemDamage()); - ItemStack[] nbtInv = new ItemStack[par3IInventory.getSizeInventory()]; - for(int j = 0;j < par3IInventory.getSizeInventory();j++){ - nbtInv[j] = par3IInventory.getStackInSlot(j); + if(api.getMaterialRecipe().get(i).nbtMatch(par1IInventory) != null){ + ItemStack[] nbtInv = new ItemStack[par3IInventory.getSizeInventory()]; + for(int j = 0;j < par3IInventory.getSizeInventory();j++){ + nbtInv[j] = par3IInventory.getStackInSlot(j); + } + api.getMaterialRecipe().get(i).nbtMatch(par1IInventory).setNBT(nbtInv, resultArg); } - api.getMaterialRecipe().get(i).nbtMatch(par1IInventory).setNBT(nbtInv, resultArg); returnObj = api.getMaterialRecipe().get(i).nbtMatch(par1IInventory); } par2IInventory.setInventorySlotContents(0, resultArg); diff --git a/common/chemicraft/util/ComparatorItemStack.java b/common/chemicraft/util/ComparatorItemStack.java index 27de526..8cc5412 100644 --- a/common/chemicraft/util/ComparatorItemStack.java +++ b/common/chemicraft/util/ComparatorItemStack.java @@ -11,10 +11,17 @@ public class ComparatorItemStack implements Comparator { public int compare(Object o1, Object o2) { ItemStack i1 = (ItemStack) o1; ItemStack i2 = (ItemStack) o2; - if(i1.itemID == i2.itemID){ - return i1.getItemDamage() > i2.getItemDamage() ? 1 : -1; + + if(i1 != null && i2 != null){ + if(i1.itemID == i2.itemID){ + return i1.getItemDamage() > i2.getItemDamage() ? 1 : -1; + } + return i1.itemID > i2.itemID ? 1 : -1; } - return i1.itemID > i2.itemID ? 1 : -1; + if(i1 == null && i2 == null) return 0; + if(i1 != null && i2 == null) return -1; + if(i1 == null && i2 != null) return 1; + return 0; } } diff --git a/common/chemicraft/util/MaterialRecipe.java b/common/chemicraft/util/MaterialRecipe.java index e36dd78..38561cf 100644 --- a/common/chemicraft/util/MaterialRecipe.java +++ b/common/chemicraft/util/MaterialRecipe.java @@ -29,11 +29,11 @@ public class MaterialRecipe { invItemsArray.add(par1IInventory.getStackInSlot(i)); } invItems = invItemsArray.toArray(new ItemStack[invItemsArray.size()]); - invItems = (ItemStack[]) ChemiCraft.instance.arrayAuxiliary.deleteNull(invItems); if(isSharpless){ Arrays.sort(invItems, new ComparatorItemStack()); Arrays.sort(this.material, new ComparatorItemStack()); + invItems = (ItemStack[]) ChemiCraft.instance.arrayAuxiliary.deleteNull(invItems); if(invItems.length != this.material.length) return null; for(int i = 0;i < this.material.length;i++){ if(this.material[i].itemID != invItems[i].itemID) return null; @@ -61,16 +61,17 @@ public class MaterialRecipe { invItemsArray.add(par1IInventory.getStackInSlot(i)); } invItems = invItemsArray.toArray(new ItemStack[invItemsArray.size()]); - invItems = (ItemStack[]) ChemiCraft.instance.arrayAuxiliary.deleteNull(invItems); if(isSharpless){ Arrays.sort(invItems, new ComparatorItemStack()); Arrays.sort(this.material, new ComparatorItemStack()); + invItems = (ItemStack[]) ChemiCraft.instance.arrayAuxiliary.deleteNull(invItems); if(invItems.length != this.material.length) return null; for(int i = 0;i < this.material.length;i++){ if(this.material[i].itemID != invItems[i].itemID) return null; if(this.material[i].getItemDamage() != invItems[i].getItemDamage()) return null; } + System.out.println(this.nbtRecipe); return this.nbtRecipe; }else{ if(this.material.length != invItems.length) return null; diff --git a/common/chemicraft/util/NBTRecipeGrenade.java b/common/chemicraft/util/NBTRecipeGrenade.java index 8a04c8e..827e936 100644 --- a/common/chemicraft/util/NBTRecipeGrenade.java +++ b/common/chemicraft/util/NBTRecipeGrenade.java @@ -9,6 +9,32 @@ public class NBTRecipeGrenade extends ChemicalNBTRecipe { @Override public void setNBT(ItemStack[] materials, ItemStack result) { + if(result.stackTagCompound == null){ + result.stackTagCompound = new NBTTagCompound(); + } + + if (!result.stackTagCompound.hasKey("Effect")) + { + result.stackTagCompound.setTag("Effect", new NBTTagList("Effect")); + } + + NBTTagList tagList = (NBTTagList) result.getTagCompound().getTag("Effect"); + NBTTagCompound tag = new NBTTagCompound(); + + for(int i = 0;i < materials.length;i++){ + if(materials[i] != null){ + if(materials[i].itemID-256 == ChemiCraft.instance.atomsID && materials[i].getItemDamage() == ChemiCraft.HYDROGEN){ + tag.setString("GrenadeEffect" + i, "Hydrogen"); + } + if(materials[i].itemID-256 == ChemiCraft.instance.atomsID && materials[i].getItemDamage() == ChemiCraft.CARBON){ + tag.setString("GrenadeEffect" + i, "Carbon"); + } + if(materials[i].itemID-256 == ChemiCraft.instance.atomsID && materials[i].getItemDamage() == ChemiCraft.URANIUM){ + tag.setString("GrenadeEffect" + i, "Uranium"); + } + } + } + tagList.appendTag(tag); } -- 2.11.0