From 034f753b9c47325cc2229ee9fc678505c4f35356 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=E1=BA=A7n=20Nguy=E1=BB=85n=20Ng=E1=BB=8Dc=20Quang?= <3d7777456@gmail.com> Date: Wed, 24 Jan 2024 05:07:54 +0700 Subject: [PATCH] allow custom Channel type to be wrapped in InjectionFactory#fromChannel --- .../injector/netty/channel/InjectionFactory.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/comphenix/protocol/injector/netty/channel/InjectionFactory.java b/src/main/java/com/comphenix/protocol/injector/netty/channel/InjectionFactory.java index 1bd0f14d0..43aa9c5c9 100644 --- a/src/main/java/com/comphenix/protocol/injector/netty/channel/InjectionFactory.java +++ b/src/main/java/com/comphenix/protocol/injector/netty/channel/InjectionFactory.java @@ -168,11 +168,19 @@ public Injector fromChannel(Channel channel, ChannelListener listener, Temporary Object netManager = this.findNetworkManager(channel); Player temporaryPlayer = playerFactory.createTemporaryPlayer(this.server); + // Use the channel field from an already found network manager to prevent our channel injector given in + // this method from overwriting initialized custom channel implementation in some spigot forks + Channel wrappedChannel = FuzzyReflection.getFieldValue(netManager, Channel.class, true); + if (wrappedChannel == null) { + // Use the channel straight from ChannelHandlerContext as fallback if the field has null value + wrappedChannel = channel; + } + NettyChannelInjector injector = new NettyChannelInjector( temporaryPlayer, this.server, netManager, - channel, + wrappedChannel, listener, this, this.errorReporter);