forked from Upstream/Velocitab
More checkes for offline players (#42)
This commit is contained in:
parent
99ce4e3f54
commit
dad64098b2
@ -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) {
|
||||
|
@ -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() + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user