Fix legacy pearls forgetting owner on disconnect (#12884)

This commit is contained in:
Alejandro Nieto
2025-07-26 21:53:29 +02:00
committed by GitHub
parent 840dd9e1f8
commit 9ccc51df43
3 changed files with 8 additions and 11 deletions
@@ -28333,10 +28333,10 @@ index b30f56fbc1fd17259a1d05dc9155fffcab292ca1..11fed81a4696ba18440e755c3b8a5ca3
this.generatingStep = generatingStep;
this.cache = cache;
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 12988d4c0b72d0648ba51c7fb07f446a713c559b..4460b0fd4770e93874332fabc63df952f482aed6 100644
index 774b597b34198d55bdec861e3ebabb36bac8e33e..d099b76082e59baf42de8e265eb2bc593c6e6f86 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -1312,7 +1312,7 @@ public abstract class PlayerList {
@@ -1310,7 +1310,7 @@ public abstract class PlayerList {
public void setViewDistance(int viewDistance) {
this.viewDistance = viewDistance;
@@ -28345,7 +28345,7 @@ index 12988d4c0b72d0648ba51c7fb07f446a713c559b..4460b0fd4770e93874332fabc63df952
for (ServerLevel serverLevel : this.server.getAllLevels()) {
if (serverLevel != null) {
@@ -1323,7 +1323,7 @@ public abstract class PlayerList {
@@ -1321,7 +1321,7 @@ public abstract class PlayerList {
public void setSimulationDistance(int simulationDistance) {
this.simulationDistance = simulationDistance;
@@ -83,7 +83,7 @@ index 34b7769663e235b93c6388ab0c92c00f0297e42f..dda8d38ef61672cc714d9e5a475f9b04
// Paper start - add close param
this.save(progress, flush, skipSave, false);
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 18439057b996a55833e1bfc60dc293de432d2902..18c0a3de3fd04879f84306e09f5a30502a3d5077 100644
index 514ff8543dbbe1c6ae47c7fd6c1545b87d3b2927..4726c980ad52c1300de16b7607006ea4a13325eb 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -195,6 +195,7 @@ import org.slf4j.Logger;
@@ -95,7 +95,7 @@ index 18439057b996a55833e1bfc60dc293de432d2902..18c0a3de3fd04879f84306e09f5a3050
private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10;
private static final int FLY_STAT_RECORDING_SPEED = 25;
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 5a60527c9feb3606d85488b3cf215c451ca033de..dea72819f2933e5a806bb3a0603e4ebdf7f99456 100644
index d099b76082e59baf42de8e265eb2bc593c6e6f86..802357d8b582539e08a8d48024ebe9c38493a2b3 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -489,6 +489,7 @@ public abstract class PlayerList {
@@ -106,7 +106,7 @@ index 5a60527c9feb3606d85488b3cf215c451ca033de..dea72819f2933e5a806bb3a0603e4ebd
this.playerIo.save(player);
ServerStatsCounter serverStatsCounter = player.getStats(); // CraftBukkit
if (serverStatsCounter != null) {
@@ -1059,9 +1060,23 @@ public abstract class PlayerList {
@@ -1057,9 +1058,23 @@ public abstract class PlayerList {
}
public void saveAll() {
@@ -339,7 +339,7 @@
}
@Override
@@ -319,56 +_,138 @@
@@ -319,56 +_,136 @@
}
protected void save(ServerPlayer player) {
@@ -420,14 +420,11 @@
player.unRide();
- for (ThrownEnderpearl thrownEnderpearl : player.getEnderPearls()) {
for (ThrownEnderpearl thrownEnderpearl : player.getEnderPearls()) {
- thrownEnderpearl.setRemoved(Entity.RemovalReason.UNLOADED_WITH_PLAYER);
+ for (ThrownEnderpearl thrownEnderpearl : new java.util.ArrayList<>(player.getEnderPearls())) { // Paper - copy, setOwner will remove from list;
+ // Paper start - Allow using old ender pearl behavior
+ if (!thrownEnderpearl.level().paperConfig().misc.legacyEnderPearlBehavior) {
+ thrownEnderpearl.setRemoved(Entity.RemovalReason.UNLOADED_WITH_PLAYER, org.bukkit.event.entity.EntityRemoveEvent.Cause.PLAYER_QUIT); // CraftBukkit - add Bukkit remove cause
+ } else {
+ thrownEnderpearl.setOwner(null);
+ }
+ // Paper end - Allow using old ender pearl behavior
}