diff --git a/build.gradle.kts b/build.gradle.kts index d310fcf..226e88a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "org.adde0109" -version = "1.4.0-beta-rc7" +version = "1.4.0-beta-rc8" repositories { mavenCentral() diff --git a/src/main/java/org/adde0109/ambassador/Ambassador.java b/src/main/java/org/adde0109/ambassador/Ambassador.java index faf2ec7..dac69ff 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -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); diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityBackendChannelInitializer.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityBackendChannelInitializer.java index 81c3559..acc3cbe 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityBackendChannelInitializer.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityBackendChannelInitializer.java @@ -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 diff --git a/src/main/java/org/adde0109/ambassador/velocity/VelocityServerChannelInitializer.java b/src/main/java/org/adde0109/ambassador/velocity/VelocityServerChannelInitializer.java index 23095a1..6d7f3b4 100644 --- a/src/main/java/org/adde0109/ambassador/velocity/VelocityServerChannelInitializer.java +++ b/src/main/java/org/adde0109/ambassador/velocity/VelocityServerChannelInitializer.java @@ -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)); + } } }