From 6f6f9ce6e2ca6767ffec23ed370b0dd263f37114 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 16 Feb 2026 18:31:46 -0800 Subject: [PATCH 1/3] Use new JSON RPC signaling for realms Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- network | 2 +- .../org/cloudburstmc/proxypass/ProxyPass.java | 20 +++++++++++++----- .../bedrock/session/ServerAddress.java | 21 +++++++++++-------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/network b/network index dcea2ba..4d75e6b 160000 --- a/network +++ b/network @@ -1 +1 @@ -Subproject commit dcea2bab06ab35a53912b686a7dc59e0eb5bf62a +Subproject commit 4d75e6b75c9a2df309ea50cee6a3db8d29aa4760 diff --git a/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java b/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java index 2c97375..26c6487 100644 --- a/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java +++ b/src/main/java/org/cloudburstmc/proxypass/ProxyPass.java @@ -12,9 +12,11 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import dev.kastle.netty.channel.nethernet.NetherNetChannelFactory; +import dev.kastle.netty.channel.nethernet.config.NetherChannelOption; import dev.kastle.netty.channel.nethernet.config.NetherNetAddress; import dev.kastle.netty.channel.nethernet.signaling.NetherNetClientSignaling; import dev.kastle.netty.channel.nethernet.signaling.NetherNetDiscoverySignaling; +import dev.kastle.netty.channel.nethernet.signaling.NetherNetXboxRpcSignaling; import dev.kastle.netty.channel.nethernet.signaling.NetherNetServerSignaling; import dev.kastle.netty.channel.nethernet.signaling.NetherNetXboxSignaling; import dev.kastle.webrtc.PeerConnectionFactory; @@ -160,6 +162,7 @@ public void writeObjectFieldValueSeparator(JsonGenerator generator) throws IOExc private SocketAddress targetAddress; private InetSocketAddress proxyAddress; private Configuration configuration; + private ServerAddress serverAddress; private Path baseDir; private Path sessionsDir; private Path dataDir; @@ -230,8 +233,8 @@ public void boot() throws IOException { } } - ServerAddress serverAddress = new ServerAddress(configuration.getDestination(), account, client); - targetAddress = serverAddress.getAddress(); + this.serverAddress = new ServerAddress(configuration.getDestination(), account, client); + this.targetAddress = serverAddress.getAddress(); Object object = this.loadGzipNBT("block_palette.nbt"); @@ -360,9 +363,15 @@ public void newClient(SocketAddress socketAddress, Consumer NetherNetClientSignaling signaling; if (socketAddress instanceof NetherNetAddress) { - signaling = new NetherNetXboxSignaling( - account.authManager().getMinecraftSession().getCached().getAuthorizationHeader() - ); + if (this.serverAddress.getNetworkProtocol().equalsIgnoreCase("NETHERNET_JSONRPC")) { + signaling = new NetherNetXboxRpcSignaling( + account.authManager().getMinecraftSession().getCached().getAuthorizationHeader() + ); + } else { + signaling = new NetherNetXboxSignaling( + account.authManager().getMinecraftSession().getCached().getAuthorizationHeader() + ); + } } else { signaling = new NetherNetDiscoverySignaling(); } @@ -398,6 +407,7 @@ protected void initSession(ProxyClientSession session) { }); } else { bootstrap + .option(NetherChannelOption.NETHER_CLIENT_HANDSHAKE_TIMEOUT_MS, 6000) .handler(new NetherNetBedrockChannelInitializer() { @Override protected ProxyClientSession createSession0(BedrockPeer peer, int subClientId) { diff --git a/src/main/java/org/cloudburstmc/proxypass/network/bedrock/session/ServerAddress.java b/src/main/java/org/cloudburstmc/proxypass/network/bedrock/session/ServerAddress.java index dafcb4e..458f852 100644 --- a/src/main/java/org/cloudburstmc/proxypass/network/bedrock/session/ServerAddress.java +++ b/src/main/java/org/cloudburstmc/proxypass/network/bedrock/session/ServerAddress.java @@ -30,6 +30,8 @@ public class ServerAddress { @Getter private SocketAddress address; + @Getter + private String networkProtocol; private String host; private int port; @@ -125,19 +127,19 @@ public ServerAddress(Destination destination, Account account, HttpClient client throw new IllegalArgumentException("Realms API provided no server address!"); } + this.networkProtocol = protocol; + if (protocol.equalsIgnoreCase("NETHERNET")) { this.address = new NetherNetAddress(fullAddress); return; - } else { - String[] parts = fullAddress.split(":"); - this.host = parts[0]; - if (parts.length > 1) { - this.port = Integer.parseInt(parts[1]); - } else { - this.port = 19132; - } - log.info("Resolved Realm '{}' to {}:{}", realmName, this.host, this.port); } + + if (protocol.equalsIgnoreCase("NETHERNET_JSONRPC")) { + this.address = new NetherNetAddress(fullAddress); + return; + } + + throw new IllegalArgumentException("Unsupported Realms network protocol: " + protocol); } else { log.warn("Could not find Realm with name: {}", realmName); } @@ -181,6 +183,7 @@ public ServerAddress(Destination destination, Account account, HttpClient client } this.host = experience.getResult().getIpV4Address(); this.port = experience.getResult().getPort(); + this.networkProtocol = experience.getResult().getNetworkProtocol(); log.info("Resolved experience ID {} to {}:{}", experienceId, this.host, this.port); } catch (IOException e) { log.error("Failed to fetch experience", e); From f83811ed3286419376869ad6b2cf69f6c29b3a74 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 16 Feb 2026 18:39:33 -0800 Subject: [PATCH 2/3] Update network sub Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- network | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/network b/network index 4d75e6b..cc730f5 160000 --- a/network +++ b/network @@ -1 +1 @@ -Subproject commit 4d75e6b75c9a2df309ea50cee6a3db8d29aa4760 +Subproject commit cc730f548eea3923da443d50b713174e1ac53035 From c29acbdbedac1dccca8195817a7e5e340e6e31f0 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 21 Feb 2026 17:20:56 -0800 Subject: [PATCH 3/3] Update network sub Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- network | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/network b/network index cc730f5..9f3c0b7 160000 --- a/network +++ b/network @@ -1 +1 @@ -Subproject commit cc730f548eea3923da443d50b713174e1ac53035 +Subproject commit 9f3c0b7e72fb6f8934a7d36a518c74afe02c8a6d