From c620e02b839d0922943a0716a3bcddac0afc2b77 Mon Sep 17 00:00:00 2001 From: FlorianMichael <60033407+FlorianMichael@users.noreply.github.com> Date: Wed, 22 Mar 2023 14:33:20 +0100 Subject: [PATCH] Fixed bedrock pinging --- .../injection/access/IClientConnection.java | 2 ++ .../injection/mixin/base/MixinClientConnection.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/access/IClientConnection.java b/src/main/java/de/florianmichael/viafabricplus/injection/access/IClientConnection.java index 86d5d1c2..b34533c0 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/access/IClientConnection.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/access/IClientConnection.java @@ -28,6 +28,8 @@ public interface IClientConnection { void viafabricplus_setupPreNettyEncryption(); + void viafabricplus_captureAddress(final InetSocketAddress socketAddress); + void viafabricplus_enableZLibCompression(); void viafabricplus_enableSnappyCompression(); void viafabricplus_enableAesGcmEncryption(final SecretKey secretKey) throws InvalidAlgorithmParameterException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinClientConnection.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinClientConnection.java index d575c58a..76ef145f 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinClientConnection.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinClientConnection.java @@ -102,6 +102,9 @@ public abstract class MixinClientConnection extends SimpleChannelInboundHandler< @Unique private boolean viafabricplus_compressionEnabled = false; + @Unique + private InetSocketAddress viafabricplus_capturedAddress; + @Inject(method = "setCompressionThreshold", at = @At("RETURN")) private void reorderCompression(int compressionThreshold, boolean rejectBad, CallbackInfo ci) { channel.pipeline().fireUserEventTriggered(new PipelineReorderEvent()); @@ -123,6 +126,7 @@ public abstract class MixinClientConnection extends SimpleChannelInboundHandler< @Overwrite public static ClientConnection connect(InetSocketAddress address, boolean useEpoll) { final ClientConnection clientConnection = new ClientConnection(NetworkSide.CLIENTBOUND); + ((IClientConnection) clientConnection).viafabricplus_captureAddress(address); final Class channelType = Epoll.isAvailable() && useEpoll ? EpollSocketChannel.class : NioSocketChannel.class; final Lazy lazy = Epoll.isAvailable() && useEpoll ? EPOLL_CLIENT_IO_GROUP : CLIENT_IO_GROUP; @@ -181,7 +185,6 @@ public abstract class MixinClientConnection extends SimpleChannelInboundHandler< // Pinging in RakNet is something different if (ProtocolHack.getRakNetPingSessions().contains(address)) { - ProtocolHack.getRakNetPingSessions().remove(address); { // Temporary fix for the ping encoder final RakClientChannel rakChannel = (RakClientChannel) channel; @@ -223,8 +226,9 @@ public abstract class MixinClientConnection extends SimpleChannelInboundHandler< public void channelRegistered(ChannelHandlerContext ctx) throws Exception { super.channelRegistered(ctx); - if (ProtocolHack.getTargetVersion(channel).isEqualTo(BedrockProtocolVersion.bedrockLatest)) { + if (ProtocolHack.getRakNetPingSessions().contains(viafabricplus_capturedAddress)) { channelActive(ctx); + ProtocolHack.getRakNetPingSessions().remove(viafabricplus_capturedAddress); } } @@ -240,6 +244,11 @@ public abstract class MixinClientConnection extends SimpleChannelInboundHandler< this.channel.pipeline().addBefore(PreNettyConstants.HANDLER_ENCODER_NAME, "encrypt", new PacketEncryptor(this.viafabricplus_encryptionCipher)); } + @Override + public void viafabricplus_captureAddress(InetSocketAddress socketAddress) { + viafabricplus_capturedAddress = socketAddress; + } + @Override public void viafabricplus_enableZLibCompression() { if (this.viafabricplus_compressionEnabled) throw new IllegalStateException("Compression is already enabled");