package lilypad.bukkit.connect.injector; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.ByteToMessageDecoder; import java.lang.reflect.Method; public class NettyChannelInitializer extends ChannelInitializer<SocketChannel> { private NettyInjectHandler handler; private ChannelInitializer<SocketChannel> oldChildHandler; private Method oldChildHandlerMethod; public NettyChannelInitializer(NettyInjectHandler handler, ChannelInitializer<SocketChannel> oldChildHandler) throws Exception { this.handler = handler; this.oldChildHandler = oldChildHandler; this.oldChildHandlerMethod = this.oldChildHandler.getClass().getDeclaredMethod("initChannel", Channel.class); this.oldChildHandlerMethod.setAccessible(true); } @Override protected void initChannel(SocketChannel channel) throws Exception { // Call Old InitChannel this.oldChildHandlerMethod.invoke(this.oldChildHandler, channel); // Add Handlers if (this.handler.isEnabled()) { channel.pipeline().addAfter("decoder", "lilypad_decoder", new NettyDecoderHandler(this.handler)); } } }