--- a/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
@@ -105,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) {
             return (ServerPlayer)entity;
         } else {
@@ -190,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();
     }
