diff options
3 files changed, 129 insertions, 48 deletions
diff --git a/src/Java/gtPlusPlus/core/entity/monster/EntityGiantChickenBase.java b/src/Java/gtPlusPlus/core/entity/monster/EntityGiantChickenBase.java index 4313b0cc45..35b9321ece 100644 --- a/src/Java/gtPlusPlus/core/entity/monster/EntityGiantChickenBase.java +++ b/src/Java/gtPlusPlus/core/entity/monster/EntityGiantChickenBase.java @@ -81,6 +81,10 @@ public class EntityGiantChickenBase extends EntityChicken { { this.motionY *= 0.6D; } + + if (MathUtils.randInt(0, 10000) <= 5) { + jump(); + } this.field_70886_e += this.field_70889_i * 2.0F; @@ -101,7 +105,13 @@ public class EntityGiantChickenBase extends EntityChicken { /** * Called when the mob is falling. Calculates and applies fall damage. */ - protected void fall(float p_70069_1_) {} + protected void fall(float p_70069_1_) { + + if (MathUtils.randInt(0, 10) <= 5) { + jump(); + } + + } protected Item getDropItem() { @@ -260,6 +270,7 @@ public class EntityGiantChickenBase extends EntityChicken { @Override protected void jump() { this.motionY = 0.68999998688697815D; + this.motionY += 0.068999998688697815D; if (this.isPotionActive(Potion.jump)) { this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.5F); @@ -273,6 +284,11 @@ public class EntityGiantChickenBase extends EntityChicken { } this.isAirBorne = true; + + if (MathUtils.randInt(0, 10) < 10) { + jump(); + } + ForgeHooks.onLivingJump(this); } diff --git a/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java b/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java index 5577de49e8..c651fb38d9 100644 --- a/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java +++ b/src/Java/gtPlusPlus/core/item/general/ItemGiantEgg.java @@ -14,8 +14,12 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import gregtech.api.enums.ItemList; + import gtPlusPlus.core.entity.item.ItemEntityGiantEgg; import gtPlusPlus.core.item.base.BaseItemBurnable; +import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.NBTUtils; @@ -41,6 +45,7 @@ public class ItemGiantEgg extends BaseItemBurnable { } private static ItemStack mCorrectEgg; + private static ItemStack mCorrectStemCells; @Override public void onUpdate(ItemStack aStack, World world, Entity entityHolding, int p_77663_4_, boolean p_77663_5_) { @@ -49,62 +54,66 @@ public class ItemGiantEgg extends BaseItemBurnable { super.onUpdate(aStack, world, entityHolding, p_77663_4_, p_77663_5_); return; } + try { + boolean player = (entityHolding != null && entityHolding instanceof EntityPlayer); - boolean player = (entityHolding != null && entityHolding instanceof EntityPlayer); - - if (player) { - NBTUtils.setBoolean(aStack, "playerHeld", true); - } - else { - NBTUtils.setBoolean(aStack, "playerHeld", false); - } - - nbtWork(aStack); - - int age = NBTUtils.hasKey(aStack, "mAge") ? NBTUtils.getInteger(aStack, "mAge") : 0; - if (player) { - NBTUtils.setInteger(aStack, "mAge", age+1); - - //Set the correct egg for future hatches - if (mCorrectEgg == null) { - if (NBTUtils.hasKey(aStack, "mAge") && NBTUtils.hasKey(aStack, "mEggAge")) { - if (NBTUtils.getInteger(aStack, "mAge") >= NBTUtils.getInteger(aStack, "mEggAge")) { - for (int g=0;g<128;g++) { - ItemStack mSpawn = ItemUtils.simpleMetaStack(Items.spawn_egg, g, 1); - if (mSpawn != null) { - String s = ("" + StatCollector.translateToLocal(mSpawn.getUnlocalizedName() + ".name")).trim(); - String s1 = EntityList.getStringFromID(mSpawn.getItemDamage()); - if (s1 != null){ - s = s + " " + StatCollector.translateToLocal("entity." + s1 + ".name"); - if (s1.equalsIgnoreCase("bigChickenFriendly")) { - mCorrectEgg = mSpawn; - break; + if (player) { + NBTUtils.setBoolean(aStack, "playerHeld", true); + } + else { + NBTUtils.setBoolean(aStack, "playerHeld", false); + } + + nbtWork(aStack); + + int age = NBTUtils.hasKey(aStack, "mAge") ? NBTUtils.getInteger(aStack, "mAge") : 0; + if (player) { + NBTUtils.setInteger(aStack, "mAge", age+1); + + //Set the correct egg for future hatches + if (mCorrectEgg == null) { + if (NBTUtils.hasKey(aStack, "mAge") && NBTUtils.hasKey(aStack, "mEggAge")) { + if (NBTUtils.getInteger(aStack, "mAge") >= NBTUtils.getInteger(aStack, "mEggAge")) { + for (int g=0;g<128;g++) { + ItemStack mSpawn = ItemUtils.simpleMetaStack(Items.spawn_egg, g, 1); + if (mSpawn != null) { + String s = ("" + StatCollector.translateToLocal(mSpawn.getUnlocalizedName() + ".name")).trim(); + String s1 = EntityList.getStringFromID(mSpawn.getItemDamage()); + if (s1 != null){ + s = s + " " + StatCollector.translateToLocal("entity." + s1 + ".name"); + if (s1.equalsIgnoreCase("bigChickenFriendly")) { + mCorrectEgg = mSpawn; + break; + } } - } - } + } + } } } } - } - if (mCorrectEgg != null) { - if (NBTUtils.hasKey(aStack, "mAge") && NBTUtils.hasKey(aStack, "mEggAge")) { - if (NBTUtils.getInteger(aStack, "mAge") >= NBTUtils.getInteger(aStack, "mEggAge")) { - if (MathUtils.randInt(0, 1000) >= 990) { - if (NBTUtils.hasKey(aStack, "size")) { - if ((NBTUtils.getInteger(aStack, "size")+1) >= MathUtils.randInt(0, 9)) { - ((EntityPlayer) entityHolding).inventory.addItemStackToInventory((mCorrectEgg)); - ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this); - } - else { - ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this); - } - } + if (mCorrectEgg != null) { + if (NBTUtils.hasKey(aStack, "mAge") && NBTUtils.hasKey(aStack, "mEggAge")) { + if (NBTUtils.getInteger(aStack, "mAge") >= NBTUtils.getInteger(aStack, "mEggAge")) { + if (MathUtils.randInt(0, 1000) >= 990) { + if (NBTUtils.hasKey(aStack, "size")) { + if ((NBTUtils.getInteger(aStack, "size")+1) >= MathUtils.randInt(0, 9)) { + ((EntityPlayer) entityHolding).inventory.addItemStackToInventory((mCorrectEgg)); + ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this); + } + else { + ((EntityPlayer) entityHolding).inventory.consumeInventoryItem(this); + } + } + } } } } } } + catch (Throwable t) { + t.printStackTrace(); + } super.onUpdate(aStack, world, entityHolding, p_77663_4_, p_77663_5_); } @@ -123,6 +132,45 @@ public class ItemGiantEgg extends BaseItemBurnable { if (player && !NBTUtils.hasKey(aStack, "mEggAge") && NBTUtils.hasKey(aStack, "size")) { NBTUtils.setInteger(aStack, "mEggAge", ((MathUtils.randInt(8000, 16000)*NBTUtils.getInteger(aStack, "size"))/2)); } + + if (player && NBTUtils.getTagCompound(aStack, "GT.CraftingComponents") == null) { + if (mCorrectStemCells == null) { + if (CORE.MAIN_GREGTECH_5U_EXPERIMENTAL_FORK && Utils.getGregtechSubVersion() > 28) { + ItemList xl = ItemList.valueOf("Circuit_Chip_Stemcell"); + if (xl != null && xl.hasBeenSet()) { + mCorrectStemCells = xl.get(1); + } + } + else { + mCorrectStemCells = ItemUtils.getSimpleStack(Items.egg, 2); + } + } + if (mCorrectStemCells != null) { + int mSize = NBTUtils.getInteger(aStack, "size"); + float mSizeMod = (MathUtils.randInt(-5, 5)/10); + mSize += mSizeMod; + mSize = Math.max(mSize, 1); + ItemStack eggYolks[] = new ItemStack[mSize]; + for (int u=0;u<mSize;u++) { + eggYolks[u] = ItemUtils.getSimpleStack(mCorrectStemCells, MathUtils.randInt(1, 4)); + } + + int mexpected = 0; + for (ItemStack e : eggYolks) { + if (e != null) { + mexpected += e.stackSize; + } + } + if (mexpected > 0) { + NBTUtils.setInteger(aStack, "mExpected", mexpected); + } + + NBTUtils.writeItemsToGtCraftingComponents(aStack, eggYolks, true); + } + } + if (player && NBTUtils.getTagCompound(aStack, "GT.CraftingComponents") != null) { + + } } } @@ -180,7 +228,12 @@ public class ItemGiantEgg extends BaseItemBurnable { if (NBTUtils.hasKey(stack, "mEggAge")){ life = NBTUtils.getInteger(stack, "mEggAge"); } + int expected = 0; + if (NBTUtils.hasKey(stack, "mExpected")){ + expected = NBTUtils.getInteger(stack, "mExpected"); + } list.add("Egg Size: "+size+" ounces"); + list.add("Expected Stem Cells: "+expected); list.add("Age: "+(age/20)+"s"+" / "+(life/20)+"s"); list.add("Larger eggs take longer to hatch,"); list.add("but have a better chance of hatching."); diff --git a/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java b/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java index 524e7ab7f3..66abbded15 100644 --- a/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java +++ b/src/Java/gtPlusPlus/core/util/minecraft/NBTUtils.java @@ -112,8 +112,16 @@ public class NBTUtils { return itemstack; } - public static ItemStack writeItemsToGtCraftingComponents(ItemStack rStack, ItemStack[] stored, boolean copyTags) { - + public static ItemStack writeItemsToGtCraftingComponents(ItemStack rStack, ItemStack[] input, boolean copyTags) { + try { + ItemStack stored[] = new ItemStack[9]; + if (input.length != 9) { + for (int e=0;e<input.length;e++) { + if (input[e] != null) + stored[e] = input[e]; + } + } + if (copyTags) { for (int i = 0; i < stored.length; i++) { if (stored[i] != null && stored[i].hasTagCompound()) { @@ -140,6 +148,10 @@ public class NBTUtils { } rNBT.setTag("GT.CraftingComponents", tNBT); rStack.setTagCompound(rNBT); + } + catch (Throwable t) { + t.printStackTrace(); + } return rStack; } |