From 4fa8c24e421856bd6eae01137bafacfc8673d1c8 Mon Sep 17 00:00:00 2001 From: Travis Watkins Date: Sat, 16 Mar 2013 08:05:03 -0500 Subject: [PATCH] Always consume bonemeal when used on a sapling. Fixes BUKKIT-3755 In Minecraft 1.5 saplings do not grow with a single use of bonemeal anymore. Our code assumes they will and only takes away bonemeal from the player when the tree grows successfully (not cancelled by a plugin). Instead we now always remove a bonemeal even if a plugin is the reason a tree didn't grow as this matches the vanilla logic more closely. --- src/main/java/net/minecraft/server/BlockSapling.java | 4 ++++ src/main/java/net/minecraft/server/ItemDye.java | 8 ++++---- src/main/java/net/minecraft/server/ItemSnow.java | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockSapling.java b/src/main/java/net/minecraft/server/BlockSapling.java index 4264630047..56938cdcd2 100644 --- a/src/main/java/net/minecraft/server/BlockSapling.java +++ b/src/main/java/net/minecraft/server/BlockSapling.java @@ -116,7 +116,11 @@ public class BlockSapling extends BlockFlower { --itemstack.count; } } + } else if (bonemeal && itemstack != null) { + // We always consume bonemeal when trying to grow + --itemstack.count; } + if (!grownTree) { if (flag) { world.setTypeIdAndData(i + i1, j, k + j1, this.id, l, 4); diff --git a/src/main/java/net/minecraft/server/ItemDye.java b/src/main/java/net/minecraft/server/ItemDye.java index 6e05654e11..4f3b46adbf 100644 --- a/src/main/java/net/minecraft/server/ItemDye.java +++ b/src/main/java/net/minecraft/server/ItemDye.java @@ -95,11 +95,11 @@ public class ItemDye extends Item { if ((double) world.random.nextFloat() < 0.45D) { // CraftBukkit start Player player = (entityhuman instanceof EntityPlayer) ? (Player) entityhuman.getBukkitEntity() : null; - ((BlockSapling) Block.SAPLING).grow(world, i, j, k, world.random, true, player, itemstack); + ((BlockSapling) Block.SAPLING).grow(world, i, j, k, world.random, true, player, null); + // CraftBukkit end } - // --itemstack.count; - called later if the bonemeal attempt was succesful - // CraftBukkit end + --itemstack.count; } return true; @@ -194,7 +194,7 @@ public class ItemDye extends Item { ((BlockMushroom) Block.byId[l]).grow(world, i, j, k, world.random, true, player, itemstack); } - //--itemstack.count; - called later if the bonemeal attempt was succesful + //--itemstack.count; - called later if the bonemeal attempt was not cancelled by a plugin // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/ItemSnow.java b/src/main/java/net/minecraft/server/ItemSnow.java index 5b104e947a..3018ec1f0a 100644 --- a/src/main/java/net/minecraft/server/ItemSnow.java +++ b/src/main/java/net/minecraft/server/ItemSnow.java @@ -26,7 +26,6 @@ public class ItemSnow extends ItemBlockWithAuxData { } /* if (k1 <= 6 && world.b(block.b(world, i, j, k)) && world.setData(i, j, k, k1 + 1 | j1 & -8, 2)) { - // CraftBukkit end world.makeSound((double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), block.stepSound.getPlaceSound(), (block.stepSound.getVolume1() + 1.0F) / 2.0F, block.stepSound.getVolume2() * 0.8F); --itemstack.count; return true;