From 9c5f49f6e9e090d2b54f1363396ba33dab88d7e1 Mon Sep 17 00:00:00 2001 From: Adrian Bergqvist Date: Sat, 3 Jun 2023 00:35:31 +0200 Subject: [PATCH] Change config and fixed some bugs --- build.gradle.kts | 2 +- .../org/adde0109/ambassador/Ambassador.java | 2 +- .../adde0109/ambassador/AmbassadorConfig.java | 21 +++---------------- .../VelocityForgeBackendConnectionPhase.java | 4 +++- .../VelocityForgeClientConnectionPhase.java | 3 +-- .../backend/ForgeLoginSessionHandler.java | 2 ++ src/main/resources/default-ambassador.toml | 2 -- 7 files changed, 11 insertions(+), 25 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 734602b..d310fcf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "org.adde0109" -version = "1.4.0-beta-rc4" +version = "1.4.0-beta-rc7" repositories { mavenCentral() diff --git a/src/main/java/org/adde0109/ambassador/Ambassador.java b/src/main/java/org/adde0109/ambassador/Ambassador.java index 3def4c1..faf2ec7 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -40,7 +40,7 @@ import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19; import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19_3; import static com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdentifier.mapSet; -@Plugin(id = "ambassador", name = "Ambassador", version = "1.4.0-beta-rc4", authors = {"adde0109"}) +@Plugin(id = "ambassador", name = "Ambassador", version = "1.4.0-beta-rc7", authors = {"adde0109"}) public class Ambassador { public ProxyServer server; diff --git a/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java b/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java index db18df0..677dcd0 100644 --- a/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java +++ b/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java @@ -12,8 +12,6 @@ import java.nio.file.Path; public class AmbassadorConfig { - @Expose - private int resetTimeout = 1000; @Expose private String disconnectResetMessage = "Please reconnect"; @@ -26,21 +24,13 @@ public class AmbassadorConfig { private net.kyori.adventure.text.@MonotonicNonNull Component messageAsAsComponent; - private AmbassadorConfig(int resetTimeout, String kickResetMessage, int serverSwitchCancellationTime, boolean silenceWarnings) { - this.resetTimeout = resetTimeout; + private AmbassadorConfig(String kickResetMessage, int serverSwitchCancellationTime, boolean silenceWarnings) { this.disconnectResetMessage = kickResetMessage; this.serverSwitchCancellationTime = serverSwitchCancellationTime; this.silenceWarnings = silenceWarnings; }; public void validate() { - final int connectionTimeout = Ambassador.getInstance().server.getConfiguration().getReadTimeout(); - if (resetTimeout >= connectionTimeout) { - throw new InvalidValueException("'reset-timeout' can't be more than nor equal to 'read-timeout': reset-timeout=" + resetTimeout + " connection-timeout=" + connectionTimeout); - } - if (resetTimeout <= 0) { - throw new InvalidValueException("'reset-timeout' can't be less than nor equal to zero: reset-timeout=" + resetTimeout); - } if (serverSwitchCancellationTime <= 0) { throw new InvalidValueException("'server-switch-cancellation-time' can't be less than nor equal to zero: server-switch-cancellation-time=" + serverSwitchCancellationTime); } @@ -70,20 +60,15 @@ public class AmbassadorConfig { if (configVersion < 1.1) { config.set("silence-warnings", false); - config.set("config-version", "1.1"); + config.set("config-version", "1.2"); } - int resetTimeout = config.getIntOrElse("reset-timeout", 3000); String kickResetMessage = config.getOrElse("disconnect-reset-message", "Please reconnect"); int serverSwitchCancellationTime = config.getIntOrElse("server-switch-cancellation-time", 120); boolean silenceWarnings = config.getOrElse("silence-warnings", false); - return new AmbassadorConfig(resetTimeout, kickResetMessage, serverSwitchCancellationTime, silenceWarnings); - } - - public int getResetTimeout() { - return resetTimeout; + return new AmbassadorConfig(kickResetMessage, serverSwitchCancellationTime, silenceWarnings); } public net.kyori.adventure.text.Component getDisconnectResetMessage() { diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java index 01531d2..6e5960d 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeBackendConnectionPhase.java @@ -66,7 +66,9 @@ public enum VelocityForgeBackendConnectionPhase implements BackendConnectionPhas //Reset client if not ready to receive new handshake VelocityForgeClientConnectionPhase clientPhase = (VelocityForgeClientConnectionPhase) player.getPhase(); - clientPhase.resetConnectionPhase(player); + if (clientPhase != VelocityForgeClientConnectionPhase.NOT_STARTED) { + clientPhase.resetConnectionPhase(player); + } message.retain(); player.getConnection().write(message); //Forge server diff --git a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java index 0ca9c3c..e5ad3fb 100644 --- a/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/VelocityForgeClientConnectionPhase.java @@ -63,6 +63,7 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase if (connection.getState() == StateRegistry.PLAY) { connection.write(new PluginMessage("fml:handshake", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generatePluginResetPacket()))); + connection.setState(StateRegistry.LOGIN); } else { connection.write(new LoginPluginMessage(98,"fml:loginwrapper", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generateResetPacket()))); } @@ -98,7 +99,6 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase if (msg.getId() == 98) { player.getConnection().getChannel().pipeline().remove(ForgeConstants.RESET_LISTENER); player.setPhase(NOT_STARTED); - player.getConnection().setState(StateRegistry.LOGIN); player.getConnection().getChannel().pipeline().remove(ForgeConstants.LOGIN_PACKET_QUEUE); @@ -133,7 +133,6 @@ public enum VelocityForgeClientConnectionPhase implements ClientConnectionPhase buf.writeBytes((player.getVirtualHost().get().getHostName() + ":" + player.getVirtualHost().get().getPort()).getBytes(StandardCharsets.UTF_8)); player.getConnection().write(new PluginMessage("srvredirect:red", buf)); - player.getConnection().close(); } else { player.disconnect(Ambassador.getInstance().config.getDisconnectResetMessage()); } diff --git a/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java b/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java index 8ee3e59..74d2dcd 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/backend/ForgeLoginSessionHandler.java @@ -49,10 +49,12 @@ public class ForgeLoginSessionHandler implements MinecraftSessionHandler { } ConnectedPlayer player = serverConnection.getPlayer(); if (!(serverConnection.getConnection().getType() instanceof ForgeFMLConnectionType)) { + if (player.getConnection() == null || player.getConnection().getType() instanceof ForgeFMLConnectionType) { //Initial Vanilla //Forge -> vanilla player.getPhase().resetConnectionPhase(player); player.getConnectionInFlight().getConnection().getChannel().config().setAutoRead(false); + } } else { ((VelocityForgeClientConnectionPhase) player.getPhase()).complete(player); } diff --git a/src/main/resources/default-ambassador.toml b/src/main/resources/default-ambassador.toml index 803c743..4c14918 100644 --- a/src/main/resources/default-ambassador.toml +++ b/src/main/resources/default-ambassador.toml @@ -1,8 +1,6 @@ # Do not change this config-version = "1.1" -# How long to wait for the client to reset before disconnecting (In milliseconds) -reset-timeout = 3000 # Message displayed to the player when disconnected from proxy during server switch. # Legacy color codes and JSON are accepted. disconnect-reset-message = "&6Please reconnect"