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 485079a05..23ab36363 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 @@ package org.geysermc.geyser.platform.bungeecord; 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 class GeyserBungeeCompressionDisabler extends ChannelOutboundHandlerAdapt // 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 7c60ba95d..459bde3af 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 @@ public class GeyserBungeeInjector extends GeyserInjector implements Listener { 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 @@ public class GeyserBungeeInjector extends GeyserInjector implements Listener { 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 1193a52b3..472c5f10a 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 class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, List 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();