From f3b1f974643a32676f689021efe742632f8e42fe Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Wed, 24 Nov 2021 08:16:10 +1100 Subject: [PATCH] Remove unnecessary CraftBlock creation in CraftRegionAccessor#setBlock By: md_5 --- .../java/org/bukkit/craftbukkit/CraftRegionAccessor.java | 6 +++++- .../main/java/org/bukkit/craftbukkit/block/CraftBlock.java | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java index da731b601e..79842db1ea 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java @@ -272,7 +272,11 @@ public abstract class CraftRegionAccessor implements RegionAccessor { @Override public void setBlockData(int x, int y, int z, BlockData blockData) { - CraftBlock.at(getHandle(), new BlockPosition(x, y, z)).setTypeAndData(((CraftBlockData) blockData).getState(), true); + GeneratorAccessSeed world = getHandle(); + BlockPosition pos = new BlockPosition(x, y, z); + IBlockData old = getHandle().getBlockState(pos); + + CraftBlock.setTypeAndData(world, pos, old, ((CraftBlockData) blockData).getState(), true); } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java index eee885f981..926c7c60ce 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -185,8 +185,11 @@ public class CraftBlock implements Block { setTypeAndData(((CraftBlockData) data).getState(), applyPhysics); } - public boolean setTypeAndData(final IBlockData blockData, final boolean applyPhysics) { - IBlockData old = getNMS(); + boolean setTypeAndData(final IBlockData blockData, final boolean applyPhysics) { + return setTypeAndData(world, position, getNMS(), blockData, applyPhysics); + } + + public static boolean setTypeAndData(GeneratorAccess world, BlockPosition position, IBlockData old, IBlockData blockData, boolean applyPhysics) { // SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in tile entity cleanup if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes // SPIGOT-4612: faster - just clear tile