--- a/net/minecraft/world/level/block/MultifaceSpreader.java
+++ b/net/minecraft/world/level/block/MultifaceSpreader.java
@@ -154,14 +_,14 @@
                     level.getChunk(pos.pos()).markPosForPostprocessing(pos.pos());
                 }
 
-                return level.setBlock(pos.pos(), stateForPlacement, 2);
+                return org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockSpreadEvent(level, pos.source(), pos.pos(), stateForPlacement, 2); // CraftBukkit
             } else {
                 return false;
             }
         }
     }
 
-    public record SpreadPos(BlockPos pos, Direction face) {
+    public record SpreadPos(BlockPos pos, Direction face, BlockPos source) { // CraftBukkit
     }
 
     @FunctionalInterface
@@ -173,19 +_,19 @@
         SAME_POSITION {
             @Override
             public MultifaceSpreader.SpreadPos getSpreadPos(BlockPos pos, Direction face, Direction spreadDirection) {
-                return new MultifaceSpreader.SpreadPos(pos, face);
+                return new MultifaceSpreader.SpreadPos(pos, face, pos); // CraftBukkit
             }
         },
         SAME_PLANE {
             @Override
             public MultifaceSpreader.SpreadPos getSpreadPos(BlockPos pos, Direction face, Direction spreadDirection) {
-                return new MultifaceSpreader.SpreadPos(pos.relative(face), spreadDirection);
+                return new MultifaceSpreader.SpreadPos(pos.relative(face), spreadDirection, pos); // CraftBukkit
             }
         },
         WRAP_AROUND {
             @Override
             public MultifaceSpreader.SpreadPos getSpreadPos(BlockPos pos, Direction face, Direction spreadDirection) {
-                return new MultifaceSpreader.SpreadPos(pos.relative(face).relative(spreadDirection), face.getOpposite());
+                return new MultifaceSpreader.SpreadPos(pos.relative(face).relative(spreadDirection), face.getOpposite(), pos); // CraftBukkit
             }
         };
 
