--- a/net/minecraft/world/level/block/BushBlock.java
+++ b/net/minecraft/world/level/block/BushBlock.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
