From 6e92592b5523eb5361c95e1c464e937727d0db25 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Sun, 19 Jun 2022 21:48:24 +1000 Subject: [PATCH] SPIGOT-7068: SKULK and SKULK_VEIN BlockSpreadEvents Still do not reference the correct source (SKULK_CATALYST) By: DerFrZocker --- .../block/entity/SculkCatalystBlockEntity.patch | 12 ++++++++++++ .../bukkit/craftbukkit/event/CraftEventFactory.java | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 paper-server/nms-patches/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.patch diff --git a/paper-server/nms-patches/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.patch b/paper-server/nms-patches/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.patch new file mode 100644 index 0000000000..c29cfc0a9f --- /dev/null +++ b/paper-server/nms-patches/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.patch @@ -0,0 +1,12 @@ +--- a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java ++++ b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java +@@ -86,7 +86,9 @@ + } + + public static void serverTick(World world, BlockPosition blockposition, IBlockData iblockdata, SculkCatalystBlockEntity sculkcatalystblockentity) { ++ org.bukkit.craftbukkit.event.CraftEventFactory.sourceBlockOverride = sculkcatalystblockentity.getBlockPos(); // CraftBukkit - SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep. + sculkcatalystblockentity.sculkSpreader.updateCursors(world, blockposition, world.getRandom(), true); ++ org.bukkit.craftbukkit.event.CraftEventFactory.sourceBlockOverride = null; // CraftBukkit + } + + @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 66a521110a..247efa2165 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -768,6 +768,7 @@ public class CraftEventFactory { return handleBlockSpreadEvent(world, source, target, block, 2); } + public static BlockPosition sourceBlockOverride = null; // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep. public static boolean handleBlockSpreadEvent(GeneratorAccess world, BlockPosition source, BlockPosition target, IBlockData block, int flag) { // Suppress during worldgen if (!(world instanceof World)) { @@ -778,7 +779,7 @@ public class CraftEventFactory { CraftBlockState state = CraftBlockStates.getBlockState(world, target, flag); state.setData(block); - BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, source), state); + BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, sourceBlockOverride != null ? sourceBlockOverride : source), state); Bukkit.getPluginManager().callEvent(event); if (!event.isCancelled()) {