aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0825-Fix-falling-block-spawn-methods.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0825-Fix-falling-block-spawn-methods.patch')
-rw-r--r--patches/server/0825-Fix-falling-block-spawn-methods.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/patches/server/0825-Fix-falling-block-spawn-methods.patch b/patches/server/0825-Fix-falling-block-spawn-methods.patch
new file mode 100644
index 0000000000..7aaafc2cf1
--- /dev/null
+++ b/patches/server/0825-Fix-falling-block-spawn-methods.patch
@@ -0,0 +1,54 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Nassim Jahnke <[email protected]>
+Date: Fri, 4 Mar 2022 20:35:19 +0100
+Subject: [PATCH] Fix falling block spawn methods
+
+Restores the API behavior from previous versions of the server
+- Do not call API events
+- Do not replace the existing block in the world
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
+index d1fca0e3227b5f37c11367548be362f5a49b6a71..5628940cd3c3566c5db2beda506d4f20b6e3cbae 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
+@@ -566,7 +566,7 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
+ // Paper end
+ } else if (FallingBlock.class.isAssignableFrom(clazz)) {
+ BlockPos pos = new BlockPos(x, y, z);
+- entity = FallingBlockEntity.fall(world, pos, this.getHandle().getBlockState(pos));
++ entity = new FallingBlockEntity(world, x, y, z, this.getHandle().getBlockState(pos)); // Paper
+ } else if (Projectile.class.isAssignableFrom(clazz)) {
+ if (Snowball.class.isAssignableFrom(clazz)) {
+ entity = new net.minecraft.world.entity.projectile.Snowball(world, x, y, z);
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+index 7757e5b1aec0b1f0cba79aa4618a7fe1d210b72c..8ab92e7a9ed2008b90f3a816d972512f5dc58876 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+@@ -1395,7 +1395,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+ Validate.notNull(material, "Material cannot be null");
+ Validate.isTrue(material.isBlock(), "Material must be a block");
+
+- FallingBlockEntity entity = FallingBlockEntity.fall(world, new BlockPos(location.getX(), location.getY(), location.getZ()), CraftMagicNumbers.getBlock(material).defaultBlockState(), SpawnReason.CUSTOM);
++ // Paper start - restore API behavior for spawning falling blocks
++ FallingBlockEntity entity = new FallingBlockEntity(this.world, location.getX(), location.getY(), location.getZ(), CraftMagicNumbers.getBlock(material).defaultBlockState()); // Paper
++ entity.time = 1;
++
++ this.world.addFreshEntity(entity, SpawnReason.CUSTOM);
++ // Paper end
+ return (FallingBlock) entity.getBukkitEntity();
+ }
+
+@@ -1404,7 +1409,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
+ Validate.notNull(location, "Location cannot be null");
+ Validate.notNull(data, "BlockData cannot be null");
+
+- FallingBlockEntity entity = FallingBlockEntity.fall(world, new BlockPos(location.getX(), location.getY(), location.getZ()), ((CraftBlockData) data).getState(), SpawnReason.CUSTOM);
++ // Paper start - restore API behavior for spawning falling blocks
++ FallingBlockEntity entity = new FallingBlockEntity(this.world, location.getX(), location.getY(), location.getZ(), ((CraftBlockData) data).getState());
++ entity.time = 1;
++
++ this.world.addFreshEntity(entity, SpawnReason.CUSTOM);
++ // Paper end
+ return (FallingBlock) entity.getBukkitEntity();
+ }
+