forked from Upstream/Velocitab
Fixed rare problem while joining
This commit is contained in:
parent
b37c760033
commit
e496c99a52
@ -29,6 +29,7 @@ import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
|
|||||||
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
import com.velocitypowered.proxy.protocol.ProtocolUtils;
|
||||||
import com.velocitypowered.proxy.protocol.StateRegistry;
|
import com.velocitypowered.proxy.protocol.StateRegistry;
|
||||||
import net.william278.velocitab.Velocitab;
|
import net.william278.velocitab.Velocitab;
|
||||||
|
import net.william278.velocitab.config.Group;
|
||||||
import net.william278.velocitab.player.TabPlayer;
|
import net.william278.velocitab.player.TabPlayer;
|
||||||
import net.william278.velocitab.tab.Nametag;
|
import net.william278.velocitab.tab.Nametag;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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) {
|
public void vanishPlayer(@NotNull TabPlayer tabPlayer) {
|
||||||
this.handleVanish(tabPlayer, true);
|
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) {
|
private void dispatchGroupPacket(@NotNull UpdateTeamsPacket packet, @NotNull TabPlayer tabPlayer) {
|
||||||
final Player player = tabPlayer.getPlayer();
|
final Player player = tabPlayer.getPlayer();
|
||||||
final Optional<ServerConnection> optionalServerConnection = player.getCurrentServer();
|
final Optional<ServerConnection> optionalServerConnection = player.getCurrentServer();
|
||||||
|
@ -61,13 +61,13 @@ public class TabListListener {
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
public void onPlayerJoin(@NotNull ServerPostConnectEvent event) {
|
public void onPlayerJoin(@NotNull ServerPostConnectEvent event) {
|
||||||
final Player joined = event.getPlayer();
|
final Player joined = event.getPlayer();
|
||||||
plugin.getScoreboardManager().ifPresent(manager -> manager.resetCache(joined));
|
|
||||||
|
|
||||||
final String serverName = joined.getCurrentServer()
|
final String serverName = joined.getCurrentServer()
|
||||||
.map(ServerConnection::getServerInfo)
|
.map(ServerConnection::getServerInfo)
|
||||||
.map(ServerInfo::getName)
|
.map(ServerInfo::getName)
|
||||||
.orElse("");
|
.orElse("");
|
||||||
final Group group = tabList.getGroup(serverName);
|
final Group group = tabList.getGroup(serverName);
|
||||||
|
plugin.getScoreboardManager().ifPresent(manager -> manager.resetCache(joined, group));
|
||||||
final boolean isDefault = !group.servers().contains(serverName);
|
final boolean isDefault = !group.servers().contains(serverName);
|
||||||
|
|
||||||
// If the server is not in a group, use fallback.
|
// If the server is not in a group, use fallback.
|
||||||
|
Loading…
Reference in New Issue
Block a user