OSDN Git Service

集気ビンを右クリックで確率に応じた気体を入手可能。
authorponkotate <ponkotate@users.sourceforge.jp>
Sat, 29 Dec 2012 02:50:26 +0000 (11:50 +0900)
committerponkotate <ponkotate@users.sourceforge.jp>
Sat, 29 Dec 2012 02:50:26 +0000 (11:50 +0900)
(一酸化炭素未実装)
確率用メソッドが他でも役立つと思い、MathHelperPlusクラスを作成。
(数学的メソッドはこちらへ)

common/chemicraft/AtomInfo.java
common/chemicraft/ChemiCraft.java
common/chemicraft/ItemGasCollectingBottle.java
common/chemicraft/MathHelperPlus.java [new file with mode: 0644]

index 1a1cdc3..b7921b0 100644 (file)
@@ -1,5 +1,7 @@
 package chemicraft;\r
 \r
+import cpw.mods.fml.common.Side;\r
+import cpw.mods.fml.common.asm.SideOnly;\r
 import net.minecraft.src.EntityPlayer;\r
 import net.minecraft.src.ItemStack;\r
 import net.minecraft.src.World;\r
@@ -117,6 +119,7 @@ public class AtomInfo {
         * @param par1\r
         * @return 指定されたY軸より高いか\r
         */\r
+       @SideOnly(Side.CLIENT)\r
        public boolean isOverY(int par1){\r
                if(this.posY >= par1){\r
                        return true;\r
@@ -132,6 +135,7 @@ public class AtomInfo {
         * @param par1\r
         * @return 指定されたY軸と同等かどうか\r
         */\r
+       @SideOnly(Side.CLIENT)\r
        public boolean isEquivalentY(int par1){\r
                if(this.posY == par1){\r
                        return true;\r
@@ -147,6 +151,7 @@ public class AtomInfo {
         * @param par1\r
         * @return 指定されたY軸より低いか\r
         */\r
+       @SideOnly(Side.CLIENT)\r
        public boolean isBelowY(int par1){\r
                if(this.posY <= par1){\r
                        return true;\r
index 58ab442..afe39c8 100644 (file)
@@ -251,6 +251,12 @@ public class ChemiCraft {
                        new Character('A'), new ItemStack(this.itemAtoms, 1, 0),\r
                });\r
 \r
+               // 化合物を追加します\r
+               ChemiCraftAPI.instance.addLangCompound("ja_JP", "CarbonDioxide", "二酸化炭素");\r
+\r
+               // 化合物のレシピを追加します\r
+               ChemiCraftAPI.instance.addChemicalCombinationRecipe(new ItemStack[]{new ItemStack(this.itemAtoms, 5), new ItemStack(this.itemAtoms, 7)}, new ItemStack(this.itemCompounds, 0));\r
+\r
                //手榴弾の追加\r
                ChemiCraftAPI.instance.addMaterialRecipe(new ItemStack[]{new ItemStack(Item.gunpowder)}, new ItemStack(this.itemAtomGrenade, 16, 0), new NBTRecipeGrenade());\r
 \r
index 44451b1..c646e4a 100644 (file)
@@ -4,7 +4,8 @@ import java.util.Random;
 
 import net.minecraft.src.*;
 
-public class ItemGasCollectingBottle extends ItemAtomInfoContainer {
+public class ItemGasCollectingBottle extends ItemAtomInfoContainer
+{
 
        public ItemGasCollectingBottle(int id) {
                super(id);
@@ -14,22 +15,54 @@ public class ItemGasCollectingBottle extends ItemAtomInfoContainer {
        }
 
        @Override
-       public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer){
+       public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
+       {
                par1ItemStack.damageItem(1, par3EntityPlayer);
 
                this.atomInfo.update(par2World, par3EntityPlayer);
-               if(this.atomInfo.isBelowY(129)){
-            if (!par3EntityPlayer.inventory.addItemStackToInventory(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 7)))
-            {
-                par3EntityPlayer.dropPlayerItem(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 7));
-            }
-               }
 
+               int heightValue = par2World.getHeightValue((int) par3EntityPlayer.posX, (int) par3EntityPlayer.posZ);
+
+               int result1 = MathHelperPlus.instance.Probability(99, 1);
+               int result2 = MathHelperPlus.instance.Probability(78, 21, 1);
+               int result3 = MathHelperPlus.instance.Probability(0.032, 0.0018, 0.000012, 0.00052);
+               if (this.atomInfo.isOverY(heightValue)) {
+                       if (result1 == 0) {
+                               if (result2 == 0) {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 6), par3EntityPlayer);
+                               } else if (result2 == 1) {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 7), par3EntityPlayer);
+                               } else {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 17), par3EntityPlayer);
+                               }
+                       } else {
+                               if (result3 == 0) {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemCompounds, 1, 0), par3EntityPlayer);
+                               } else if (result3 == 1) {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 9), par3EntityPlayer);
+                               } else if (result3 == 2) {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemCompounds, 1, 1), par3EntityPlayer);
+                               } else {
+                                       this.isStackOrDrop(new ItemStack(ChemiCraft.instance.itemAtoms, 1, 1), par3EntityPlayer);
+                               }
+                       }
+               }
+               if (par2World.isRemote) {
+                       par3EntityPlayer.addChatMessage("result1=" + result1 + " result2=" + result2 + " result3=" + result3);
+               }
                return par1ItemStack;
        }
 
+       public void isStackOrDrop(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer)
+       {
+               if (!par2EntityPlayer.inventory.addItemStackToInventory(par1ItemStack)) {
+                       par2EntityPlayer.dropPlayerItem(par1ItemStack);
+               }
+       }
+
        @Override
-       public String getTextureFile() {
+       public String getTextureFile()
+       {
                return "/chemicraft/items/items.png";
        }
 
diff --git a/common/chemicraft/MathHelperPlus.java b/common/chemicraft/MathHelperPlus.java
new file mode 100644 (file)
index 0000000..8d85be2
--- /dev/null
@@ -0,0 +1,58 @@
+package chemicraft;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class MathHelperPlus
+{
+
+       public static MathHelperPlus instance = new MathHelperPlus();
+
+       /** 
+        * Return probability(0~).
+        */
+       public static int Probability(double... par1)
+       {
+               ArrayList<Double> var1 = new ArrayList<Double>();
+               for (int var2 = 0; var2 < par1.length; var2++){
+                       var1.add(par1[var2]);
+               }
+               return Probability(var1);
+       }
+
+       public static int Probability(int... par1)
+       {
+               ArrayList<Double> var1 = new ArrayList<Double>();
+               for (int var2 = 0; var2 < par1.length; var2++){
+                       var1.add((double)par1[var2]);
+               }
+               return Probability(var1);
+       }
+
+       public static int Probability(ArrayList<Double> par1)
+       {
+               Random var2 = new Random();
+               int var3 = var2.nextInt(100);
+               double var4 = 0.0D;
+
+               for (int var5 = 0; var5 < par1.size(); var5++) {
+                       var4 += par1.get(var5);
+               }
+
+               ArrayList<Double> var6 = new ArrayList<Double>();
+               for (int var7 = 0; var7 < par1.size(); var7++) {
+                       var6.add(par1.get(var7) / var4 * 100);
+               }
+
+               double var8 = 0.0D;
+               for (int var9 = 0; var9 < var6.size(); var9++) {
+                       if (var3 < var6.get(var9) + var8) {
+                               return var9;
+                       } else {
+                               var8 += var6.get(var9);
+                       }
+               }
+               return var3;
+       }
+
+}