Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-12-15 02:50:09 +01:00
110 Zeilen
6.2 KiB
Diff
110 Zeilen
6.2 KiB
Diff
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 b4095a3e97e0d7f6fce66869bd88083c9c0cdbe5..fb6fd9357f665a001238384475a9b674715700ba 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 {
|