Paper/Spigot-Server-Patches/0165-Update-clients-when-setting-blocks-to-air.patch

32 lines
1.7 KiB
Diff
Raw Normal View History

From 290cbb38a943a5bb021e5aace7bf3c0cd97f1410 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
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