From dad64098b2cffaeefc2b36f210fa863454b1e299 Mon Sep 17 00:00:00 2001 From: ironboundred <44921987+ironboundred@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:36:33 -0500 Subject: [PATCH] More checkes for offline players (#42) --- .../velocitab/packet/ScoreboardManager.java | 12 ++++++++++++ .../velocitab/tab/PlayerTabList.java | 18 +++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java b/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java index a286f7d..145a4ac 100644 --- a/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java +++ b/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java @@ -29,6 +29,10 @@ public class ScoreboardManager { } public void setRoles(@NotNull Player player, @NotNull Map playerRoles) { + if (!player.isActive()) { + plugin.getTabList().removeOfflinePlayer(player); + return; + } playerRoles.entrySet().stream() .collect(Collectors.groupingBy( Map.Entry::getValue, @@ -38,6 +42,10 @@ public class ScoreboardManager { } public void updateRoles(@NotNull Player player, @NotNull String role, @NotNull String... playerNames) { + if (!player.isActive()) { + plugin.getTabList().removeOfflinePlayer(player); + return; + } if (!createdTeams.getOrDefault(player.getUniqueId(), List.of()).contains(role)) { dispatchPacket(UpdateTeamsPacket.create(role, playerNames), player); createdTeams.computeIfAbsent(player.getUniqueId(), k -> new ArrayList<>()).add(role); @@ -54,6 +62,10 @@ public class ScoreboardManager { } private void dispatchPacket(@NotNull UpdateTeamsPacket packet, @NotNull Player player) { + if (!player.isActive()) { + plugin.getTabList().removeOfflinePlayer(player); + return; + } try { ProtocolizePlayer protocolizePlayer = Protocolize.playerProvider().player(player.getUniqueId()); if (protocolizePlayer != null) { diff --git a/src/main/java/net/william278/velocitab/tab/PlayerTabList.java b/src/main/java/net/william278/velocitab/tab/PlayerTabList.java index 21bcde7..8eb8ccb 100644 --- a/src/main/java/net/william278/velocitab/tab/PlayerTabList.java +++ b/src/main/java/net/william278/velocitab/tab/PlayerTabList.java @@ -131,8 +131,10 @@ public class PlayerTabList { @Subscribe public void onPlayerQuit(@NotNull DisconnectEvent event) { - // Remove the player from the tracking list - players.removeIf(player -> player.getPlayer().getUniqueId().equals(event.getPlayer().getUniqueId())); + // Remove the player from the tracking list, Print warning if player was not removed + if (!players.removeIf(player -> player.getPlayer().getUniqueId().equals(event.getPlayer().getUniqueId()))) { + plugin.log("Failed to remove disconnecting player " + event.getPlayer().getUsername() + " (UUID: " + event.getPlayer().getUniqueId() + ")"); + } // Remove the player from the tab list of all other players plugin.getServer().getAllPlayers().forEach(player -> player.getTabList().removeEntry(event.getPlayer().getUniqueId())); @@ -149,13 +151,16 @@ public class PlayerTabList { // Replace a player in the tab list public void replacePlayer(@NotNull TabPlayer tabPlayer) { - players.removeIf(player -> player.getPlayer().getUniqueId().equals(tabPlayer.getPlayer().getUniqueId())); + if (!players.removeIf(player -> player.getPlayer().getUniqueId().equals(tabPlayer.getPlayer().getUniqueId()))) { + plugin.log("Failed to remove updated player " + tabPlayer.getPlayer().getUsername() + " (UUID: " + tabPlayer.getPlayer().getUniqueId() + ")"); + } players.add(tabPlayer); } // Update a player's name in the tab list public void updatePlayer(@NotNull TabPlayer tabPlayer) { if (!tabPlayer.getPlayer().isActive()) { + removeOfflinePlayer(tabPlayer.getPlayer()); return; } @@ -252,4 +257,11 @@ public class PlayerTabList { reloadUpdate(); plugin.log("Velocitab has been reloaded!"); } + + public void removeOfflinePlayer(@NotNull Player player) { + // Try and remove the player from the list of players + if (!players.removeIf(tabPlayer -> tabPlayer.getPlayer().getUniqueId().equals(player.getUniqueId()))) { + plugin.log("Failed to remove offline player " + player.getUsername() + " (UUID: " + player.getUniqueId() + ")"); + } + } }