forked from SteamWar/SteamWar
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:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user