--- a/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
@@ -51,7 +_,7 @@
         map.put(4, SoundEvents.WARDEN_LISTENING_ANGRY);
     });
     private static final int DEFAULT_WARNING_LEVEL = 0;
-    private int warningLevel = 0;
+    public int warningLevel = 0;
     private final VibrationSystem.User vibrationUser = new SculkShriekerBlockEntity.VibrationUser();
     private VibrationSystem.Data vibrationData = new VibrationSystem.Data();
     private final VibrationSystem.Listener vibrationListener = new VibrationSystem.Listener(this);
@@ -86,6 +_,13 @@
 
     @Nullable
     public static ServerPlayer tryGetPlayer(@Nullable Entity entity) {
+    // Paper start - check global player list where appropriate; ensure level is the same for sculk events
+        final ServerPlayer player = tryGetPlayer0(entity);
+        return player != null && player.level() == entity.level() ? player : null;
+    }
+    @Nullable
+    private static ServerPlayer tryGetPlayer0(@Nullable Entity entity) {
+    // Paper end - check global player list where appropriate
         if (entity instanceof ServerPlayer serverPlayer) {
             return serverPlayer;
         } else if (entity != null && entity.getControllingPassenger() instanceof ServerPlayer serverPlayer) {
@@ -161,7 +_,7 @@
     private boolean trySummonWarden(ServerLevel level) {
         return this.warningLevel >= 4
             && SpawnUtil.trySpawnMob(
-                    EntityType.WARDEN, EntitySpawnReason.TRIGGERED, level, this.getBlockPos(), 20, 5, 6, SpawnUtil.Strategy.ON_TOP_OF_COLLIDER, false
+                    EntityType.WARDEN, EntitySpawnReason.TRIGGERED, level, this.getBlockPos(), 20, 5, 6, SpawnUtil.Strategy.ON_TOP_OF_COLLIDER, false, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL, null // Paper - Entity#getEntitySpawnReason
                 )
                 .isPresent();
     }
