1
0
mirror of https://github.com/GeyserMC/Floodgate.git synced 2026-01-04 15:31:48 +00:00

Support changes introduced in a recent BungeeCord commit

This commit is contained in:
Tim203
2023-03-28 14:41:41 +02:00
parent 65e4de4e7a
commit f0a20aa967
2 changed files with 28 additions and 1 deletions

View File

@@ -1,4 +1,4 @@
var bungeeCommit = "ff5727c"
var bungeeCommit = "dfd847f"
var gsonVersion = "2.8.0"
var guavaVersion = "21.0"

View File

@@ -35,6 +35,7 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.md_5.bungee.netty.PipelineUtils;
import net.md_5.bungee.protocol.MinecraftEncoder;
import net.md_5.bungee.protocol.Varint21LengthFieldExtraBufPrepender;
import net.md_5.bungee.protocol.Varint21LengthFieldPrepender;
import org.geysermc.floodgate.api.logger.FloodgateLogger;
import org.geysermc.floodgate.inject.CommonPlatformInjector;
@@ -52,6 +53,16 @@ public final class BungeeInjector extends CommonPlatformInjector {
public void inject() {
// Can everyone just switch to Velocity please :)
// Newer Bungee versions have a separate prepender for backend and client connections
Field serverFramePrepender =
ReflectionUtils.getField(PipelineUtils.class, "serverFramePrepender");
if (serverFramePrepender != null) {
BungeeCustomServerPrepender customServerPrepender = new BungeeCustomServerPrepender(
this, ReflectionUtils.castedStaticValue(serverFramePrepender)
);
BungeeReflectionUtils.setFieldValue(null, serverFramePrepender, customServerPrepender);
}
Field framePrepender = ReflectionUtils.getField(PipelineUtils.class, "framePrepender");
// Required in order to inject into both Geyser <-> proxy AND proxy <-> server
@@ -119,6 +130,22 @@ public final class BungeeInjector extends CommonPlatformInjector {
}
}
@RequiredArgsConstructor
private static final class BungeeCustomServerPrepender
extends Varint21LengthFieldExtraBufPrepender {
private final BungeeInjector injector;
private final Varint21LengthFieldExtraBufPrepender original;
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
original.handlerAdded(ctx);
// The Minecraft encoder being in the pipeline isn't present until later
// Proxy <-> Server
ctx.pipeline().addLast(BUNGEE_INIT, new BungeeProxyToServerInjectInitializer(injector));
}
}
@RequiredArgsConstructor
private static final class BungeeClientToProxyInjectInitializer
extends ChannelInboundHandlerAdapter {