From e8b9ca83cb0ba4419148043d9b4de770337155a7 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Fri, 12 Apr 2013 21:31:24 -0500 Subject: [PATCH] Check connection status before setting scoreboard. Fixes BUKKIT-4064 Two connection status checks were added to setting a scoreboard for a player. The first checks to see if a player has logged in yet, which implicates the ability to receive packets. The second checks to affirm that the CraftPlayer reference is still to a logged in player; setting it while not logged in would maintain a stale player reference in the scoreboard manager. By: Wesley Wolfe --- .../java/org/bukkit/craftbukkit/entity/CraftPlayer.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 a93625c40b..8c30bf5a52 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 @@ -983,6 +983,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void setScoreboard(Scoreboard scoreboard) { Validate.notNull(scoreboard, "Scoreboard cannot be null"); + PlayerConnection playerConnection = getHandle().playerConnection; + if (playerConnection == null) { + throw new IllegalStateException("Cannot set scoreboard yet"); + } + if (playerConnection.disconnected) { + throw new IllegalStateException("Cannot set scoreboard for invalid CraftPlayer"); + } + this.server.getScoreboardManager().setPlayerBoard(this, scoreboard); } }