From 704fc53e9e9550ec2dc082cd97869591f04ff7ca Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Wed, 7 Aug 2024 09:22:30 +0200 Subject: [PATCH 1/3] Possible fix for Tablist --- .../src/de/steamwar/velocitycore/tablist/Tablist.java | 2 ++ .../steamwar/velocitycore/tablist/TablistManager.java | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java index f8dc1783..92484166 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java @@ -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); diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java index 2b8b47bd..6429fded 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java @@ -22,6 +22,7 @@ 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.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; @@ -67,12 +68,19 @@ public class TablistManager extends BasicListener { } @Subscribe - public void onServerConnection(ServerPostConnectEvent event) { + public void onServerConnection(ServerConnectedEvent event) { synchronized (tablists) { tablists.get(event.getPlayer()).onServerSwitch(); } } + @Subscribe + public void onServerPostConnection(ServerPostConnectEvent event) { + synchronized (tablists) { + tablists.get(event.getPlayer()).onServerPostSwitch(); + } + } + @Subscribe public void onLeave(DisconnectEvent event) { synchronized (tablists) { From 4efd30bdfb5667d2f3aabdf67c6302c993dcbb67 Mon Sep 17 00:00:00 2001 From: YoyoNow Date: Wed, 7 Aug 2024 09:33:31 +0200 Subject: [PATCH 2/3] Fix possible NPE! --- .../velocitycore/tablist/TablistManager.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java index 6429fded..69739dc2 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java @@ -61,16 +61,17 @@ public class TablistManager extends BasicListener { @Subscribe public void onJoin(PostLoginEvent event) { - synchronized (tablists) { - tablists.put(event.getPlayer(), new Tablist(event.getPlayer())); - } Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket); } @Subscribe public void onServerConnection(ServerConnectedEvent event) { synchronized (tablists) { - tablists.get(event.getPlayer()).onServerSwitch(); + if (tablists.containsKey(event.getPlayer())) { + tablists.get(event.getPlayer()).onServerSwitch(); + } else { + tablists.put(event.getPlayer(), new Tablist(event.getPlayer())); + } } } @@ -98,14 +99,14 @@ public class TablistManager extends BasicListener { private void updateTablist() { List 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()); From 4f4e0bab698ebca9062259b72293bc1dc7ac43dd Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sat, 17 Aug 2024 19:03:32 +0200 Subject: [PATCH 3/3] Fix tablist (some tests done, potentielly fixed) --- .../steamwar/velocitycore/tablist/Tablist.java | 12 +++++++++--- .../velocitycore/tablist/TablistManager.java | 16 +++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java index 92484166..315717a6 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/Tablist.java @@ -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) { @@ -150,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 diff --git a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java index 69739dc2..29cebb38 100644 --- a/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java +++ b/VelocityCore/src/de/steamwar/velocitycore/tablist/TablistManager.java @@ -21,9 +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,20 +59,14 @@ public class TablistManager extends BasicListener { } } - @Subscribe - public void onJoin(PostLoginEvent event) { - Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket); - } - @Subscribe public void onServerConnection(ServerConnectedEvent event) { synchronized (tablists) { - if (tablists.containsKey(event.getPlayer())) { - tablists.get(event.getPlayer()).onServerSwitch(); - } else { - tablists.put(event.getPlayer(), new Tablist(event.getPlayer())); - } + tablists.computeIfAbsent(event.getPlayer(), Tablist::new).onServerSwitch(); } + + if(event.getPlayer().getProtocolVersion().noGreaterThan(ProtocolVersion.MINECRAFT_1_20)) + Tablist.sendPacket(event.getPlayer(), Tablist.createTeamPacket); } @Subscribe