Skip to content

Temp: 26.3-rc-1 protocol support - #880

Merged
electronicboy merged 1 commit into
masterfrom
temp-26-3-rc-1
Sep 11, 2026
Merged

Temp: 26.3-rc-1 protocol support#880
electronicboy merged 1 commit into
masterfrom
temp-26-3-rc-1

Conversation

@electronicboy

Copy link
Copy Markdown
Member

Moves the temporary 26.3 protocol patch from pre-3 to rc-1.

MINECRAFT_26_3 becomes 1073742160 (0x40000000 | 336), following upstream's convention of bumping the existing constant's value through a pre-release cycle rather than adding a new one, so only one snapshot version is live at a time.

rc-1 is a protocol number bump and nothing else

Diffed the decompiled sources for 26.3-pre-3 against 26.3-rc-1:

  • SNAPSHOT_NETWORK_PROTOCOL_VERSION 335 → 336, WORLD_VERSION 5019 → 5020
  • nothing under src/main/java/net/minecraft/network/ changed — no packet added, removed, renumbered, or re-payloaded
  • GameProtocols.java / ConfigurationProtocols.java — untouched
  • ArgumentTypeInfos.java / SuggestionProviders.java — untouched, so neither of the registries that broke on the 26.2 → 26.3 jump grew this time

The rest of the release diff is gameplay and client internals (LivingEntity, Ravager, ChunkMap, LevelExtractor, loot predicates) plus version.json.

So the only code hunk in the regenerated patch is the constant:

-    public static final int MINECRAFT_26_3 = 1073742159;
+    public static final int MINECRAFT_26_3 = 1073742160;

This supersedes the pre-3 patch, it does not sit beside it

The commit is a single-file rename (R096): 0069-Temp-26.3-pre-3-protocol-support.patch0069-Temp-26.3-rc-1-protocol-support.patch. The number stays 0069 so it remains after #877's 0067/0068.

Worth flagging at merge time: #878 was the same shape — a rename of this same temp patch — and because its base had drifted it merged as an add, leaving the superseded file behind and producing the duplicate numbering that #879 had to fix. This branch is currently exactly one commit on top of master with no drift. If anything lands before it merges, regenerate rather than letting the rename be auto-resolved, and afterwards confirm only one temp patch survived:

git ls-tree --name-only origin/master BungeeCord-Patches/ | grep Temp

Testing

Patch applies cleanly from scratch; full build and test suite pass. Smoke tested against a live proxy driven at the protocol level with fake rc-1 backends:

  • status ping at 1073742160 → accepted, 26.3.x advertised
  • status ping at 1073742159 (pre-3) → correctly rejected, confirming the in-place constant bump
  • full login plus a server switch → Login 0x32, StartConfiguration 0x78, second Login 0x32, Respawn 0x54, all decoding at the expected ids with previousGameMode present and intact (2 and 3) and every parsed packet consuming its payload exactly
  • no exceptions or decode errors in the proxy log

Packet ids needed no changes, which is the expected result given the empty network/ diff.

Adds MINECRAFT_26_3 behind the existing net.md_5.bungee.protocol.snapshot
flag, using the snapshot protocol number (0x40000000 | 336) as upstream does
during a pre-release cycle, and remaps the packets whose ids moved.

Relative to 26.2, 26.3 inserts post_effects into both the configuration and
game clientbound tables, swing_animation into the game clientbound table, and
add_transient_block at game clientbound 0x25. That last one sits low enough to
shift almost the whole table, so 25 of the game clientbound packets we register
move, on top of the 7 configuration ones. Serverbound is unaffected for us, as
the punch/swing shuffle sits in the 0x2E-0x3F window we do not register in, and
CustomClickAction at 0x44 is above it. Every id was checked against the
registration order in GameProtocols and ConfigurationProtocols rather than the
protocol summary.

CommonPlayerSpawnInfo, which Login and Respawn both embed, is the one packet
payload change. gameType moved from a byte to a var int, and previousGameType
from a byte with a -1 sentinel to vanilla's OPTIONAL_VAR_INT, where zero means
absent and any other value is the id plus one. Both fields are only ever
round-tripped by the proxy, so no call site needs to change. Everything else
we parse is a FriendlyByteBuf to StreamCodec refactor that leaves the wire
format identical, including PlayerListItemUpdate, whose new Action id is
enum-internal and not serialised.

The command argument type registry also grew: context_float_provider,
context_int_provider and slot_source after loot_modifier, then feature and
swing_animation after dialog, taking it from 57 to 62 entries and shifting
dialog and uuid. All five are singleton argument types with no payload, so
IDS_26_3 adds them as VOID. Without this, decoding Commands from a 26.3
backend throws ArrayIndexOutOfBoundsException. 26.3 likewise adds a
post_effects suggestion provider; those are keyed by name rather than index
and unknown names are rejected outright, so it is registered as a dummy for
every version.

rc-1 is a protocol number bump only: nothing under network/ changed between
pre-3 and rc-1, and the argument type and suggestion provider registries are
untouched, so only the constant moves.

This is temporary and should be dropped once upstream adds 26.3 support.
@electronicboy
electronicboy merged commit 67a1970 into master Sep 11, 2026
2 checks passed
@Janmm14

Janmm14 commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

so much text for a 1 line change, what a waste of gpu

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants