diff --git a/src/main/java/org/adde0109/ambassador/velocity/ForgeConnectionType.java b/src/main/java/org/adde0109/ambassador/forge/ForgeConnectionType.java similarity index 84% rename from src/main/java/org/adde0109/ambassador/velocity/ForgeConnectionType.java rename to src/main/java/org/adde0109/ambassador/forge/ForgeConnectionType.java index a5760a7..8ce8e9b 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/ForgeConnectionType.java +++ b/src/main/java/org/adde0109/ambassador/forge/ForgeConnectionType.java @@ -1,4 +1,4 @@ -package org.adde0109.ambassador.velocity; +package org.adde0109.ambassador.forge; import com.velocitypowered.api.util.GameProfile; import com.velocitypowered.proxy.config.PlayerInfoForwarding; @@ -6,7 +6,7 @@ import com.velocitypowered.proxy.connection.ConnectionType; import com.velocitypowered.proxy.connection.MinecraftConnection; import com.velocitypowered.proxy.connection.backend.BackendConnectionPhase; import com.velocitypowered.proxy.connection.client.ClientConnectionPhase; -import org.adde0109.ambassador.velocity.ForgeClientConnectionPhase; +import org.adde0109.ambassador.forge.ForgeFML2ClientConnectionPhase; public class ForgeConnectionType implements ConnectionType { @@ -17,7 +17,7 @@ public class ForgeConnectionType implements ConnectionType { @Override public ClientConnectionPhase getInitialClientPhase() { - return new ForgeClientConnectionPhase(connection); + return new ForgeFML2ClientConnectionPhase(connection); } @Override diff --git a/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java new file mode 100644 index 0000000..0ec1a08 --- /dev/null +++ b/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java @@ -0,0 +1,30 @@ +package org.adde0109.ambassador.forge; + +import com.velocitypowered.proxy.connection.MinecraftConnection; +import com.velocitypowered.proxy.connection.client.ClientConnectionPhase; +import com.velocitypowered.proxy.connection.client.ConnectedPlayer; +import com.velocitypowered.proxy.protocol.packet.LoginPluginMessage; +import io.netty.buffer.Unpooled; +import org.adde0109.ambassador.velocity.VelocityForgeClientConnectionPhase; +import org.adde0109.ambassador.velocity.VelocityForgeHandshakeSessionHandler; + +public class ForgeFML2ClientConnectionPhase implements VelocityForgeClientConnectionPhase { + + private final MinecraftConnection connection; + ForgeFML2ClientConnectionPhase(MinecraftConnection connection) { + this.connection = connection; + } + @Override + public void handleLogin(ForgeHandshakeUtils.CachedServerHandshake handshake) { + this.connection.setSessionHandler(new VelocityForgeHandshakeSessionHandler()); + if(handshake == null) { + this.connection.write(new LoginPluginMessage(98,"fml:loginwrapper", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generateResetPacket()))); + } else { + this.connection.delayedWrite(new LoginPluginMessage(1,"fml:loginwrapper", Unpooled.wrappedBuffer(handshake.modListPacket))); + for (int i = 0;i { - if (ex != null) { - //SEND RESET PACKET - } else { - //SEND MODLIST - } - }); + public void handleLogin(ConnectedPlayer player, ForgeFML2ClientConnectionPhase phase, Continuation continuation) { + getInitialHandshake(player).whenComplete((msg,ex) -> phase.handleLogin(msg)); } private CompletableFuture getInitialHandshake(ConnectedPlayer player) { diff --git a/src/main/java/org/adde0109/ambassador/velocity/ForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/velocity/ForgeClientConnectionPhase.java deleted file mode 100644 index 6789f97..0000000 --- a/src/main/java/org/adde0109/ambassador/velocity/ForgeClientConnectionPhase.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.adde0109.ambassador.velocity; - -import com.velocitypowered.api.event.Continuation; -import com.velocitypowered.proxy.connection.MinecraftConnection; -import com.velocitypowered.proxy.connection.client.ClientConnectionPhase; -import com.velocitypowered.proxy.connection.client.ConnectedPlayer; - -public class ForgeClientConnectionPhase implements ClientConnectionPhase { - - ForgeClientConnectionPhase(MinecraftConnection connection) { - } - public void handleLogin() { - - } -} diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java index 14877bf..33d5758 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java @@ -5,6 +5,7 @@ import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.permission.PermissionsSetupEvent; import com.velocitypowered.proxy.connection.client.ConnectedPlayer; import org.adde0109.ambassador.Ambassador; +import org.adde0109.ambassador.forge.ForgeFML2ClientConnectionPhase; public class VelocityEventHandler { @@ -20,7 +21,7 @@ public class VelocityEventHandler { continuation.resume(); return; } - if (!(player.getPhase() instanceof ForgeClientConnectionPhase phase)) { + if (!(player.getPhase() instanceof ForgeFML2ClientConnectionPhase phase)) { continuation.resume(); return; } diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeClientConnectionPhase.java new file mode 100644 index 0000000..8ad5430 --- /dev/null +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeClientConnectionPhase.java @@ -0,0 +1,10 @@ +package org.adde0109.ambassador.velocity; + +import com.velocitypowered.proxy.connection.client.ClientConnectionPhase; +import org.adde0109.ambassador.forge.ForgeHandshakeUtils; + +public interface VelocityForgeClientConnectionPhase extends ClientConnectionPhase { + default void handleLogin(ForgeHandshakeUtils.CachedServerHandshake handshake) { + + } +} diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeHandshakeSessionHandler.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeHandshakeSessionHandler.java index 23526a4..58dded4 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeHandshakeSessionHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityForgeHandshakeSessionHandler.java @@ -1,6 +1,11 @@ package org.adde0109.ambassador.velocity; import com.velocitypowered.proxy.connection.MinecraftSessionHandler; +import com.velocitypowered.proxy.protocol.packet.LoginPluginResponse; public class VelocityForgeHandshakeSessionHandler implements MinecraftSessionHandler { + @Override + public boolean handle(LoginPluginResponse packet) { + return true; + } } diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityHandshakeSessionHandler.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityHandshakeSessionHandler.java index 6660b3b..c262df0 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityHandshakeSessionHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityHandshakeSessionHandler.java @@ -8,6 +8,7 @@ import com.velocitypowered.proxy.protocol.MinecraftPacket; import com.velocitypowered.proxy.protocol.StateRegistry; import com.velocitypowered.proxy.protocol.packet.Handshake; import io.netty.buffer.ByteBuf; +import org.adde0109.ambassador.forge.ForgeConnectionType; public class VelocityHandshakeSessionHandler implements MinecraftSessionHandler { private final HandshakeSessionHandler original;