diff --git a/CraftBukkit-Patches/0089-Update-Client-s-Hand-when-BlockPlaceEvent-Cancelled.patch b/CraftBukkit-Patches/0089-Update-Client-s-Hand-when-BlockPlaceEvent-Cancelled.patch new file mode 100644 index 000000000..7b79dff22 --- /dev/null +++ b/CraftBukkit-Patches/0089-Update-Client-s-Hand-when-BlockPlaceEvent-Cancelled.patch @@ -0,0 +1,35 @@ +From f9172bc5ec67e5f0a52b1e635ca2f646980e55b3 Mon Sep 17 00:00:00 2001 +From: bloodshot +Date: Mon, 6 Jan 2014 18:02:01 -0500 +Subject: [PATCH] Update Client's Hand when BlockPlaceEvent Cancelled + +Send a Packet103SetSlot to client when a BlockPlaceEvent is cancelled. + +Fixes BUKKIT-5284 + +Currently, whenever a player places a block in a protected area the +equipped itemstack size on client is never updated properly since the +client thinks the block was placed. The reason this happens is because +ItemStack.matches returns true since the server does not decrement stack +size if a BlockPlaceEvent is cancelled. This causes +PlayerConnection.a(handlePlace) not to send the appropriate packet to +client which causes the bug. + +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index f7fdca3..91de23b 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -626,7 +626,9 @@ public class PlayerConnection implements PacketPlayInListener { + return; + } + +- this.player.playerInteractManager.interact(this.player, worldserver, itemstack, i, j, k, l, packetplayinblockplace.h(), packetplayinblockplace.i(), packetplayinblockplace.j()); ++ if (!this.player.playerInteractManager.interact(this.player, worldserver, itemstack, i, j, k, l, packetplayinblockplace.h(), packetplayinblockplace.i(), packetplayinblockplace.j())) { ++ always = true; // force Packet103SetSlot to be sent to client to update ItemStack count ++ } + // CraftBukkit end + + flag = true; +-- +1.8.3.2 +