From 6b6173951f2f52d609e78ee248251adc8de5bcc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ZX=E5=A4=8F=E5=A4=9C=E4=B9=8B=E9=A3=8E?= Date: Sun, 9 Nov 2025 11:21:25 +0800 Subject: [PATCH] fix: don't track client side channels by ourselves, use API from newer Velocity The plugin requires at least Velocity 3.0 build 490 now --- Velocity | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../org/adde0109/ambassador/Ambassador.java | 19 +++++-------------- .../VelocityForgeClientConnectionPhase.java | 2 +- .../velocity/VelocityEventHandler.java | 8 -------- 5 files changed, 8 insertions(+), 25 deletions(-) diff --git a/Velocity b/Velocity index c3583e1..b6b6b20 160000 --- a/Velocity +++ b/Velocity @@ -1 +1 @@ -Subproject commit c3583e182ca6585e40d1eef0da8c18547c0b1bc1 +Subproject commit b6b6b20fe97cd9cb0d6b4e817d3e7db72aca2d8d diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d..fa5602a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/org/adde0109/ambassador/Ambassador.java b/src/main/java/org/adde0109/ambassador/Ambassador.java index 6bda7e9..c27da55 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -54,7 +54,7 @@ import static com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdenti public class Ambassador { //Don't forget to update checkCompatibleVersion() when changing this value - private static final String minVelocityVersion = "velocity-3.3.0-SNAPSHOT-330"; + private static final String minVelocityVersion = "velocity-3.3.0-SNAPSHOT-490"; public ProxyServer server; public final Logger logger; @@ -64,15 +64,6 @@ public class Ambassador { public AmbassadorConfig config; private static final MapWithExpiration TEMPORARY_FORCED = new MapWithExpiration<>(); - private static final ListMultimap PLAYER_REGISTERED_CHANNELS = ArrayListMultimap.create(); - - public List getPlayerRegisteredChannels(String username) { - return PLAYER_REGISTERED_CHANNELS.get(username); - } - - public void removePlayerRegisteredChannels(String username) { - PLAYER_REGISTERED_CHANNELS.removeAll(username); - } private static Ambassador instance; public static Ambassador getInstance() { @@ -92,11 +83,11 @@ public class Ambassador { boolean checkCompatibleVersion() { //Update this when changing minVelocityVersion try { - Class.forName("com.velocitypowered.proxy.protocol.packet.DisconnectPacket"); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); + ConnectedPlayer.class.getMethod("getClientsideChannels"); + } catch (NoSuchMethodException e) { + return false; } - return true; + return true; } @Subscribe(order = PostOrder.LAST) diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java index 2ee2fe2..11929f7 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java @@ -199,7 +199,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase return ClientResetType.CRP; } else if (Ambassador.getInstance().config.getServerSwitchCancellationTime() >= 0 && (player.getModInfo().get().getMods().stream().anyMatch((mod -> mod.getId().equals("serverredirect"))) - || Ambassador.getInstance().getPlayerRegisteredChannels(player.getUsername()).stream().anyMatch(identifier -> identifier.getId().equals("srvredirect:red"))) + || player.getClientsideChannels().stream().anyMatch(identifier -> identifier.getId().equals("srvredirect:red"))) && player.getVirtualHost().isPresent()) { return ClientResetType.SR; } diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java index 5fc6fea..edd85f9 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java @@ -75,7 +75,6 @@ public class VelocityEventHandler { return new ModInfo.Mod(id.getId(), ""); }).toList())); */ - Ambassador.getInstance().getPlayerRegisteredChannels(player.getUsername()).addAll(event.getChannels()); VelocityForgeClientConnectionPhase clientPhase = (VelocityForgeClientConnectionPhase) player.getPhase(); //If reset typ is still unknown, set it! @@ -83,11 +82,4 @@ public class VelocityEventHandler { clientPhase.updateResetType(player); } } - - // fixme remove unregistered channels when player channel unregister event is fired (that event does not exist?!) - - @Subscribe - public void onPlayerDisconnectEvent(DisconnectEvent event) { - Ambassador.getInstance().removePlayerRegisteredChannels(event.getPlayer().getUsername()); - } }