diff --git a/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java index 538e272..5769e43 100644 --- a/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/ForgeFML2ClientConnectionPhase.java @@ -1,5 +1,6 @@ package org.adde0109.ambassador.forge; +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; @@ -17,30 +18,37 @@ public class ForgeFML2ClientConnectionPhase implements VelocityForgeClientConnec private final MinecraftConnection connection; private boolean isResettable; private ByteBuf modListData; + private Continuation whenComplete; ForgeFML2ClientConnectionPhase(MinecraftConnection connection) { this.connection = connection; } @Override - public void handleLogin(@Nullable ForgeHandshakeUtils.CachedServerHandshake handshake) { + public void handleLogin(ForgeHandshakeUtils.CachedServerHandshake handshake, Continuation continuation) { + VelocityForgeHandshakeSessionHandler sessionHandler = new VelocityForgeHandshakeSessionHandler(this); if(handshake == null) { this.connection.write(new LoginPluginMessage(98,"fml:loginwrapper", Unpooled.wrappedBuffer(ForgeHandshakeUtils.generateResetPacket()))); + sessionHandler.listen(98); } else { this.connection.delayedWrite(new LoginPluginMessage(1,"fml:loginwrapper", Unpooled.wrappedBuffer(handshake.modListPacket))); + sessionHandler.listen(1); for (int i = 0;i listenerList = new ArrayList(); private final VelocityForgeClientConnectionPhase phase; public VelocityForgeHandshakeSessionHandler(VelocityForgeClientConnectionPhase phase) { this.phase = phase; @@ -13,10 +16,12 @@ public class VelocityForgeHandshakeSessionHandler implements MinecraftSessionHan @Override public boolean handle(LoginPluginResponse packet) { - //TODO: Check if we sent it - if (packet.getId() == 1 && packet.getId() == 98) { - phase.handle(packet); + if (listenerList.removeIf(id -> id.equals(packet.getId()))) { + phase.handle(packet, listenerList.isEmpty()); } return true; } + public void listen(int id) { + listenerList.add(id); + } }