Changed ChannelInitializers to be more compatible

This commit is contained in:
Adrian Bergqvist 2023-06-06 00:24:35 +02:00
parent 9c5f49f6e9
commit 07547130be
No known key found for this signature in database
GPG Key ID: FAE7D8EDE225E686
4 changed files with 27 additions and 31 deletions

View File

@ -5,7 +5,7 @@ plugins {
}
group = "org.adde0109"
version = "1.4.0-beta-rc7"
version = "1.4.0-beta-rc8"
repositories {
mavenCentral()

View File

@ -37,10 +37,9 @@ import java.nio.file.Path;
import java.util.concurrent.TimeUnit;
import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19;
import static com.velocitypowered.api.network.ProtocolVersion.MINECRAFT_1_19_3;
import static com.velocitypowered.proxy.protocol.packet.brigadier.ArgumentIdentifier.mapSet;
@Plugin(id = "ambassador", name = "Ambassador", version = "1.4.0-beta-rc7", authors = {"adde0109"})
@Plugin(id = "ambassador", name = "Ambassador", version = "1.4.0-beta-rc8", authors = {"adde0109"})
public class Ambassador {
public ProxyServer server;
@ -104,11 +103,11 @@ public class Ambassador {
Field cmField = VelocityServer.class.getDeclaredField("cm");
cmField.setAccessible(true);
ChannelInitializer<?> original = ((ConnectionManager) cmField.get(server)).serverChannelInitializer.get();
((ConnectionManager) cmField.get(server)).serverChannelInitializer.set(new VelocityServerChannelInitializer(original,(VelocityServer) server));
ChannelInitializer<?> original = ((ConnectionManager) cmField.get(server)).getServerChannelInitializer().get();
((ConnectionManager) cmField.get(server)).getServerChannelInitializer().set(new VelocityServerChannelInitializer(original,(VelocityServer) server));
ChannelInitializer<?> originalBackend = ((ConnectionManager) cmField.get(server)).backendChannelInitializer.get();
((ConnectionManager) cmField.get(server)).backendChannelInitializer.set(new VelocityBackendChannelInitializer(originalBackend,(VelocityServer) server));
ChannelInitializer<?> originalBackend = ((ConnectionManager) cmField.get(server)).getBackendChannelInitializer().get();
((ConnectionManager) cmField.get(server)).getBackendChannelInitializer().set(new VelocityBackendChannelInitializer(originalBackend,(VelocityServer) server));
Method argumentRegistry = ArgumentPropertyRegistry.class.getDeclaredMethod("register", ArgumentIdentifier.class, Class.class, ArgumentPropertySerializer.class);
argumentRegistry.setAccessible(true);

View File

@ -13,24 +13,21 @@ import java.lang.reflect.Method;
public class VelocityBackendChannelInitializer extends BackendChannelInitializer {
private static final Method INIT_CHANNEL;
private Method INIT_CHANNEL;
private final ChannelInitializer<?> delegate;
private final VelocityServer server;
static {
try {
INIT_CHANNEL = ChannelInitializer.class.getDeclaredMethod("initChannel", Channel.class);
INIT_CHANNEL.setAccessible(true);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
public VelocityBackendChannelInitializer(ChannelInitializer<?> delegate, VelocityServer server) {
super(server);
this.delegate = delegate;
this.server = server;
try {
INIT_CHANNEL = delegate.getClass().getDeclaredMethod("initChannel", Channel.class);
INIT_CHANNEL.setAccessible(true);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
@Override

View File

@ -14,22 +14,19 @@ import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Method;
public class VelocityServerChannelInitializer extends ServerChannelInitializer {
private static final Method INIT_CHANNEL;
private Method INIT_CHANNEL;
private final ChannelInitializer<?> delegate;
static {
try {
INIT_CHANNEL = ChannelInitializer.class.getDeclaredMethod("initChannel", Channel.class);
INIT_CHANNEL.setAccessible(true);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
public VelocityServerChannelInitializer(ChannelInitializer<?> delegate,VelocityServer server) {
super(server);
this.delegate = delegate;
try {
INIT_CHANNEL = delegate.getClass().getDeclaredMethod("initChannel", Channel.class);
INIT_CHANNEL.setAccessible(true);
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
}
@Override
@ -39,9 +36,12 @@ public class VelocityServerChannelInitializer extends ServerChannelInitializer {
} catch (ReflectiveOperationException e) {
throw new RuntimeException(e);
}
ChannelHandler handler = ch.pipeline().get(Connections.HANDLER);
if (!(handler instanceof final MinecraftConnection connection)) throw new RuntimeException("plugin conflict");
HandshakeSessionHandler originalSessionHandler = (HandshakeSessionHandler) connection.getSessionHandler();
connection.setSessionHandler(new VelocityHandshakeSessionHandler(originalSessionHandler, connection));
finally {
if (ch.pipeline().get(MinecraftConnection.class) == null)
super.initChannel(ch);
MinecraftConnection handler = ch.pipeline().get(MinecraftConnection.class);
HandshakeSessionHandler originalSessionHandler = (HandshakeSessionHandler) handler.getSessionHandler();
handler.setSessionHandler(new VelocityHandshakeSessionHandler(originalSessionHandler, handler));
}
}
}