Merge pull request 'Fix Tablist' (#9) from VelocityCore/Tablist into main

Reviewed-on: https://steamwar.de/devlabs/SteamWar/SteamWar/pulls/9
Reviewed-by: Chaoscaot <chaos@chaoscaot.de>
This commit is contained in:
Lixfel
2024-08-18 11:13:19 +02:00
2 changed files with 24 additions and 13 deletions
@@ -43,6 +43,7 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import java.util.*;
import java.util.logging.Level;
import java.util.stream.IntStream;
@ChannelHandler.Sharable
@@ -63,7 +64,6 @@ public class Tablist extends ChannelInboundHandlerAdapter {
this.player = player;
this.viewer = Chatter.of(player);
this.directTabItems = Storage.directTabItems.computeIfAbsent(player, p -> new HashMap<>());
injection();
}
public void update(TablistPart global, int seconds) {
@@ -139,7 +139,9 @@ public class Tablist extends ChannelInboundHandlerAdapter {
synchronized (directTabItems) {
directTabItems.clear();
}
}
public void onServerPostSwitch() {
if(player.getProtocolVersion().greaterThan(ProtocolVersion.MINECRAFT_1_20)) {
current.clear();
sendPacket(player, createTeamPacket);
@@ -148,8 +150,14 @@ public class Tablist extends ChannelInboundHandlerAdapter {
private void injection() {
connection = (VelocityServerConnection) player.getCurrentServer().orElse(null);
if(connection == null)
return;
if(connection == null) {
connection = ((ConnectedPlayer) player).getConnectionInFlight();
if(connection == null) {
VelocityCore.getLogger().log(Level.WARNING, "Could not inject Tablist: %s".formatted(player));
return;
}
}
ChannelPipeline pipeline = connection.getConnection().getChannel().pipeline();
if(pipeline.get("steamwar-tablist") != null) //Catch unclean exit
@@ -21,8 +21,9 @@ package de.steamwar.velocitycore.tablist;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.event.connection.PostLoginEvent;
import com.velocitypowered.api.event.player.ServerConnectedEvent;
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.server.RegisteredServer;
import de.steamwar.network.packets.common.FightInfoPacket;
@@ -59,17 +60,19 @@ public class TablistManager extends BasicListener {
}
@Subscribe
public void onJoin(PostLoginEvent event) {
public void onServerConnection(ServerConnectedEvent event) {
synchronized (tablists) {
tablists.put(event.getPlayer(), new Tablist(event.getPlayer()));
tablists.computeIfAbsent(event.getPlayer(), Tablist::new).onServerSwitch();
}
Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket);
if(event.getPlayer().getProtocolVersion().noGreaterThan(ProtocolVersion.MINECRAFT_1_20))
Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket);
}
@Subscribe
public void onServerConnection(ServerPostConnectEvent event) {
public void onServerPostConnection(ServerPostConnectEvent event) {
synchronized (tablists) {
tablists.get(event.getPlayer()).onServerSwitch();
tablists.get(event.getPlayer()).onServerPostSwitch();
}
}
@@ -90,14 +93,14 @@ public class TablistManager extends BasicListener {
private void updateTablist() {
List<TablistPart> subservers = new ArrayList<>();
for (RegisteredServer server : new ArrayList<>(VelocityCore.getProxy().getAllServers())){
if(server.getPlayersConnected().isEmpty())
for (RegisteredServer server : new ArrayList<>(VelocityCore.getProxy().getAllServers())) {
if (server.getPlayersConnected().isEmpty())
continue;
Subserver subserver = Subserver.getSubserver(server.getServerInfo());
if(fightInfos.containsKey(server))
if (fightInfos.containsKey(server))
subservers.add(new TablistServer(server, fightInfos.get(server)));
else if(subserver == null || subserver.getType() != Servertype.BAUSERVER)
else if (subserver == null || subserver.getType() != Servertype.BAUSERVER)
subservers.add(new TablistServer(server));
}
subservers.add(new TablistBuild());