-
Notifications
You must be signed in to change notification settings - Fork 0
Cross Version Support
Not Enough Spectators runs a small backend Netty server inside the host client and replays the host's captured 26.2 packets to spectators. This fork embeds the ViaVersion stack (ViaVersion + ViaBackwards + ViaRewind) and, on every spectator connection, splices Via's server-side translation handlers into that pipeline — exactly like a backend Minecraft server with ViaVersion installed.
- Host/server protocol is pinned to 26.2.
- When a spectator connects, Via detects their version from the handshake and translates their protocol to/from 26.2 in both directions.
- Spectators need no Via mod of their own — just a vanilla client.
Check it live with /nes via, which shows whether Via is active and the version of each
connected spectator.
Same-version (26.2) spectating works. Older-version spectating is currently blocked upstream, not by this mod:
A spectator on, say, 1.21.8 successfully completes the handshake, login, and the entire configuration phase — Via attaches and translates all the way through. It then fails at the final step, when the old client tries to build its registries from the received data:
Failed to load registries due to errors
... Failed to parse local data (banner_pattern, chat_type, damage_type, dimension_type,
enchantment, worldgen/biome, ...)
... Registry must be non-empty: minecraft:cat_variant, ...
The cause is that ViaBackwards has not yet finished converting 26.2's registry data down to older
versions. 26.2 added entirely new registries (sulfur_cube_archetype, dialog,
wolf_sound_variant, test_environment, …) that older clients don't understand, and ViaBackwards
must learn to rewrite/strip each one. Version 26.2 is very new, and that conversion work lags the
initial protocol support.
This is the same ViaBackwards code every setup uses (ViaProxy, ViaFabric, etc.), so no alternative architecture works around it — it is genuinely upstream.
As soon as ViaBackwards ships 26.2 down-conversion. This mod's dependency tracks the ViaBackwards snapshot, so it will start working with just a rebuild — no code changes:
./gradlew build --refresh-dependenciesUntil then, a spectator on a version very close to 26.2 (few registry differences) has the best chance of working.