diff --git a/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java b/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java index 09487b7..f299062 100644 --- a/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java +++ b/src/main/java/net/william278/velocitab/packet/ScoreboardManager.java @@ -29,6 +29,7 @@ import com.velocitypowered.proxy.connection.client.ConnectedPlayer; import com.velocitypowered.proxy.protocol.ProtocolUtils; import com.velocitypowered.proxy.protocol.StateRegistry; import net.william278.velocitab.Velocitab; +import net.william278.velocitab.config.Group; import net.william278.velocitab.player.TabPlayer; import net.william278.velocitab.tab.Nametag; import org.jetbrains.annotations.NotNull; @@ -85,6 +86,13 @@ public class ScoreboardManager { } } + public void resetCache(@NotNull Player player, @NotNull Group group) { + final String team = createdTeams.remove(player.getUniqueId()); + if (team != null) { + dispatchGroupPacket(UpdateTeamsPacket.removeTeam(plugin, team), group); + } + } + public void vanishPlayer(@NotNull TabPlayer tabPlayer) { this.handleVanish(tabPlayer, true); } @@ -217,6 +225,17 @@ public class ScoreboardManager { } } + private void dispatchGroupPacket(@NotNull UpdateTeamsPacket packet, @NotNull Group group) { + group.registeredServers(plugin).forEach(server -> server.getPlayersConnected().forEach(connected -> { + try { + final ConnectedPlayer connectedPlayer = (ConnectedPlayer) connected; + connectedPlayer.getConnection().write(packet); + } catch (Throwable e) { + plugin.log(Level.ERROR, "Failed to dispatch packet (unsupported client or server version)", e); + } + })); + } + private void dispatchGroupPacket(@NotNull UpdateTeamsPacket packet, @NotNull TabPlayer tabPlayer) { final Player player = tabPlayer.getPlayer(); final Optional optionalServerConnection = player.getCurrentServer(); diff --git a/src/main/java/net/william278/velocitab/tab/TabListListener.java b/src/main/java/net/william278/velocitab/tab/TabListListener.java index b619fa4..f7d3b33 100644 --- a/src/main/java/net/william278/velocitab/tab/TabListListener.java +++ b/src/main/java/net/william278/velocitab/tab/TabListListener.java @@ -61,13 +61,13 @@ public class TabListListener { @Subscribe public void onPlayerJoin(@NotNull ServerPostConnectEvent event) { final Player joined = event.getPlayer(); - plugin.getScoreboardManager().ifPresent(manager -> manager.resetCache(joined)); final String serverName = joined.getCurrentServer() .map(ServerConnection::getServerInfo) .map(ServerInfo::getName) .orElse(""); final Group group = tabList.getGroup(serverName); + plugin.getScoreboardManager().ifPresent(manager -> manager.resetCache(joined, group)); final boolean isDefault = !group.servers().contains(serverName); // If the server is not in a group, use fallback.