diff --git a/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch b/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch
index c1dbda1c23..09946b2d9f 100644
--- a/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch
+++ b/paper-server/patches/sources/net/minecraft/world/level/block/BedBlock.java.patch
@@ -10,7 +10,14 @@
                  world.removeBlock(pos, false);
                  BlockPos blockposition1 = pos.relative(((Direction) state.getValue(BedBlock.FACING)).getOpposite());
  
-@@ -114,19 +115,59 @@
+@@ -108,25 +109,65 @@
+                 world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK);
+                 return InteractionResult.SUCCESS_SERVER;
+             } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) {
++                if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first
+                 if (!this.kickVillagerOutOfBed(world, pos)) {
+                     player.displayClientMessage(Component.translatable("block.minecraft.bed.occupied"), true);
+                 }
  
                  return InteractionResult.SUCCESS_SERVER;
              } else {
@@ -67,8 +74,7 @@
  
      public static boolean canSetSpawn(Level world) {
 -        return world.dimensionType().bedWorks();
-+        // CraftBukkit - moved world and biome check into EntityHuman
-+        return true || world.dimensionType().bedWorks();
++        return world.dimensionType().bedWorks(); // Paper - actually check if the bed works
      }
  
      private boolean kickVillagerOutOfBed(Level world, BlockPos pos) {