From 556ae1eee1dc2f6fa6ade6b2bc038f4b853860e2 Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Mon, 8 Dec 2025 12:51:03 -0500 Subject: [PATCH 1/3] Move scoreboard overrides to a separate field --- .../java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 9 +++++++++ .../craftbukkit/scoreboard/CraftScoreboardManager.java | 9 ++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index d20735dbd18a..7b167d93f505 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -246,6 +246,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa private CraftWorldBorder clientWorldBorder = null; private BorderChangeListener clientWorldBorderListener = this.createWorldBorderListener(); private long lastSaveTime; // Paper - getLastPlayed replacement API + private CraftScoreboard scoreboardOverride; public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); @@ -2517,6 +2518,14 @@ public CraftScoreboard getScoreboard() { return this.server.getScoreboardManager().getPlayerBoard(this); } + public CraftScoreboard getScoreboardOverride() { + return scoreboardOverride; + } + + public void setScoreboardOverride(CraftScoreboard scoreboardOverride) { + this.scoreboardOverride = scoreboardOverride; + } + @Override public void setScoreboard(Scoreboard scoreboard) { Preconditions.checkArgument(scoreboard != null, "Scoreboard cannot be null"); diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java index 582cdc9e028c..9da0d9640874 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java @@ -23,7 +23,6 @@ public final class CraftScoreboardManager implements ScoreboardManager { private final CraftScoreboard mainScoreboard; private final MinecraftServer server; private final Collection scoreboards = new WeakCollection<>(); - private final Map playerBoards = new HashMap<>(); public CraftScoreboardManager(MinecraftServer server, net.minecraft.world.scores.Scoreboard scoreboard) { this.mainScoreboard = new CraftScoreboard(scoreboard); @@ -54,7 +53,7 @@ public void registerScoreboardForVanilla(CraftScoreboard scoreboard) { } public CraftScoreboard getPlayerBoard(CraftPlayer player) { - CraftScoreboard board = this.playerBoards.get(player); + CraftScoreboard board = player.getScoreboardOverride(); return board == null ? this.getMainScoreboard() : board; } @@ -66,9 +65,9 @@ public void setPlayerBoard(CraftPlayer player, CraftScoreboard scoreboard) { } if (scoreboard == this.mainScoreboard) { - this.playerBoards.remove(player); + player.setScoreboardOverride(null); } else { - this.playerBoards.put(player, scoreboard); + player.setScoreboardOverride(scoreboard); } ServerPlayer serverPlayer = player.getHandle(); @@ -94,7 +93,7 @@ public void setPlayerBoard(CraftPlayer player, CraftScoreboard scoreboard) { // CraftBukkit method public void removePlayer(CraftPlayer player) { - this.playerBoards.remove(player); + player.setScoreboardOverride(null); } // CraftBukkit method From 8eecccbe67e442f214357d8a86de729eb23ab3ac Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Mon, 8 Dec 2025 13:12:01 -0500 Subject: [PATCH 2/3] Implement change that I came up with and decided I thought was neccessary --- .../main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 7b167d93f505..4e2795ef8496 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2519,7 +2519,7 @@ public CraftScoreboard getScoreboard() { } public CraftScoreboard getScoreboardOverride() { - return scoreboardOverride; + return this.scoreboardOverride; } public void setScoreboardOverride(CraftScoreboard scoreboardOverride) { From c7c8171d224ef99555929cd56caa6717015d1f6b Mon Sep 17 00:00:00 2001 From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> Date: Wed, 10 Dec 2025 09:32:14 -0500 Subject: [PATCH 3/3] Add nullable --- .../java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 4e2795ef8496..2fdc19114f70 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -246,7 +246,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa private CraftWorldBorder clientWorldBorder = null; private BorderChangeListener clientWorldBorderListener = this.createWorldBorderListener(); private long lastSaveTime; // Paper - getLastPlayed replacement API - private CraftScoreboard scoreboardOverride; + private @Nullable CraftScoreboard scoreboardOverride; public CraftPlayer(CraftServer server, ServerPlayer entity) { super(server, entity); @@ -2518,11 +2518,11 @@ public CraftScoreboard getScoreboard() { return this.server.getScoreboardManager().getPlayerBoard(this); } - public CraftScoreboard getScoreboardOverride() { + public @Nullable CraftScoreboard getScoreboardOverride() { return this.scoreboardOverride; } - public void setScoreboardOverride(CraftScoreboard scoreboardOverride) { + public void setScoreboardOverride(@Nullable CraftScoreboard scoreboardOverride) { this.scoreboardOverride = scoreboardOverride; }