From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Tue, 22 Nov 2022 13:16:01 -0800
Subject: [PATCH] check global player list where appropriate


diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index cc291b58292d33613a639650a6c55293603bb6e5..79aa3374fd47cd57d2e0810bb5afebbdb38a1892 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -2677,4 +2677,12 @@ public class ServerLevel extends Level implements WorldGenLevel {
             entity.updateDynamicGameEventListener(DynamicGameEventListener::move);
         }
     }
+
+    // Paper start
+    @Override
+    @Nullable
+    public Player getGlobalPlayerByUUID(UUID uuid) {
+        return this.server.getPlayerList().getPlayer(uuid);
+    }
+    // Paper end
 }
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 3bfa0c6a0d82ed980b3289051892a6d1745ebb69..529d4805d841beec9aaff57b0184d8313fad01c3 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -3584,7 +3584,7 @@ public abstract class LivingEntity extends Entity {
     }
 
     public void onItemPickup(ItemEntity item) {
-        net.minecraft.world.entity.player.Player entityhuman = item.getThrower() != null ? this.level.getPlayerByUUID(item.getThrower()) : null;
+        net.minecraft.world.entity.player.Player entityhuman = item.getThrower() != null ? this.level.getGlobalPlayerByUUID(item.getThrower()) : null; // Paper - check all players
 
         if (entityhuman instanceof ServerPlayer) {
             CriteriaTriggers.THROWN_ITEM_PICKED_UP_BY_ENTITY.trigger((ServerPlayer) entityhuman, item.getItem(), this);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java
index 6216513805add7c8f52e1ed6c77e2d26786b3ab5..3c4d142e982c34a23bdb5da1f51c8dcacc0532c1 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Animal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java
@@ -210,7 +210,7 @@ public abstract class Animal extends AgeableMob {
         if (this.loveCause == null) {
             return null;
         } else {
-            Player entityhuman = this.level.getPlayerByUUID(this.loveCause);
+            Player entityhuman = this.level.getGlobalPlayerByUUID(this.loveCause); // Paper - check all players
 
             return entityhuman instanceof ServerPlayer ? (ServerPlayer) entityhuman : null;
         }
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index fcc5444a1268931a0fd2df1e6bbbc17cfd5a61e0..da877bfb87c34f83991dd0957f6042c7543edb3e 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -98,7 +98,7 @@ public class ItemEntity extends Entity {
         Level world = this.level;
 
         Objects.requireNonNull(this.level);
-        return (Entity) Util.mapNullable(uuid, world::getPlayerByUUID);
+        return (Entity) Util.mapNullable(uuid, world::getGlobalPlayerByUUID); // Paper - check all players
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
index fb0a77b4cf1ba47c73c00993bd9b7454240fe5d6..d1f7d912ad274cf90a912e44d63b39f9387a694b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -268,7 +268,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
         entityvillager.finalizeSpawn(world, world.getCurrentDifficultyAt(entityvillager.blockPosition()), MobSpawnType.CONVERSION, (SpawnGroupData) null, (CompoundTag) null);
         entityvillager.refreshBrain(world);
         if (this.conversionStarter != null) {
-            Player entityhuman = world.getPlayerByUUID(this.conversionStarter);
+            Player entityhuman = world.getGlobalPlayerByUUID(this.conversionStarter); // Paper - check all players
 
             if (entityhuman instanceof ServerPlayer) {
                 CriteriaTriggers.CURED_ZOMBIE_VILLAGER.trigger((ServerPlayer) entityhuman, this, entityvillager);
diff --git a/src/main/java/net/minecraft/world/level/EntityGetter.java b/src/main/java/net/minecraft/world/level/EntityGetter.java
index 87beea39636b641dc5b46c2755a00285b7671ac5..6e55f383f48e9a304b0acd541728394615dc6478 100644
--- a/src/main/java/net/minecraft/world/level/EntityGetter.java
+++ b/src/main/java/net/minecraft/world/level/EntityGetter.java
@@ -243,4 +243,11 @@ public interface EntityGetter {
 
         return null;
     }
+
+    // Paper start
+    @Nullable
+    default Player getGlobalPlayerByUUID(UUID uuid) {
+        return this.getPlayerByUUID(uuid);
+    }
+    // Paper end
 }
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
index ec0eba674c940ee1d743cd32f9c2b690868757e0..5c4cf21fc64ad5cfc3896ac7e13d814dd44be6f4 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java
@@ -100,6 +100,13 @@ public class SculkShriekerBlockEntity extends BlockEntity implements VibrationLi
 
     @Nullable
     public static ServerPlayer tryGetPlayer(@Nullable Entity entity) {
+        // Paper start - 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
         if (entity instanceof ServerPlayer serverPlayer) {
             return serverPlayer;
         } else {