From de3ba9a25cc3b214a7d3c4954998dcea39ea51ee Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Mon, 14 Dec 2020 14:53:53 +0000 Subject: [PATCH] re-send block change for blocks with gravity if they're physicsed fixes PS-159 --- .../bukkit/listener/BlockEventListener.java | 48 +++++++------------ .../bukkit/listener/EntityEventListener.java | 3 ++ 2 files changed, 20 insertions(+), 31 deletions(-) diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java index bd0d61405..e84bf475a 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/BlockEventListener.java @@ -187,17 +187,24 @@ public class BlockEventListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onPhysicsEvent(BlockPhysicsEvent event) { + Block block = event.getBlock(); + Location location = BukkitUtil.getLocation(block.getLocation()); + PlotArea area = location.getPlotArea(); + if (area == null) { + return; + } + Plot plot = area.getOwnedPlotAbs(location); + if (plot == null) { + return; + } + if (event.getChangedType().hasGravity() && plot.getFlag(DisablePhysicsFlag.class)) { + event.setCancelled(true); + sendBlockChange(event.getBlock().getLocation(), event.getBlock().getBlockData()); + plot.debug("Prevented block physics and resent block change because disable-physics = true"); + return; + } switch (event.getChangedType()) { case COMPARATOR: { - Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); - if (location.isPlotArea()) { - return; - } - Plot plot = location.getOwnedPlotAbs(); - if (plot == null) { - return; - } if (!plot.getFlag(RedstoneFlag.class)) { event.setCancelled(true); plot.debug("Prevented comparator update because redstone = false"); @@ -211,16 +218,6 @@ public class BlockEventListener implements Listener { case TURTLE_EGG: case TURTLE_HELMET: case TURTLE_SPAWN_EGG: { - Block block = event.getBlock(); - Location location = BukkitUtil.getLocation(block.getLocation()); - PlotArea area = location.getPlotArea(); - if (area == null) { - return; - } - Plot plot = area.getOwnedPlotAbs(location); - if (plot == null) { - return; - } if (plot.getFlag(DisablePhysicsFlag.class)) { event.setCancelled(true); plot.debug("Prevented block physics because disable-physics = true"); @@ -229,21 +226,11 @@ public class BlockEventListener implements Listener { } default: if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) { - Block block = event.getBlock(); switch (block.getType()) { case PISTON: case STICKY_PISTON: org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData(); - Location location = BukkitUtil.getLocation(block.getLocation()); - PlotArea area = location.getPlotArea(); - if (area == null) { - return; - } - Plot plot = area.getOwnedPlotAbs(location); - if (plot == null) { - return; - } switch (piston.getFacing()) { case EAST: location.setX(location.getX() + 1); @@ -261,8 +248,7 @@ public class BlockEventListener implements Listener { Plot newPlot = area.getOwnedPlotAbs(location); if (!plot.equals(newPlot)) { event.setCancelled(true); - plot.debug( - "Prevented piston update because of invalid edge piston detection"); + plot.debug("Prevented piston update because of invalid edge piston detection"); return; } } diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener.java b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener.java index 342d4e6f0..7c43d8de1 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/listener/EntityEventListener.java @@ -201,6 +201,9 @@ public class EntityEventListener implements Listener { if (plot == null || plot.getFlag(DisablePhysicsFlag.class)) { event.setCancelled(true); if (plot != null) { + if (block.getType().hasGravity()) { + BlockEventListener.sendBlockChange(block.getLocation(), block.getBlockData()); + } plot.debug("Falling block event was cancelled because disable-physics = true"); } return;