From 51e2a4f6d6e90ad3fbfc4859f89e9f78099f753e Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Sat, 25 Jun 2016 21:09:08 -0500 Subject: [PATCH] Update clients when setting blocks to air --- ...e-clients-when-setting-blocks-to-air.patch | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Spigot-Server-Patches/0165-Update-clients-when-setting-blocks-to-air.patch diff --git a/Spigot-Server-Patches/0165-Update-clients-when-setting-blocks-to-air.patch b/Spigot-Server-Patches/0165-Update-clients-when-setting-blocks-to-air.patch new file mode 100644 index 0000000000..088df95bcb --- /dev/null +++ b/Spigot-Server-Patches/0165-Update-clients-when-setting-blocks-to-air.patch @@ -0,0 +1,31 @@ +From 290cbb38a943a5bb021e5aace7bf3c0cd97f1410 Mon Sep 17 00:00:00 2001 +From: Zach Brown +Date: Sat, 25 Jun 2016 21:04:05 -0500 +Subject: [PATCH] Update clients when setting blocks to air + +In fixing SPIGOT-611, the server sets an area to air and doesn't update the clients. +Usually this is fine, most of the time we'll just be setting the intended block shortly after anyway. + +Except if we're setting air. In which case the server will not send the change because it already sees the block as set. +We workaround this by telling the server to send the client the block change if it is of ID 0 (Air). I assume this +patch will not last long enough to warrant moving away from the ID. + +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +index a5d6f1d..60a1692 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +@@ -137,7 +137,10 @@ public class CraftBlock implements Block { + BlockPosition position = new BlockPosition(x, y, z); + + // SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in tile entity cleanup +- chunk.getHandle().getWorld().setTypeAndData(position, Blocks.AIR.getBlockData(), 0); ++ // Paper start - If we're setting air, we need to explicitly tell it to send to clients ++ int flag = (type == 0) ? 2 : 0; ++ chunk.getHandle().getWorld().setTypeAndData(position, Blocks.AIR.getBlockData(), flag); ++ // Paper end + + if (applyPhysics) { + return chunk.getHandle().getWorld().setTypeAndData(position, blockData, 3); +-- +2.9.0.windows.1 +