--- a/net/minecraft/world/level/block/VegetationBlock.java
+++ b/net/minecraft/world/level/block/VegetationBlock.java
@@ -35,9 +_,15 @@
         BlockState neighborState,
         RandomSource random
     ) {
-        return !state.canSurvive(level, pos)
-            ? Blocks.AIR.defaultBlockState()
-            : super.updateShape(state, level, scheduledTickAccess, pos, direction, neighborPos, neighborState, random);
+        // CraftBukkit start
+        if (!state.canSurvive(level, pos)) {
+            // Suppress during worldgen
+            if (!(level instanceof net.minecraft.server.level.ServerLevel serverLevel && serverLevel.hasPhysicsEvent) || !org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPhysicsEvent(serverLevel, pos).isCancelled()) { // Paper
+                return Blocks.AIR.defaultBlockState();
+            }
+        }
+        return super.updateShape(state, level, scheduledTickAccess, pos, direction, neighborPos, neighborState, random);
+        // CraftBukkit end
     }
 
     @Override
