From ef4bd2ddcd836386a21dd70d9b70b5937308e123 Mon Sep 17 00:00:00 2001 From: "Kristian S. Stangeland" Date: Wed, 29 Jan 2014 01:06:05 +0100 Subject: [PATCH] Race condition that would occationally skip STATUS packets. Fixes 198 --- .../injector/netty/NettyProtocolInjector.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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); } };