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:
@@ -1,4 +1,4 @@
|
||||
var bungeeCommit = "ff5727c"
|
||||
var bungeeCommit = "dfd847f"
|
||||
var gsonVersion = "2.8.0"
|
||||
var guavaVersion = "21.0"
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user