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/build.gradle.kts b/build.gradle.kts index 7abec89..f7d5195 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -37,3 +37,8 @@ tasks { archiveBaseName.set("Ambassador-Velocity") } } + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} \ No newline at end of file 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 d3748fd..c27da55 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -1,5 +1,7 @@ package org.adde0109.ambassador; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; import com.google.inject.Inject; import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; @@ -14,8 +16,10 @@ import java.lang.reflect.Method; import java.nio.file.Files; import java.util.HashMap; +import java.util.List; import java.util.Map; +import com.velocitypowered.api.proxy.messages.ChannelIdentifier; import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.connection.MinecraftConnection; @@ -50,7 +54,7 @@ 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; @@ -79,11 +83,11 @@ public Ambassador(ProxyServer server, Logger logger, @DataDirectory Path dataDir 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 6b065c8..11929f7 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java @@ -198,8 +198,8 @@ private ClientResetType getResetType(ConnectedPlayer player) { if (player.getModInfo().get().getMods().stream().anyMatch((mod -> mod.getId().equals("clientresetpacket")))) { return ClientResetType.CRP; } else if (Ambassador.getInstance().config.getServerSwitchCancellationTime() >= 0 && - player.getModInfo().get().getMods().stream().anyMatch((mod -> mod.getId().equals("serverredirect") - || mod.getId().equals("srvredirect:red"))) + (player.getModInfo().get().getMods().stream().anyMatch((mod -> mod.getId().equals("serverredirect"))) + || 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 ac5301f..edd85f9 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java @@ -3,6 +3,7 @@ import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.PostOrder; 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.*; import com.velocitypowered.api.proxy.server.RegisteredServer; @@ -68,9 +69,12 @@ public void onPlayerChannelRegisterEvent(PlayerChannelRegisterEvent event) { if (!(player.getConnection().getType() instanceof ForgeFMLConnectionType)) { return; } + // Do not overwrite the mod info stored by the proxy or the server redirect based on Client Reset Packet will stop working + /* player.setModInfo(new ModInfo("Channels", event.getChannels().stream().map((id) -> { return new ModInfo.Mod(id.getId(), ""); }).toList())); + */ VelocityForgeClientConnectionPhase clientPhase = (VelocityForgeClientConnectionPhase) player.getPhase(); //If reset typ is still unknown, set it! @@ -78,5 +82,4 @@ public void onPlayerChannelRegisterEvent(PlayerChannelRegisterEvent event) { clientPhase.updateResetType(player); } } - }