archive.org Wayback was network-blocked; pivoted to live GitHub. Key fix: FML host token is \0FML\0 (not \0FML2/3\0 — those are FMLNETVERSION ints on the fml:handshake channel); modern Forge uses \0FORGE/\0FORGEn. Confirmed BungeeGuard backend token check (lucko source), 4 cmd suggestion providers, 26.2 interval_select worldgen-only, corrected 1.14 villager metadata layout. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
22 KiB
Java Edition 26.x — Protocol 775 (26.1) / 776 (26.2)
| Version | Protocol | Data Version | Release Date |
|---|---|---|---|
| 26.1 | 775 | 4786 | 2026-03-24 |
| 26.1.1 | 775 | 4788 | 2026-04-01 |
| 26.1.2 | 775 | 4790 | 2026-04-09 |
| 26.2 | 776 | 4903 | 2026-06-16 |
Sources: minecraft.wiki/w/Java_Edition_26.1 (fetched 2026-06-19), minecraft.wiki/w/Java_Edition_26.1.1 (fetched 2026-06-19), minecraft.wiki/w/Java_Edition_26.1.2 (fetched 2026-06-19), minecraft.wiki/w/Java_Edition_26.2 (fetched 2026-06-19), minecraft-data protocolVersions.json (/tmp/mcproto-refs/minecraft-data/data/pc/common/protocolVersions.json), ViaVersion ProtocolVersion.java:96 (/tmp/mcproto-refs/ViaVersion).
The versioning-scheme rename: 1.X.Y → YY.N.hotfix
What changed
Starting with 26.1 (released 2026-03-24), Mojang retired the 1.X.Y naming convention it had used since Java Edition's early release era and replaced it with a calendar-based year.drop.hotfix format.
"This is the first Java Edition release version to use the new 'year.drop.hotfix' version format announced in December 2025." — minecraft.wiki/w/Java_Edition_26.1 (fetched 2026-06-19)
What the fields mean:
| Field | Meaning | Example |
|---|---|---|
YY |
Two-digit year | 26 = 2026 |
N |
Drop number within that year (first, second, …) | 1 = first 2026 drop, 2 = second |
.hotfix |
Optional patch suffix; shares the same protocol number as the base drop | 26.1.1, 26.1.2 |
The old 1.X.Y scheme was a pseudo-semver inherited from pre-1.0 Minecraft versioning and carried no calendar meaning. The new format makes the release cadence legible at a glance and aligns Java Edition with Mojang's publicly communicated "drops" model (multiple major content updates per year instead of one big annual release).
What did NOT change
- Protocol wire format: the protocol version number continues the existing integer sequence (
773 = 1.21.9,774 = 1.21.11,775 = 26.1,776 = 26.2). The rename is purely in the human-readable game version string; the handshake's VarInt protocol field is unaffected. - Snapshot scheme: pre-release builds still use the
0x40000000high-bit convention (0x40000000 + N). 26.1's snapshot range ran0x4000011F(snapshot-1) through0x4000012F(rc-3); 26.2's ran0x40000134(snapshot-2) through0x40000142(rc-2). Source: minecraft-dataprotocolVersions.json. - Snapshot naming convention: the
YYwNNaweek-snapshot style is still used —26w14aappears in minecraft-data between 26.1.2 and the first 26.2 snapshot (dataVersion 5000, protocol0x40000131), consistent with how April-type or interstitial snapshots have always been named.
26.1 — Protocol 775 (vs 1.21.11 / protocol 774)
Release name: "Tiny Takeover" Development timeline: 11 snapshots, 3 pre-releases, 3 release candidates. Pack formats: Resource pack 84.0, Data pack 101.1. Minimum Java: Java SE 25 (LTS); first version to require Java 25. Obfuscation: First release without an obfuscated jar variant.
ViaVersion package: v1_21_11to26_1/ at /tmp/mcproto-refs/ViaVersion/common/src/main/java/com/viaversion/viaversion/protocols/v1_21_11to26_1/.
Headline gameplay changes (mc-wiki, fetched 2026-06-19)
- Golden Dandelion: new flower (crafted from 1 dandelion + 8 gold nuggets) that pauses/resumes baby mob aging on right-click.
- Baby mob overhaul: updated models, textures, and sounds for 70+ baby mobs — cats, chickens, cows, horses, wolves, pigs, sheep, rabbits, axolotls, squids, foxes, goats, camels, armadillos, polar bears, llamas, zombies, husks, drowned, piglins, villagers, zombie villagers. Dedicated baby armor textures; saddles and armor no longer rendered on baby pigs, camels, wolves.
- Craftable name tags: paper + any nugget type (previously uncraftable).
- Note block trumpet: new instrument on copper blocks; sound varies with oxidation level.
/swingcommand: animate entity arm movements./timeredesign: now references world clocks (dimension-specific timekeeping registry).- Villager trades data-driven:
villager_tradeandtrade_setdatapack types. - Stonecutter: deepslate and stone craftable directly into variants.
- Requires Java SE 25: first such requirement.
Protocol changes in 775
Sources: ViaVersion ClientboundPackets26_1.java, ServerboundPackets26_1.java, Protocol1_21_11To26_1.java, ChunkSectionType26_1.java, EntityDataTypes26_1.java (all under /tmp/mcproto-refs/ViaVersion/...).
New clientbound packets (play state)
Three packets present in 26.1 but absent from 1.21.11:
| ID | Name | Purpose |
|---|---|---|
0x27 |
GAME_RULE_VALUES |
Sends current game rule values to the client (new in 26.1; replaces or supplements the /gamerule response flow) |
0x32 |
LOW_DISK_SPACE_WARNING |
Server notifies client of low disk space condition |
Note:
CLEAR_DIALOG(0x8B) andSHOW_DIALOG(0x8C) andTRACKED_WAYPOINT(0x8A) already existed in 1.21.11 at0x89,0x8A,0x88respectively. They shifted by two positions becauseGAME_RULE_VALUESandLOW_DISK_SPACE_WARNINGwere inserted earlier in the enum. All IDs shifted accordingly fromGAME_RULE_VALUES's position onward.
PLAYER_ROTATION (0x49) similarly existed in 1.21.11 at 0x47; no new packet, just renumbered by the two insertions above it.
ViaVersion cancels GAME_RULE_VALUES when translating 26.1→1.21.11 (i.e. it is dropped for older clients); LOW_DISK_SPACE_WARNING is likewise unhandled (implicitly cancelled). Source: Protocol1_21_11To26_1.java — only SET_TIME, UPDATE_TAGS, and LEVEL_CHUNK_WITH_LIGHT are explicitly remapped.
New serverbound packets (play state)
Four packets present in 26.1 but absent from 1.21.11 / 1.21.6:
| ID | Name | ViaVersion translation |
|---|---|---|
0x01 |
ATTACK |
Split from old INTERACT; maps to INTERACT with action=1 (Attack) |
0x39 |
SET_GAME_RULE |
Client requests a game rule change; ViaVersion cancels this packet (action==Request game rule values case) |
0x3E |
SPECTATE_ENTITY |
Split from INTERACT; maps to INTERACT with action=1 (Attack) on the target entity |
0x44 |
CUSTOM_CLICK_ACTION |
Custom UI click action (existed in 1.21.6 at 0x41; renumbered by the three insertions above) |
Source: EntityPacketRewriter26_1.java:registerPackets() + ServerboundPackets26_1.java.
INTERACT refactor (significant): In 26.1 the monolithic INTERACT packet (which carried action=0/interact, 1/attack, 2/interact-at) is split. ATTACK carries the attack action; SPECTATE_ENTITY carries spectate. The old INTERACT (0x1A) remains for right-click interact. ViaVersion synthesizes the old format from the new: for ATTACK and SPECTATE_ENTITY it writes entity ID + action=1 (Attack) + sneaking state. Sneaking state is now tracked from PLAYER_INPUT flags (bit 5) rather than from INTERACT's secondaryAction field; ViaVersion stores this in PlayerSneaking per-connection storage. Source: EntityPacketRewriter26_1.java.
SET_TIME restructured (play state, 0x71 → new multi-clock format)
Old format (1.21.11):
Long game_time total world age ticks
Long day_time current day time (negative = paused)
Boolean tick_day_time whether time advances
New format (26.1):
Long game_time total world age ticks
VarInt clock_count number of clock entries (typically 1)
for each clock:
VarInt clock_id registry index into world_clock dimension
VarLong total_ticks current tick count for this clock
Float partial_tick sub-tick interpolation
Float tick_rate 0.0 = paused, 1.0 = normal
ViaVersion translation: writes clock_count=1, clock_id=0 (overworld), then maps the old day_time to total_ticks and tick_day_time to tick_rate (0F or 1F). Source: Protocol1_21_11To26_1.java:registerClientbound(SET_TIME).
The restructuring is driven by the new world clock registry (world_clock) that allows per-dimension custom time tracking. ViaVersion injects world_clock registry data with entries for overworld and the_end during FINISH_CONFIGURATION. Source: Protocol1_21_11To26_1.java:appendClientbound(FINISH_CONFIGURATION).
Chunk section format change (LEVEL_CHUNK_WITH_LIGHT)
26.1 adds a fluid count short to the chunk section header:
Old section header (1.21.5–1.21.11):
Short non_air_blocks_count
[block palette]
[biome palette]
New section header (26.1):
Short non_air_blocks_count
Short fluid_count ← NEW
[block palette]
[biome palette]
ViaVersion computes fluid_count from the block palette during downgrade (scanning each block ID against a set of known fluid block-states). Source: ChunkSectionType26_1.java:read/write, BlockItemPacketRewriter26_1.java:replaceClientbound(LEVEL_CHUNK_WITH_LIGHT).
Entity data type additions
EntityDataTypes26_1 adds four new sound-variant entity data types (indices 22, 24, 29, 31), interleaved among the existing variant types:
| Index | Name |
|---|---|
| 22 | catSoundVariant |
| 24 | cowSoundVariant |
| 29 | pigSoundVariant |
| 31 | chickenSoundVariant |
These drive the new per-mob sound variant system (distinct cries for different cat breeds, cow breeds, etc.). Existing variant indices above these shift accordingly. Source: EntityDataTypes26_1.java.
ViaVersion inserts/removes these via dataTypeMapper().added(entityDataTypes.catSoundVariant)…register() in EntityPacketRewriter26_1.registerRewrites().
Also new entity data indices per the entity rewriter:
- Villager: index 19 added (
is_villager_data_finalized) - Zombie Villager: index 21 added (
is_villager_data_finalized)
Source: EntityPacketRewriter26_1.java:registerRewrites().
Item component changes
Several structured data keys were renamed/versioned for 26.1. ViaVersion translates:
| Old key (1.21.11) | New key (26.1) | Change |
|---|---|---|
JUKEBOX_PLAYABLE1_21_5 |
JUKEBOX_PLAYABLE26_1 |
Internal Holder type change (key vs inline data) |
INSTRUMENT1_21_5 |
INSTRUMENT26_1 |
EitherHolder → Holder |
PROVIDES_TRIM_MATERIAL1_21_5 |
PROVIDES_TRIM_MATERIAL26_1 |
EitherHolder unwrapping |
CHICKEN_VARIANT1_21_5 |
CHICKEN_VARIANT26_1 |
Either resolved to int |
ZOMBIE_NAUTILUS_VARIANT1_21_11 |
ZOMBIE_NAUTILUS_VARIANT26_1 |
Either resolved to int |
DAMAGE_TYPE1_21_11 |
DAMAGE_TYPE26_1 |
EitherHolder → int |
PROVIDES_BANNER_PATTERNS1_21_5 |
PROVIDES_BANNER_PATTERNS26_1 |
Key → HolderSet |
DAMAGE_RESISTANT1_21_2 |
DAMAGE_RESISTANT26_1 |
Tag key → HolderSet |
BLOCKS_ATTACKS1_21_5 |
BLOCKS_ATTACKS26_1 |
Gains bypassedBy field |
New components not present in 1.21.11 (removed on downgrade):
| Component | Description |
|---|---|
ADDITIONAL_TRADE_COST |
Transient modifier for villager trade quantities |
DYE |
Dye color component for generic color interactions |
CAT_SOUND_VARIANT |
Per-item cat sound variant |
CHICKEN_SOUND_VARIANT |
Per-item chicken sound variant |
COW_SOUND_VARIANT |
Per-item cow sound variant |
PIG_SOUND_VARIANT |
Per-item pig sound variant |
Container item null semantics: 26.1 uses null for empty container slots instead of empty item objects (count=0). ViaVersion converts bidirectionally. Source: BlockItemPacketRewriter26_1.java:upgradeData/downgradeData.
Registry additions (via FINISH_CONFIGURATION injection)
ViaVersion injects these registries for 26.1 clients during configuration:
| Registry key | Contents |
|---|---|
world_clock |
overworld, the_end — dimension clock entries |
cat_sound_variant |
Cat breed sound mappings |
cow_sound_variant |
Cow variant sound mappings |
pig_sound_variant |
Pig variant sound mappings |
chicken_sound_variant |
Chicken variant sound mappings |
Also adds FINISH_CONFIGURATION-time tag patches: emits an empty UPDATE_TAGS if no tags packet was received (to ensure damage type and banner pattern tags are populated). Source: Protocol1_21_11To26_1.java.
Villager/dimension registry rewrites
The dimension_type registry entry gains has_ender_dragon_fight (computed from key == the_end) and visual/ambient_light_color. wolf_sound_variant entries are restructured into adult_sounds/baby_sounds compound tags. wolf_variant gains baby_assets. frog_variant, chicken_variant, cow_variant, pig_variant, cat_variant all gain asset-id affixes and baby asset IDs. Source: Protocol1_21_11To26_1.java:onMappingDataLoaded.
UPDATE_TAGS / configuration tags
UPDATE_TAGS is replaced via replaceClientbound in both play and configuration state to track whether tags were sent (for the FINISH_CONFIGURATION injection logic). A large set of damage_type and banner_pattern empty tags are added for compatibility. Source: Protocol1_21_11To26_1.java:handleTags.
26.2 — Protocol 776 (vs 26.1 / protocol 775)
Release name: "Chaos Cubed" Release date: 2026-06-16 Development timeline: 8 snapshots, 6 pre-releases, 2 release candidates. Pack formats: Resource pack 88.0, Data pack 107.1. Minimum Java: Java SE 25 (unchanged).
Source note: The ViaVersion clone (
/tmp/mcproto-refs/ViaVersion) predates 26.2 — nov26_1to26_2package exists in the local ref. Protocol 776 is confirmed from minecraft-dataprotocolVersions.json(entry{'minecraftVersion': '26.2', 'version': 776, 'dataVersion': 4903}) and minecraft.wiki/w/Java_Edition_26.2 (fetched 2026-06-19). The packet-level diff below is from wiki sources only. All 776 protocol claims in this section remain wiki-sourced and should be re-verified against ViaVersionv26_1to26_2once that package ships.
Headline gameplay changes (mc-wiki, fetched 2026-06-19)
- Sulfur Caves biome: new underground biome with sulfur spikes (stalactite/stalagmite mechanics), sulfur springs, and distinctive lighting.
- New blocks: sulfur block, polished sulfur, sulfur bricks, sulfur stairs/slabs/walls, chiseled sulfur; cinnabar block and all its variants (same palette); potent sulfur (creates geysers); sulfur spike.
- Sulfur Cube mob: passive mob with 12 archetypes (
regular,bouncy,slow_bouncy,fast_flat,slow_flat,light,fast_sliding,slow_sliding,high_resistance,sticky,explosive,hot). Physics properties driven by absorbed blocks; can absorb TNT to become explosive. - Music Disc "Bounce": by fingerspit.
/unpublishcommand: disconnects the integrated (LAN) server.- Friends List: in-game friend request management system (send/accept/decline/cancel/remove via new UI on title screen and pause menu). No new protocol packets documented — minecraft.wiki/w/Java_Edition_26.2 describes it as a client-side UI feature with no wire-level packet additions.
- Vulkan 1.2 renderer (experimental): optional renderer with automatic OpenGL fallback.
Protocol changes in 776
Sources: minecraft.wiki/w/Java_Edition_26.2 (fetched 2026-06-19). No ViaVersion source available for this bump. All protocol claims in this section are wiki-only and should be reverified against ViaVersion v26_1to26_2 once available.
New entity attributes
Five new entity attributes registered server-side and sent in UPDATE_ATTRIBUTES:
| Attribute | Range | Purpose |
|---|---|---|
minecraft:air_drag_modifier |
0.0–2048.0 | Air resistance multiplier |
minecraft:bounciness |
0.0–1.0 | Restitution coefficient for bounce mechanics |
minecraft:friction_modifier |
0.0–2048.0 | Surface friction multiplier |
minecraft:below_name_distance |
0.0–512.0 | Minimum distance to show name tag below |
minecraft:name_tag_distance |
0.0–512.0 | Maximum render distance for name tag |
New game event
minecraft:bounce (vibration frequency 2): emitted when an entity with non-zero bounciness attribute collides with a surface. Carried in GAME_EVENT packets.
New item component
minecraft:sulfur_cube_content: holds the block stack absorbed by a Sulfur Cube entity, driving archetype behavior.
New registry
minecraft:sulfur_cube_archetype: 12 entries (regular, bouncy, slow_bouncy, fast_flat, slow_flat, light, fast_sliding, slow_sliding, high_resistance, sticky, explosive, hot). Sent via REGISTRY_DATA during configuration.
World generation feature renames
pointed_dripstone feature type renamed to speleothem; dripstone_cluster renamed to speleothem_cluster. Server-side worldgen only — minecraft.wiki/w/Java_Edition_26.2 documents these as feature-type configuration renames (datapack fields base_block, pointed_block, replaceable_blocks); no chunk data format change documented.
New density function
minecraft:interval_select: threshold-based density function selector. Server-side only (world generation); not directly in the play protocol. Confirmed worldgen-only: minecraft.wiki/w/Java_Edition_26.2 describes it under "Density functions" as "Selects between a number of density functions based on an input density function and a set of threshold values" — no wire packet presence documented. (checked 2026-06-19)
Predicate restructuring
Entity predicate type field renamed to minecraft:entity_type; new minecraft:entity_tags sub-predicate. Wiki confirms the predicate restructuring but does not specify which packets carry the changed predicate format.
Chunk section changes
Particle additions
Five new particles: geyser_base, geyser_poof, geyser_plume, geyser, sulfur_cube_goo. These appear in LEVEL_PARTICLES and SET_ENTITY_DATA payloads.
1.21 trajectory continuity
Both 26.1 and 26.2 continue the patterns established in 1.21.x:
- Structured item components (
minecraft:*data components introduced in 1.20.5): 26.1 extends this withdye,additional_trade_cost, sound variant components; 26.2 addssulfur_cube_content. TheEitherHolderintermediate layer introduced in 1.21.x is being progressively resolved to plainHolderorintIDs (see 26.1 item component changes above). - Registry-driven content: new registries (
world_clock,sulfur_cube_archetype, sound variant registries) follow the Configuration-stateREGISTRY_DATApattern established in 1.20.2. - Chunk section header: grew from 1.21.5's block-palette-only header to 1.21.x's non-air count, then 26.1 adds fluid count. Still the same short+palette+palette structure.
- Bundle delimiter and batched chunk delivery: unchanged from 1.21.x.
- Snapshot high-bit scheme:
0x40000000 + Nfor all pre-release builds — unbroken from 1.13.
Proxy and ViaVersion translation notes
26.1 (775): fully supported by ViaVersion clone
ViaVersion's v1_21_11to26_1 package translates in both directions. Key proxy concerns:
| Concern | What to do |
|---|---|
| Chunk section fluid count | Recompute from block palette on downgrade; inject zero on upgrade |
| ATTACK / SPECTATE_ENTITY → INTERACT | Map to action=1 (attack); track sneak state from PLAYER_INPUT bit 5 |
| INTERACT → ATTACK + optional INTERACT_AT | Split one packet into two for upgrade (entity id + action + location) |
| SET_TIME multi-clock → old format | Use clock 0 (overworld) only; extract total_ticks + tick_rate |
| SET_GAME_RULE serverbound cancel | Drop SET_GAME_RULE action=2 (request values) entirely |
| GAME_RULE_VALUES cancel | Not sent to 1.21.11 clients |
| LOW_DISK_SPACE_WARNING cancel | Not sent to older clients |
| World clock registry injection | Inject world_clock entries in FINISH_CONFIGURATION |
| Sound variant registries | Inject cat_sound_variant, cow_sound_variant, etc. in FINISH_CONFIGURATION |
| Entity data index shifts | catSoundVariant@22, cowSoundVariant@24, pigSoundVariant@29, chickenSoundVariant@31 inserted |
| Item component renames | See table in §item-component-changes above |
Source: Protocol1_21_11To26_1.java, EntityPacketRewriter26_1.java, BlockItemPacketRewriter26_1.java.
26.2 (776): no ViaVersion source in local clone
The ViaVersion ref predates 26.2. Expected translation requirements (from wiki analysis):
- New entity attributes (
air_drag_modifier,bounciness, etc.) inUPDATE_ATTRIBUTESmust be stripped for 26.1 clients. sulfur_cube_archetyperegistry must be injected or stripped.- Five new particles must be remapped or dropped.
sulfur_cube_contentitem component must be removed on downgrade.- New game event
bouncecan be suppressed without client-visible impact. - Entity predicate restructuring may affect
COMMANDSpacket argument types.
All items above are derived from wiki analysis only; reverify against ViaVersion v26_1to26_2 once that package ships.
Version map summary
| Version string | Protocol | Snapshot range | Confirmed by |
|---|---|---|---|
| 26.1–26.1.2 | 775 | 0x4000011F–0x4000012F (snapshot-1 to rc-3) |
ViaVersion ProtocolVersion.java:96; minecraft-data protocolVersions.json; mc-wiki |
| 26.2 | 776 | 0x40000134–0x40000142 (snapshot-2 to rc-2) |
minecraft-data protocolVersions.json; mc-wiki |
| 26w14a | 0x40000131 |
— (interstitial snapshot, April-type) | minecraft-data protocolVersions.json (dataVersion 5000) |