diff --git a/build.gradle b/build.gradle index ce58c62..372c515 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'org.adde0109' -version '1.1.3-alpha' +version '1.1.4-alpha' repositories { maven { diff --git a/src/main/java/org/adde0109/ambassador/Ambassador.java b/src/main/java/org/adde0109/ambassador/Ambassador.java index 0ab0c7a..68f478e 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -25,7 +25,7 @@ import org.slf4j.Logger; import java.nio.file.Path; -@Plugin(id = "ambassador", name = "Ambassador", version = "1.1.3-alpha", authors = {"adde0109"}) +@Plugin(id = "ambassador", name = "Ambassador", version = "1.1.4-alpha", authors = {"adde0109"}) public class Ambassador { public ProxyServer server; diff --git a/src/main/java/org/adde0109/ambassador/forge/FML2CRPMResetCompleteListener.java b/src/main/java/org/adde0109/ambassador/forge/FML2CRPMResetCompleteListener.java index f54d1a2..44033ae 100644 --- a/src/main/java/org/adde0109/ambassador/forge/FML2CRPMResetCompleteListener.java +++ b/src/main/java/org/adde0109/ambassador/forge/FML2CRPMResetCompleteListener.java @@ -4,6 +4,7 @@ import com.velocitypowered.proxy.protocol.ProtocolUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.util.ReferenceCountUtil; public class FML2CRPMResetCompleteListener extends ChannelInboundHandlerAdapter { @@ -24,6 +25,7 @@ public class FML2CRPMResetCompleteListener extends ChannelInboundHandlerAdapter int originalReaderIndex = buf.readerIndex(); int packetId = ProtocolUtils.readVarInt(buf); if (packetId == 0x02 && buf.readableBytes() > 1) { + ReferenceCountUtil.release(msg); ctx.pipeline().remove(this); whenComplete.run(); return; diff --git a/src/main/java/org/adde0109/ambassador/forge/FML2ClientConnectionPhase.java b/src/main/java/org/adde0109/ambassador/forge/FML2ClientConnectionPhase.java index 3717dc0..fd5b0ad 100644 --- a/src/main/java/org/adde0109/ambassador/forge/FML2ClientConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/forge/FML2ClientConnectionPhase.java @@ -105,12 +105,12 @@ public class FML2ClientConnectionPhase extends VelocityForgeClientConnectionPhas @Override public void handleForward(VelocityServerConnection serverConnection, LoginPluginMessage payload) { - ByteBuf buf = payload.content().copy(); + final ByteBuf buf = payload.content().duplicate(); ProtocolUtils.readString(buf); //Channel ProtocolUtils.readVarInt(buf); //Length if (ProtocolUtils.readVarInt(buf) == 1) { getPayloadManager().listenFor(payload.getId()).thenAccept(rawResponse -> { - ByteBuf response = rawResponse.copy(); + final ByteBuf response = rawResponse.duplicate(); ProtocolUtils.readString(response); //Channel ProtocolUtils.readVarInt(response); //Length if (ProtocolUtils.readVarInt(response) == 2) { @@ -119,9 +119,7 @@ public class FML2ClientConnectionPhase extends VelocityForgeClientConnectionPhas serverConnection.getPlayer().setPhase(new FML2CRPMClientConnectionPhase(clientPhase,getPayloadManager())); } } - ReferenceCountUtil.release(response); }); - ReferenceCountUtil.release(buf); } } } diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java index 4bc0eb1..acc43df 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityEventHandler.java @@ -12,6 +12,7 @@ import com.velocitypowered.api.event.player.ServerPreConnectEvent; import com.velocitypowered.proxy.VelocityServer; import com.velocitypowered.proxy.connection.backend.VelocityServerConnection; import com.velocitypowered.proxy.connection.client.ConnectedPlayer; +import com.velocitypowered.proxy.protocol.packet.ClientSettings; import org.adde0109.ambassador.Ambassador; import org.adde0109.ambassador.forge.FML2CRPMClientConnectionPhase; import org.adde0109.ambassador.forge.FML2ClientConnectionPhase; diff --git a/src/main/java/org/adde0109/ambassador/velocity/backend/VelocityForgeBackendConnectionPhase.java b/src/main/java/org/adde0109/ambassador/velocity/backend/VelocityForgeBackendConnectionPhase.java index c46a46e..3b62a23 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/backend/VelocityForgeBackendConnectionPhase.java +++ b/src/main/java/org/adde0109/ambassador/velocity/backend/VelocityForgeBackendConnectionPhase.java @@ -13,7 +13,6 @@ import java.util.List; public class VelocityForgeBackendConnectionPhase implements BackendConnectionPhase { - private List queuedHandshakePackets = new ArrayList<>(); public VelocityForgeBackendConnectionPhase() { } @@ -27,27 +26,17 @@ public class VelocityForgeBackendConnectionPhase implements BackendConnectionPha public boolean handle(VelocityServerConnection server, ConnectedPlayer player, LoginPluginMessage message) throws Exception { VelocityForgeClientConnectionPhase clientPhase = ((VelocityForgeClientConnectionPhase) player.getPhase()); - message.retain(); if (clientPhase.clientPhase == VelocityForgeClientConnectionPhase.ClientPhase.VANILLA) { + server.getConnection().getChannel().config().setAutoRead(false); + message.retain(); clientPhase.reset(server,player).thenAccept((success) -> { if (success) { - for (LoginPluginMessage msg: queuedHandshakePackets) { - ((VelocityForgeClientConnectionPhase) player.getPhase()).forwardPayload(server,msg); - } - player.getConnection().flush(); - } else { - for (LoginPluginMessage msg: queuedHandshakePackets) { - ReferenceCountUtil.release(msg); - } + clientPhase.forwardPayload(server,message); + server.getConnection().getChannel().config().setAutoRead(true); } - queuedHandshakePackets = null; }); - queuedHandshakePackets = new ArrayList<>(); - queuedHandshakePackets.add(message); - } else if (clientPhase.clientPhase != null) { - clientPhase.forwardPayload(server,message); } else { - queuedHandshakePackets.add(message); + clientPhase.forwardPayload(server, (LoginPluginMessage) message.retain()); } return true; }