More checkes for offline players (#42)

This commit is contained in:
ironboundred 2023-04-14 11:36:33 -05:00 committed by GitHub
parent 99ce4e3f54
commit dad64098b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 3 deletions

View File

@ -29,6 +29,10 @@ public class ScoreboardManager {
}
public void setRoles(@NotNull Player player, @NotNull Map<String, String> 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) {

View File

@ -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() + ")");
}
}
}