--- a/net/minecraft/world/level/block/BushBlock.java
+++ b/net/minecraft/world/level/block/BushBlock.java
@@ -11,6 +11,7 @@
 import net.minecraft.world.level.pathfinder.PathComputationType;
 
 public class BushBlock extends Block {
+
     protected BushBlock(BlockBehaviour.Properties settings) {
         super(settings);
     }
@@ -21,13 +22,21 @@
 
     @Override
     public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) {
-        return !state.canSurvive(world, pos) ? Blocks.AIR.defaultBlockState() : super.updateShape(state, direction, neighborState, world, pos, neighborPos);
+        // CraftBukkit start
+        if (!state.canSurvive(world, pos)) {
+            if (!(world instanceof net.minecraft.server.level.ServerLevel && ((net.minecraft.server.level.ServerLevel) world).hasPhysicsEvent) || !org.bukkit.craftbukkit.v1_19_R1.event.CraftEventFactory.callBlockPhysicsEvent(world, pos).isCancelled()) { // Paper
+                return Blocks.AIR.defaultBlockState();
+            }
+        }
+        return super.updateShape(state, direction, neighborState, world, pos, neighborPos);
+        // CraftBukkit end
     }
 
     @Override
     public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
-        BlockPos blockPos = pos.below();
-        return this.mayPlaceOn(world.getBlockState(blockPos), world, blockPos);
+        BlockPos blockposition1 = pos.below();
+
+        return this.mayPlaceOn(world.getBlockState(blockposition1), world, blockposition1);
     }
 
     @Override
