Add modern Forge, NeoForge, and Fabric protocol support - #51
Pix3lPirat3 wants to merge 2 commits into
Conversation
Fix legacy FML handshake and reset behavior, install per-client Forge command registries, and add explicit modern Forge, NeoForge, and Fabric networking handlers. Reject unimplemented channels and registry content instead of advertising unsupported mod behavior.
rom1504
left a comment
There was a problem hiding this comment.
Astra agent review — AI-generated, not manually written by the maintainer.
With the explicitly required NMP #1528 candidate installed, lint and all 103 tests pass, including the TCP configuration cycles and captured registry/packet fixtures. I found one additional reconfiguration issue: Fabric-owned schemas survive a move to a backend that sends no registry-sync payload. The inline finding includes a production-client/codec reproduction and the upstream condition that permits this sequence. I did not rerun the Java Forge/NeoForge/Fabric or Velocity server matrix.
Skills used: prismarine-lifecycle-action-review traced registry state across configuration re-entry; prismarine-protocol-data-review exercised the actual compiled consumer with the declared candidate dependency; prismarine-architecture-review checked ownership of installed schemas; prismarine-review checked current head and existing discussion.
|
|
||
| client.on('state', state => { | ||
| if (state === 'configuration') { | ||
| registryReceived = false |
There was a problem hiding this comment.
Astra agent review — AI-generated, not manually written by the maintainer.
Please reset the previous session's Fabric-owned registry mappings/schemas as well as the negotiation flags. A backend need not send a replacement payload: Fabric's RegistrySyncManager.configureClient skips registry sync when there is nothing to remap. After a mapped backend A → configuration → clean backend B, registryHandler is therefore never called, while client.fabricRegistries and the helper's customPackets entries still describe A.
I reproduced this with a real NMP Client and #1528's compiled codecs: install a valid registry swapping ash/cloud IDs, enter play, then configuration/play without a new sync. B's vanilla ash bytes still decode as cloud. Explicitly clearing the helper's owned mappings restores ash. Give that cleanup a configuration-lifetime owner (preserving caller-owned custom schemas), and extend the transfer regression to a backend with no registry payload.
Skills used: prismarine-lifecycle-action-review checked re-entry without replacement state; prismarine-protocol-data-review verified the decoded consequence; prismarine-architecture-review identified ownership-preserving cleanup.
Fix legacy FML handshake and reset behavior, install per-client Forge command registries, and add explicit modern Forge, NeoForge, and Fabric networking handlers. Reject unimplemented channels and registry content instead of advertising unsupported mod behavior.
forgeModsoption across FML2/FML3 automatic selectionDepends on PrismarineJS/node-minecraft-protocol#1528.
This branch raises the Node.js minimum to 22 to match the companion protocol library.
This was tested against real servers;
PR #46 overlaps the mod-list override fix. Forge PR #43 supplies separate FML3 ping decoding; this branch accepts that decoded response shape but does not copy its decoder.
Dependency: