From bba35f8a4e213ef826780b2b71bc40a31c83a8c3 Mon Sep 17 00:00:00 2001 From: nossr50 Date: Mon, 26 Aug 2019 14:15:42 -0600 Subject: [PATCH] Set player scoreboards to main server scoreboard upon entering a blacklisted world --- Changelog.txt | 6 ++++++ .../gmail/nossr50/util/scoreboards/ScoreboardManager.java | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Changelog.txt b/Changelog.txt index 37322c0a9..574a15510 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,9 @@ +Version 2.1.105 + mcMMO will reset players scoreboard to the main scoreboard if they move into a blacklisted world + + NOTES: + The scoreboard change should result in mcMMO removing scoreboards from players properly when they enter a black listed world. This is a hacky band aid fix as our scoreboard code is archaic and needs to be rewritten in 2.2 and not 2.1. Expect a scoreboard overhaul sometime in the future. + Version 2.1.104 Fixed a bug resulting in many errors when using Rupture Large update to the Japanese locale (thanks ethernetcat) diff --git a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java index 1e9347e59..006199554 100644 --- a/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java +++ b/src/main/java/com/gmail/nossr50/util/scoreboards/ScoreboardManager.java @@ -13,6 +13,7 @@ import com.gmail.nossr50.util.player.UserManager; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.scoreboard.DisplaySlot; @@ -173,8 +174,13 @@ public class ScoreboardManager { dirtyPowerLevels.add(player.getName()); } - // Called by PlayerQuitEvent listener + // Called by PlayerQuitEvent listener and OnPlayerTeleport under certain circumstances public static void teardownPlayer(Player player) { + //Hacky world blacklist fix + if(player.isOnline() && player.isValid()) + if(Bukkit.getServer().getScoreboardManager() != null) + player.setScoreboard(Bukkit.getServer().getScoreboardManager().getMainScoreboard()); + ScoreboardWrapper wrapper = PLAYER_SCOREBOARDS.remove(player.getName()); if (wrapper != null && wrapper.revertTask != null) {