Repository navigation
Merge upstream ViaVersion/ViaProxy - #1
Conversation
…#754) Bumps [com.google.guava:guava](https://github.com/google/guava) from 33.6.0-jre to 33.7.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-version: 33.7.1-jre dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 2.17.0 to 2.17.1. - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](crowdin/github-action@c7af9bc...8f01d54) --- updated-dependencies: - dependency-name: crowdin/github-action dependency-version: 2.17.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.7.0 to 9.7.1. - [Release notes](https://github.com/gradle/gradle/releases) - [Commits](gradle/gradle@v9.7.0...v9.7.1) --- updated-dependencies: - dependency-name: gradle-wrapper dependency-version: 9.7.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 5.7.0 to 6.0.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@b6effb0...dd06d9c) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 2.17.1 to 3.0.0. - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](crowdin/github-action@8f01d54...e4a6c13) --- updated-dependencies: - dependency-name: crowdin/github-action dependency-version: 3.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.jline:jansi](https://github.com/jline/jline3) from 4.3.1 to 4.4.0. - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@4.3.1...4.4.0) --- updated-dependencies: - dependency-name: org.jline:jansi dependency-version: 4.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](crowdin/github-action@e4a6c13...71fdb88) --- updated-dependencies: - dependency-name: crowdin/github-action dependency-version: 3.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](docker/setup-qemu-action@96fe6ef...1f40c72) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-version: 4.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.jline:jansi](https://github.com/jline/jline3) from 4.4.0 to 4.4.1. - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@4.4.0...4.4.1) --- updated-dependencies: - dependency-name: org.jline:jansi dependency-version: 4.4.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.jline:jansi](https://github.com/jline/jline3) from 4.4.1 to 4.4.2. - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@4.4.1...4.4.2) --- updated-dependencies: - dependency-name: org.jline:jansi dependency-version: 4.4.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 3.0.1 to 3.0.2. - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](crowdin/github-action@71fdb88...0d5670f) --- updated-dependencies: - dependency-name: crowdin/github-action dependency-version: 3.0.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…Version#767) Bumps [dev.kastle.netty:netty-transport-raknet](https://github.com/Kas-tle/NetworkCompatible) from 1.7.3 to 1.7.4. - [Release notes](https://github.com/Kas-tle/NetworkCompatible/releases) - [Commits](Kas-tle/NetworkCompatible@1.7.3...1.7.4) --- updated-dependencies: - dependency-name: dev.kastle.netty:netty-transport-raknet dependency-version: 1.7.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.jline:jansi](https://github.com/jline/jline3) from 4.4.2 to 4.4.3. - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@4.4.2...4.4.3) --- updated-dependencies: - dependency-name: org.jline:jansi dependency-version: 4.4.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…iaVersion#773) Bumps [io.netty:netty-codec-haproxy](https://github.com/netty/netty) from 4.2.17.Final to 4.2.18.Final. - [Release notes](https://github.com/netty/netty/releases) - [Commits](netty/netty@netty-4.2.17.Final...netty-4.2.18.Final) --- updated-dependencies: - dependency-name: io.netty:netty-codec-haproxy dependency-version: 4.2.18.Final dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 6.0.0 to 6.0.1. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@dd06d9c...de7274f) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 6.0.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 4.3.0 to 4.4.0. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](docker/setup-qemu-action@1f40c72...9901266) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-version: 4.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 4.3.0 to 4.4.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](docker/setup-buildx-action@37fe631...594f3bf) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-version: 4.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 7.3.0 to 7.4.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](docker/build-push-action@53b7df9...c3c9e26) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-version: 7.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.jline:jansi](https://github.com/jline/jline3) from 4.4.3 to 4.4.5. - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@4.4.3...4.4.5) --- updated-dependencies: - dependency-name: org.jline:jansi dependency-version: 4.4.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 3.0.2 to 3.1.0. - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](crowdin/github-action@0d5670f...9af557d) --- updated-dependencies: - dependency-name: crowdin/github-action dependency-version: 3.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Bumps [crowdin/github-action](https://github.com/crowdin/github-action) from 3.1.0 to 3.2.0. - [Release notes](https://github.com/crowdin/github-action/releases) - [Commits](crowdin/github-action@9af557d...df474cd) --- updated-dependencies: - dependency-name: crowdin/github-action dependency-version: 3.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Unresolved configuration compatibility, run-directory, and Bedrock status-handling issues remain.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (5)
What changed in this PR
Merges upstream ViaProxy changes while preserving fork-specific patches.
Changes:
- Migrates NetherNet transport and address handling.
- Adds asynchronous Bedrock status and protocol detection.
- Updates dependencies, workflows, documentation, and translations.
| File | Summary |
|---|---|
src/main/resources/assets/viaproxy/language/th_TH.properties |
Adds Thai localization. |
src/main/resources/assets/viaproxy/language/nl_NL.properties |
Adds Dutch localization. |
src/main/java/net/raphimc/viaproxy/util/StatusPingUtil.java |
Adds asynchronous ping utilities. |
src/main/java/net/raphimc/viaproxy/util/ProtocolVersionDetector.java |
Removes the replaced detector. |
src/main/java/net/raphimc/viaproxy/util/AddressUtil.java |
Updates NetherNet address parsing and serialization. |
src/main/java/net/raphimc/viaproxy/util/address/NetherNetXboxJsonRpcAddress.java |
Adds Xbox JSON-RPC address support. |
src/main/java/net/raphimc/viaproxy/util/address/NetherNetXboxAddress.java |
Adds Xbox NetherNet address support. |
src/main/java/net/raphimc/viaproxy/util/address/NetherNetLanAddress.java |
Adds LAN NetherNet address support. |
src/main/java/net/raphimc/viaproxy/util/address/NetherNetHttpAddress.java |
Adds HTTP NetherNet address support. |
src/main/java/net/raphimc/viaproxy/util/address/NetherNetAddress.java |
Defines NetherNet address types. |
src/main/java/net/raphimc/viaproxy/ui/impl/RealmsTab.java |
Updates Realms joining behavior. |
src/main/java/net/raphimc/viaproxy/proxy/session/ProxyConnection.java |
Updates Gson usage. |
src/main/java/net/raphimc/viaproxy/proxy/session/BedrockProxyConnection.java |
Migrates Bedrock transport support. |
src/main/java/net/raphimc/viaproxy/proxy/proxy2server/Proxy2ServerChannelInitializer.java |
Updates Bedrock pipeline setup. |
src/main/java/net/raphimc/viaproxy/proxy/packethandler/LoginPacketHandler.java |
Updates authentication accessors. |
src/main/java/net/raphimc/viaproxy/proxy/external_interface/ExternalInterface.java |
Updates token retrieval. |
src/main/java/net/raphimc/viaproxy/proxy/client2proxy/Client2ProxyHandler.java |
Adds Bedrock status handling and protocol detection. |
src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyClassicMPPassProvider.java |
Updates provider naming. |
src/main/java/net/raphimc/viaproxy/protocoltranslator/ProtocolTranslator.java |
Adds configurable platform initialization. |
src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyPlatformLoader.java |
Updates provider registration. |
src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyMappingDataLoader.java |
Validates protocol mappings. |
README.md |
Updates supported versions. |
gradle/wrapper/gradle-wrapper.properties |
Updates Gradle. |
gradle.properties |
Updates the project version. |
buildSrc/src/main/groovy/base.application-conventions.gradle |
Configures the application run directory. |
build.gradle |
Updates repositories and dependencies. |
.github/workflows/crowdin-sync.yml |
Updates the Crowdin action. |
.github/workflows/build.yml |
Updates Java setup. |
.github/workflows/build-docker.yml |
Updates Docker build actions. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| } else if (serverAddress.startsWith("nethernet://")) { // NetherNet HTTP Address | ||
| final HostAndPort hostAndPort = HostAndPort.fromString(serverAddress.substring(serverAddress.indexOf("://") + 3)); | ||
| if (hostAndPort.getHost().isBlank()) { | ||
| throw new IllegalArgumentException("Server address cannot be blank"); | ||
| } |
| final CompletableFuture<? extends IPingResponse> pingFuture; | ||
| if (serverAddress instanceof NetherNetHttpAddress) { | ||
| pingFuture = StatusPingUtil.pingBedrockNetherNetHttp(serverAddress); | ||
| } else { | ||
| pingFuture = StatusPingUtil.pingBedrockRakNet(serverAddress); |
| pingFuture.thenAccept(response -> { | ||
| final MCPingResponse javaResponse = StatusPingUtil.convertToJavaPingResponse(response); | ||
| javaResponse.version.protocol = clientVersion.getOriginalVersion(); | ||
| this.proxyConnection.getC2P().writeAndFlush(new S2CStatusResponsePacket(new Gson().toJson(javaResponse))).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); |
| final MCPingResponse javaResponse = StatusPingUtil.convertToJavaPingResponse(response); | ||
| javaResponse.version.protocol = clientVersion.getOriginalVersion(); | ||
| this.proxyConnection.getC2P().writeAndFlush(new S2CStatusResponsePacket(new Gson().toJson(javaResponse))).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); | ||
| this.proxyConnection.getC2P().writeAndFlush(new S2CStatusPongResponsePacket(0)).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); |
| tab.realms.unsupported_account=Niet ondersteund account geselecteerd | ||
| tab.realms.refreshing_account=Account vernieuwen... | ||
| tab.realms.availability_check=Beschikbaarheid controleren... | ||
| tab.realms.unavailable=Uw VIaProxy is verouderd en niet compatibel met Minecraft Realms. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5d6d0345fc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| } else if (serverAddress.startsWith("nethernet://")) { // NetherNet HTTP Address | ||
| final HostAndPort hostAndPort = HostAndPort.fromString(serverAddress.substring(serverAddress.indexOf("://") + 3)); | ||
| if (hostAndPort.getHost().isBlank()) { | ||
| throw new IllegalArgumentException("Server address cannot be blank"); | ||
| } | ||
| } else if (serverAddress.startsWith("nethernet://")) { // NetherNet Address | ||
| final String addressPart = serverAddress.substring(serverAddress.indexOf("://") + 3); | ||
| if (NETHERNET_NETWORK_ID_PATTERN.matcher(addressPart).matches()) { | ||
| return new NetherNetAddress(addressPart); | ||
| } else { | ||
| final HostAndPort hostAndPort = HostAndPort.fromString(addressPart); | ||
| if (hostAndPort.getHost().isBlank()) { | ||
| throw new IllegalArgumentException("Server address cannot be blank"); | ||
| } | ||
| return new NetherNetInetSocketAddress(hostAndPort.getHost(), hostAndPort.getPortOrDefault(ProtocolConstants.BEDROCK_NETHERNET_DEFAULT_PORT)); | ||
| return new NetherNetHttpAddress(hostAndPort.getHost(), hostAndPort.getPortOrDefault(ServerAddress.DEFAULT_BEDROCK_PORT)); |
There was a problem hiding this comment.
Preserve legacy NetherNet address schemes
Existing configurations were serialized as nethernet://<network-id> for Xbox signaling, nethernet://host:port for LAN discovery, or nethernet-rpc://<network-id> for JSON-RPC. After an upgrade, this branch silently reinterprets the first two as HTTP signaling while the last falls through to ordinary HostAndPort parsing and is invalid, so previously working NetherNet targets can no longer connect or are reset during config loading. Accept and migrate the legacy forms before applying the new scheme meanings.
Useful? React with 👍 / 👎.
| if (serverAddress instanceof NetherNetHttpAddress) { | ||
| pingFuture = StatusPingUtil.pingBedrockNetherNetHttp(serverAddress); | ||
| } else { | ||
| pingFuture = StatusPingUtil.pingBedrockRakNet(serverAddress); |
There was a problem hiding this comment.
Route non-HTTP NetherNet targets away from RakNet ping
When the configured Bedrock target is NetherNetLanAddress, NetherNetXboxAddress, or NetherNetXboxJsonRpcAddress and the custom MOTD is blank, this fallback passes it to the RakNet UDP pinger even though these addresses require NetherNet signaling; Xbox addresses are not even internet socket addresses. Consequently server-list pings for Bedrock Realms and LAN NetherNet targets fail instead of returning a status response.
Useful? React with 👍 / 👎.
| } else if (address instanceof NetherNetXboxJsonRpcAddress netherNetAddress) { | ||
| return "nethernet-xbox-rpc://" + netherNetAddress; |
There was a problem hiding this comment.
Serialize JSON-RPC addresses with the accepted prefix
parse accepts nethernet-xbox-json-rpc://, but this serializer emits nethernet-xbox-rpc://. Since target addresses are serialized through this method whenever the configuration is saved, a correctly entered JSON-RPC Realm address becomes unparsable on the next startup and can be reset as an invalid option.
Useful? React with 👍 / 👎.
| this.proxyConnection.getC2P().writeAndFlush(new S2CStatusResponsePacket(new Gson().toJson(javaResponse))).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); | ||
| this.proxyConnection.getC2P().writeAndFlush(new S2CStatusPongResponsePacket(0)).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); |
There was a problem hiding this comment.
Echo the client's status-ping payload
For every Bedrock status request with a blank custom MOTD, this sends a Pong containing 0 without reading the client's Ping packet. The Java status protocol requires the response to echo the client's long payload, which is normally a nonzero timestamp; status clients that validate the echo or derive latency from it can reject this response or report an invalid latency even though the backend ping succeeded.
Useful? React with 👍 / 👎.
| tasks.named("run", JavaExec) { | ||
| workingDir = file("${projectDir}/run") |
There was a problem hiding this comment.
Create the run working directory before launching
In a clean checkout, /run is ignored and not tracked, and no build task creates it. Configuring the run task to use this nonexistent directory causes process startup to fail before ViaProxy can create any files, so ./gradlew run only works if the developer manually creates run/; create the directory as part of the task before execution.
Useful? React with 👍 / 👎.
| includeInJar("org.cloudburstmc.netty:netty-transport-nethernet:2.0.0.CR4-20260922.202324-5") { | ||
| exclude group: "io.netty" | ||
| exclude group: "org.bitbucket.b_c", module: "jose4j" | ||
| } | ||
| ["windows-x86_64", "windows-aarch64", "linux-x86_64", "linux-aarch64", "macos-x86_64", "macos-aarch64"].each { | ||
| includeInJar "dev.kastle.webrtc:webrtc-java:1.0.3:$it" | ||
| exclude group: "org.bouncycastle" | ||
| exclude group: "dev.opencollab:libdatachannel-java" |
There was a problem hiding this comment.
Exclude the libdatachannel module with valid coordinates
Gradle's exclude map treats group as the group ID only, so group: "dev.opencollab:libdatachannel-java" does not match the transitive module whose group is dev.opencollab. The original libdatachannel artifact therefore remains in includeInJar alongside the explicitly selected libdatachannel-java-arch-detect replacement, which can package conflicting classes/native resources into the fat jar; specify group: "dev.opencollab", module: "libdatachannel-java".
Useful? React with 👍 / 👎.



Merge the latest
ViaVersion/ViaProxy:mainchanges intofork-patcheswhile preserving the fork-specific patches.