From ecc10d656093d03720b708498741b29729d324e8 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sun, 16 Feb 2025 15:18:55 -0500 Subject: [PATCH] Update direct connection/compression disabler for newest BungeeCord Fixes #5348 --- .../GeyserBungeeCompressionDisabler.java | 6 ++++-- .../platform/bungeecord/GeyserBungeeInjector.java | 10 +++++++++- .../bungeecord/GeyserBungeePingPassthrough.java | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java index 485079a0579..23ab3636327 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java @@ -28,6 +28,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; +import net.md_5.bungee.netty.LengthPrependerAndCompressor; import net.md_5.bungee.protocol.packet.LoginSuccess; import net.md_5.bungee.protocol.packet.SetCompression; @@ -40,8 +41,9 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) // Fixes https://github.com/GeyserMC/Geyser/issues/4281 // The server may send a LoginDisconnect packet after compression is set. if (!compressionDisabled) { - if (ctx.pipeline().get("compress") != null) { - ctx.pipeline().remove("compress"); + LengthPrependerAndCompressor compressor = ctx.pipeline().get(LengthPrependerAndCompressor.class); + if (compressor.isCompress()) { + compressor.setCompress(false); compressionDisabled = true; } if (ctx.pipeline().get("decompress") != null) { diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java index 7c60ba95d1a..459bde3af39 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java @@ -73,6 +73,14 @@ protected void initializeLocalChannel0(GeyserBootstrap bootstrap) throws Excepti throw new UnsupportedOperationException("Geyser does not currently support multiple listeners with injection! " + "Please reach out to us on our Discord at https://discord.gg/GeyserMC so we can hear feedback on your setup."); } + + // TODO remove + try { + ProxyServer.class.getMethod("unsafe"); + } catch (NoSuchMethodException e) { + throw new UnsupportedOperationException("You're using an outdated version of BungeeCord - please update. Thank you!"); + } + ListenerInfo listenerInfo = proxy.getConfig().getListeners().stream().findFirst().orElseThrow(IllegalStateException::new); Class proxyClass = proxy.getClass(); @@ -138,7 +146,7 @@ protected void initChannel(@NonNull Channel ch) throws Exception { if (channelInitializer == null) { // Proxy has finished initializing; we can safely grab this variable without fear of plugins modifying it // (Older versions of ViaVersion replace this to inject) - channelInitializer = PipelineUtils.SERVER_CHILD; + channelInitializer = proxy.unsafe().getFrontendChannelInitializer().getChannelInitializer(); } initChannel.invoke(channelInitializer, ch); diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java index 1193a52b39e..472c5f10aa0 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java @@ -186,6 +186,21 @@ public boolean isConnected() { return false; } + @Override + public boolean isTransferred() { + return false; + } + + @Override + public CompletableFuture retrieveCookie(String s) { + throw new UnsupportedOperationException(); + } + + @Override + public CompletableFuture sendData(String s, byte[] bytes) { + throw new UnsupportedOperationException(); + } + @Override public Unsafe unsafe() { throw new UnsupportedOperationException();