Skip to content

Commit e5e2c50

Browse files
authored
Move scoreboard overrides to a separate field (#13378)
1 parent 4446f17 commit e5e2c50

2 files changed

Lines changed: 13 additions & 5 deletions

File tree

paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa
246246
private CraftWorldBorder clientWorldBorder = null;
247247
private BorderChangeListener clientWorldBorderListener = this.createWorldBorderListener();
248248
private long lastSaveTime; // Paper - getLastPlayed replacement API
249+
private @Nullable CraftScoreboard scoreboardOverride;
249250

250251
public CraftPlayer(CraftServer server, ServerPlayer entity) {
251252
super(server, entity);
@@ -2517,6 +2518,14 @@ public CraftScoreboard getScoreboard() {
25172518
return this.server.getScoreboardManager().getPlayerBoard(this);
25182519
}
25192520

2521+
public @Nullable CraftScoreboard getScoreboardOverride() {
2522+
return this.scoreboardOverride;
2523+
}
2524+
2525+
public void setScoreboardOverride(@Nullable CraftScoreboard scoreboardOverride) {
2526+
this.scoreboardOverride = scoreboardOverride;
2527+
}
2528+
25202529
@Override
25212530
public void setScoreboard(Scoreboard scoreboard) {
25222531
Preconditions.checkArgument(scoreboard != null, "Scoreboard cannot be null");

paper-server/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public final class CraftScoreboardManager implements ScoreboardManager {
2323
private final CraftScoreboard mainScoreboard;
2424
private final MinecraftServer server;
2525
private final Collection<CraftScoreboard> scoreboards = new WeakCollection<>();
26-
private final Map<CraftPlayer, CraftScoreboard> playerBoards = new HashMap<>();
2726

2827
public CraftScoreboardManager(MinecraftServer server, net.minecraft.world.scores.Scoreboard scoreboard) {
2928
this.mainScoreboard = new CraftScoreboard(scoreboard);
@@ -54,7 +53,7 @@ public void registerScoreboardForVanilla(CraftScoreboard scoreboard) {
5453
}
5554

5655
public CraftScoreboard getPlayerBoard(CraftPlayer player) {
57-
CraftScoreboard board = this.playerBoards.get(player);
56+
CraftScoreboard board = player.getScoreboardOverride();
5857
return board == null ? this.getMainScoreboard() : board;
5958
}
6059

@@ -66,9 +65,9 @@ public void setPlayerBoard(CraftPlayer player, CraftScoreboard scoreboard) {
6665
}
6766

6867
if (scoreboard == this.mainScoreboard) {
69-
this.playerBoards.remove(player);
68+
player.setScoreboardOverride(null);
7069
} else {
71-
this.playerBoards.put(player, scoreboard);
70+
player.setScoreboardOverride(scoreboard);
7271
}
7372

7473
ServerPlayer serverPlayer = player.getHandle();
@@ -94,7 +93,7 @@ public void setPlayerBoard(CraftPlayer player, CraftScoreboard scoreboard) {
9493

9594
// CraftBukkit method
9695
public void removePlayer(CraftPlayer player) {
97-
this.playerBoards.remove(player);
96+
player.setScoreboardOverride(null);
9897
}
9998

10099
// CraftBukkit method

0 commit comments

Comments
 (0)