diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/netty/NettyProtocolInjector.java b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/netty/NettyProtocolInjector.java index c10aa545..b211e994 100644 --- a/ProtocolLib/src/main/java/com/comphenix/protocol/injector/netty/NettyProtocolInjector.java +++ b/ProtocolLib/src/main/java/com/comphenix/protocol/injector/netty/NettyProtocolInjector.java @@ -101,7 +101,7 @@ public class NettyProtocolInjector implements ChannelListener { Object serverConnection = serverConnectionMethod.invoke(server); // Handle connected channels - final ChannelInboundHandler initProtocol = new ChannelInitializer() { + final ChannelInboundHandler endInitProtocol = new ChannelInitializer() { @Override protected void initChannel(Channel channel) throws Exception { try { @@ -116,15 +116,24 @@ public class NettyProtocolInjector implements ChannelListener { } }; + // This is executed before Minecraft's channel handler + final ChannelInboundHandler beginInitProtocol = new ChannelInitializer() { + @Override + protected void initChannel(Channel channel) throws Exception { + // Our only job is to add init protocol + channel.pipeline().addLast(endInitProtocol); + } + }; + // Add our handler to newly created channels final ChannelHandler connectionHandler = new ChannelInboundHandlerAdapter() { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { Channel channel = (Channel) msg; - // Execute the other handlers before adding our own + // Prepare to initialize ths channel + channel.pipeline().addFirst(beginInitProtocol); ctx.fireChannelRead(msg); - channel.pipeline().addLast(initProtocol); } };