From 1b48298d25b99010c8ddecb24f800e7346763dad Mon Sep 17 00:00:00 2001 From: bloodshot Date: Sat, 31 May 2014 18:19:44 -0400 Subject: Add special case for handling place event with lilies. Fixes BUKKIT-5641 --- src/main/java/net/minecraft/server/ItemWaterLily.java | 8 ++++++++ src/main/java/net/minecraft/server/PlayerConnection.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/net/minecraft/server/ItemWaterLily.java b/src/main/java/net/minecraft/server/ItemWaterLily.java index abf1b3f8..246090d6 100644 --- a/src/main/java/net/minecraft/server/ItemWaterLily.java +++ b/src/main/java/net/minecraft/server/ItemWaterLily.java @@ -26,7 +26,15 @@ public class ItemWaterLily extends ItemWithAuxData { } if (world.getType(i, j, k).getMaterial() == Material.WATER && world.getData(i, j, k) == 0 && world.isEmpty(i, j + 1, k)) { + // CraftBukkit start - special case for handling block placement with water lilies + org.bukkit.block.BlockState blockstate = org.bukkit.craftbukkit.block.CraftBlockState.getBlockState(world, i, j + 1, k); world.setTypeUpdate(i, j + 1, k, Blocks.WATER_LILY); + org.bukkit.event.block.BlockPlaceEvent placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockstate, i, j, k); + if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild())) { + blockstate.update(true, false); + return itemstack; + } + // CraftBukkit end if (!entityhuman.abilities.canInstantlyBuild) { --itemstack.count; diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 89ef6faf..ec45c30a 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -610,7 +610,7 @@ public class PlayerConnection implements PacketPlayInListener { // CraftBukkit - notch decrements the counter by 1 in the above method with food, // snowballs and so forth, but he does it in a place that doesn't cause the // inventory update packet to get sent - always = (itemstack.count != itemstackAmount); + always = (itemstack.count != itemstackAmount) || itemstack.getItem() == Item.getItemOf(Blocks.WATER_LILY); // CraftBukkit end } else if (packetplayinblockplace.d() >= this.minecraftServer.getMaxBuildHeight() - 1 && (packetplayinblockplace.getFace() == 1 || packetplayinblockplace.d() >= this.minecraftServer.getMaxBuildHeight())) { ChatMessage chatmessage = new ChatMessage("build.tooHigh", new Object[] { Integer.valueOf(this.minecraftServer.getMaxBuildHeight())}); -- cgit v1.2.3