8 topical docs (overview, data types, lifecycle, handshake, status/ping, login+encryption, configuration, version-differences) + proxy-forwarding set + 16 per-version release-line docs, sourced from minecraft.wiki, ViaVersion (source + commits), minecraft-data, node-minecraft-protocol, Velocity, BungeeCord. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
31 KiB
Java Edition 1.21.x — "Tricky Trials" and the Long Patch Series
Protocol numbers: 767 (1.21/1.21.1) · 768 (1.21.2/1.21.3) · 769 (1.21.4) · 770 (1.21.5) · 771 (1.21.6) · 772 (1.21.7/1.21.8) · 773 (1.21.9/1.21.10) · 774 (1.21.11)
Release span: June 13, 2024 (1.21) — December 9, 2025 (1.21.11) — 8 distinct protocol versions across 11 game releases.
Sources:
- MCWIKI:
https://minecraft.wiki/w/Java_Edition_1.21[.X](fetched 2026-06-19) - VV:
/tmp/mcproto-refs/ViaVersion/common/src/main/java/com/viaversion/viaversion/protocols/v1_20_5to1_21/…v1_21_9to1_21_11/(Protocol*.java + packet enums) - VV-LOG:
git -C /tmp/mcproto-refs/ViaVersion log --oneline -- common/.../protocols/<pkg>(fetched 2026-06-19) - MD:
/tmp/mcproto-refs/minecraft-data/data/pc/1.21[.x]/version.json
Headline
1.21 "Tricky Trials" (June 2024) was the major combat/adventure update: trial chambers, breeze mob, mace weapon, wind charge, crafter block, copper and tuff block variants, four new status effects. Patch releases after it were unusually numerous — 10 patches over 18 months spanning the "Wild West" (1.21.2: bundles), "Winter Drop" (1.21.4: pale garden/creaking), animal variants (1.21.5), "Chase the Skies" (1.21.6: happy ghasts, dialog system), "Copper Age" (1.21.9: copper golem/equipment), and "Mounts of Mayhem" (1.21.11: spears, nautilus, dimension attribute overhaul). Each sub-update bumped the protocol, producing 8 distinct wire versions inside a single major release line.
Protocol bump summary
| Protocol | MC versions | Released | Key protocol change |
|---|---|---|---|
| 767 | 1.21, 1.21.1 | 2024-06-13, 2024-08-08 | First 1.21 wire (attribute UUID→ID remap, PROJECTILE_POWER scalar) |
| 768 | 1.21.2, 1.21.3 | 2024-10-22, 2024-10-23 | Major: ENTITY_POSITION_SYNC + MOVE_MINECART_ALONG_TRACK new; serverbound CLIENT_TICK_END + BUNDLE_ITEM_SELECTED; full item component rebuild; new entity types (Salmon sizes, etc.) |
| 769 | 1.21.4 | 2024-12-03 | PICK_ITEM split into PICK_ITEM_FROM_BLOCK/PICK_ITEM_FROM_ENTITY; LEVEL_PARTICLES gets always_show field; CUSTOM_MODEL_DATA format extended (1_21_4); PROFILE_ACTIONS_ENUM gains "show hat" bit |
| 770 | 1.21.5 | 2025-03-25 | ADD_EXPERIENCE_ORB removed (merged into ADD_ENTITY); PLAYER_ROTATION packet added; PLAYER_CHAT gets message-index prefix; serverbounds: SET_TEST_BLOCK + TEST_INSTANCE_BLOCK_ACTION (test framework); PLAYER_LOADED new; large item component churn (UNBREAKABLE, ENCHANTMENTS, ATTRIBUTE_MODIFIERS, EQUIPPABLE, INSTRUMENT, JUKEBOX_PLAYABLE, TRIM, many variants bump to 1_21_5) |
| 771 | 1.21.6 | 2025-06-17 | Dialog system: CLEAR_DIALOG + SHOW_DIALOG new (play + config); CUSTOM_CLICK_ACTION new serverbound (play + config); TRACKED_WAYPOINT new; CHANGE_DIFFICULTY changes type (unsigned byte → varint); CHANGE_GAME_MODE new serverbound; sneak/shift actions removed from PLAYER_COMMAND (now absorbed into PLAYER_INPUT); ATTRIBUTE_MODIFIERS → 1_21_6, EQUIPPABLE → 1_21_6 |
| 772 | 1.21.7, 1.21.8 | 2025-06-30, 2025-07-17 | Incremental: entity/item data remapping only (block/item ID changes); no new packet types; 1.21.8 was graphics bug-fix only |
| 773 | 1.21.9, 1.21.10 | 2025-09-30, 2025-10-07 | ADD_ENTITY velocity field type changed (short×3 → LOW_PRECISION_VECTOR); SET_ENTITY_MOTION same; PLAYER_ROTATION gets "relative" boolean fields; four new DEBUG_* packets (DEBUG_BLOCK_VALUE, DEBUG_CHUNK_VALUE, DEBUG_ENTITY_VALUE, DEBUG_EVENT); GAME_EVENT_TEST_HIGHLIGHT_POS new; EXPLODE restructured (radius+count fields moved to PROJECTILE_POWER); config: CODE_OF_CONDUCT added; copper golem entity + copper equipment block/item IDs |
| 774 | 1.21.11 | 2025-12-09 | HORSE_SCREEN_OPEN → MOUNT_SCREEN_OPEN rename; new entity types (zombie_nautilus, new mounts); zombie_nautilus_variant + timeline registries injected at FINISH_CONFIGURATION; massive dimension_type field migration (many fields → attributes NBT compound); worldgen/biome similarly gains attributes; new item components: ATTACK_RANGE, USE_EFFECTS, MINIMUM_ATTACK_CHARGE, DAMAGE_TYPE, PIERCING_WEAPON, KINETIC_WEAPON, SWING_ANIMATION, ZOMBIE_NAUTILUS_VARIANT |
767 — 1.21 / 1.21.1 (June 13 / August 8, 2024)
Gameplay headline
Tricky Trials: trial chambers, breeze mob, mace+heavy core, wind charge, crafter block, copper/tuff variant blocks, four status effects (Wind Charged, Weaving, Oozing, Infested). First release requiring 64-bit OS and Java 21+. MCWIKI 1.21
1.21.1 hotfixed two security exploits (update suppression block-entity swap; server crash via malicious command-completion target selector causing stack exhaustion) plus two gameplay bugs. Same protocol 767. Servers running 1.21.1 are compatible with 1.21 clients. MCWIKI 1.21.1
Protocol changes (766→767)
VV package: v1_20_5to1_21/ (Protocol1_20_5To1_21.java)
Play state — clientbound (0x00–0x7B): Packet set identical in count/IDs to 1.20.5 (ClientboundPackets1_21 enum ends at SERVER_LINKS 0x7B = 124 entries). Notable: PROJECTILE_POWER (0x79) already existed as of 1.20.5 but its payload changed — 1.21 converts the separate x/y/z doubles (three fields) into a single acceleration_power scalar (magnitude of the velocity vector). VV does this inline: Protocol1_20_5To1_21.java:registerPackets() reads the three doubles, computes sqrt(x²+y²+z²), writes one double. [VV Protocol1_20_5To1_21.java:registerPackets()]
Attribute modifiers: UUID-keyed modifiers in UPDATE_ATTRIBUTES replaced by string IDs. VV maps UUID→string via AttributeModifierMappings1_21. Bidirectional mapping: server sends string IDs, old clients need UUIDs, VV translates. [VV Protocol1_20_5To1_21.java:registerPackets(), AttributeModifierMappings1_21]
Chat type holder: DISGUISED_CHAT and PLAYER_CHAT chat-type field changed from plain varint to Holder<ChatType> (inline or registry reference). VV wraps the varint into ChatType.TYPE holder. [VV Protocol1_20_5To1_21.java:registerPackets()]
Item components: The 1.20.5 component set carries forward. VV's VersionedTypes.V1_21.structuredData filler enumerates which components exist at this version — all keys use 1_20_5-suffixed variants except FOOD1_21, JUKEBOX_PLAYABLE1_21, ATTRIBUTE_MODIFIERS1_21. [VV Protocol1_20_5To1_21.java:onMappingDataLoaded()]
New entity tags: blocks_wind_charge_explosions (block), several entity tags (can_turn_in_boats, deflects_projectiles, immune_to_infested, immune_to_oozing, no_anger_from_wind_charge). Enchantment tags added (curse, double_trade_price, in_enchanting_table, etc.). [VV Protocol1_20_5To1_21.java:onMappingDataLoaded()]
768 — 1.21.2 / 1.21.3 (October 22 / October 23, 2024)
Gameplay headline
Bundles (dyeable, store up to 64 mixed items), new banner patterns (field masoned, bordure indented). Experimental content: Minecart Improvements, Redstone Experiments, Winter Drop (pale garden biome, creaking mob) gated behind feature flags. Significant ender pearl chunk-loading change. MCWIKI 1.21.2
1.21.3 hotfixed salmon size regression (small salmon incorrectly downsized on world load) and Realms resource-pack failure. Same protocol 768. MCWIKI 1.21.3
MD confirms: data/pc/1.21.3/version.json = 768.
Protocol changes (767→768)
VV package: v1_21to1_21_2/ (Protocol1_21To1_21_2.java)
This is the most substantial bump in the 1.21 line.
New clientbound play packets
ENTITY_POSITION_SYNC(0x20): New packet for authoritative entity position sync (replaces the indirect position-via-teleport path for most entities). All subsequent packet IDs shift up by 1. [VVClientboundPackets1_21_2.java:0x20]MOVE_MINECART_ALONG_TRACK(0x31): New dedicated minecart movement packet for the experimental Minecart Improvements feature. [VVClientboundPackets1_21_2.java:0x31]SET_CURSOR_ITEM(0x5A): Sends the item on the cursor (held item in inventory GUI). Was previously implicit. [VVClientboundPackets1_21_2.java:0x5A]SET_HELD_SLOT(0x63): ReplacesSET_CARRIED_ITEMrename. [VVClientboundPackets1_21_2.java:0x63]SET_PLAYER_INVENTORY(0x66): Sends a specific slot of the player inventory. [VVClientboundPackets1_21_2.java:0x66]
Total play clientbound count grows from 124 (0x7B) to 131 (0x82).
New serverbound play packets
BUNDLE_ITEM_SELECTED(0x02): Client reports which item inside a bundle was selected. VV cancels this (no equivalent in 1.21). [VVProtocol1_21To1_21_2.java:cancelServerbound()]CLIENT_TICK_END(0x0B): Client sends at end of each tick. VV cancels. [VVProtocol1_21To1_21_2.java:cancelServerbound()]
Packet field changes
LOGIN_FINISHED(login state):strict_error_handlingboolean field removed. VV reads and discards it. [VVProtocol1_21To1_21_2.java:registerPackets()]SET_TIME:doDaylightCyclewas encoded as negative day-time; now explicitdoDaylightCycle: booleanfield added. VV converts the sign-encoding to explicit field. [VVProtocol1_21To1_21_2.java:registerPackets()]PLAYER_INFO_UPDATE:PROFILE_ACTIONS_ENUMupdated to1_21_2variant. Display-name entries now include component rewriting. [VVProtocol1_21To1_21_2.java:replaceClientbound()]UPDATE_ATTRIBUTES: Attribute modifier format: UUID field removed, modifiers now have string ID only (already done in 767 serverside, now serverbound clean-up). VV tracksgeneric.max_healthto compute max health for 1.21 clients. [VVProtocol1_21To1_21_2.java:appendClientbound()]
Item component changes (notable)
DAMAGE_RESISTANT→DAMAGE_RESISTANT1_21_2(format change)FOOD→FOOD1_21_2(split into food + consumable components)CONSUMABLE1_21_2,USE_COOLDOWN,EQUIPPABLE1_21_2,ITEM_MODEL,GLIDER,TOOLTIP_STYLE,DEATH_PROTECTIONaddedREPAIRABLE,ENCHANTABLEaddedLOCK→LOCK1_21_2,POTION_CONTENTS→POTION_CONTENTS1_21_2,INSTRUMENT→INSTRUMENT1_21_2,TRIM→TRIM1_21_2
[VV Protocol1_21To1_21_2.java:onMappingDataLoaded()]
Damage types added
ender_pearl and mace_smash damage types added to registry. [VV Protocol1_21To1_21_2.java:registryDataRewriter()]
Chunk-load workaround
1.21.2 introduced a rendering bug: if a loaded chunk received new data without being unloaded first, it wouldn't render correctly. VV injects a ChunkLoadTracker that forces chunk unload before re-send, only for 1.21.2 clients (not 1.21.3 which got the 1.21.2 packet set, as 1.21.4 fixed the bug). [VV Protocol1_21To1_21_2.java:init()]
CLIENT_INFORMATION
New particle_status varint field added at end. VV reads and discards it when translating to 1.21. [VV Protocol1_21To1_21_2.java:clientInformation()]
769 — 1.21.4 (December 3, 2024)
Gameplay headline
Pale garden biome + pale oak wood set; creaking heart block; creaking mob (freezes when observed); eyeblossom; resin blocks. Spawn damage immunity removed. Water Breathing/Conduit Power now restore oxygen. MCWIKI 1.21.4
Protocol changes (768→769)
VV package: v1_21_2to1_21_4/ (Protocol1_21_2To1_21_4.java)
Relatively lightweight protocol bump — no new packet types, primarily field changes and item-component format updates.
PICK_ITEMsplit: ServerboundPICK_ITEM(0x22) split intoPICK_ITEM_FROM_BLOCK(0x22) andPICK_ITEM_FROM_ENTITY(0x23). VV provides aPickItemProviderto handle the split. [VVProtocol1_21_2To1_21_4.java:register()]LEVEL_PARTICLES:always_showboolean field added afteroverride_limiter. VV writesfalsefor it when translating down. [VVProtocol1_21_2To1_21_4.java:registerPackets()replaceClientbound(LEVEL_PARTICLES)]PLAYER_INFO_UPDATE:PROFILE_ACTIONS_ENUM→1_21_4variant (adds "show hat" action). VV writestrueby default. [VVProtocol1_21_2To1_21_4.java:registerPackets()]- Item components:
CUSTOM_MODEL_DATA→1_21_4(format extended),TRIM→1_21_4. PLAYER_LOADEDserverbound: Added (0x2A in 1.21.5 but arrives at 768→769 boundary).- VV does NOT add a
ChunkLoadTrackerfor 1.21.4 clients — Mojang fixed the rendering bug in this release. [VVProtocol1_21To1_21_2.java:init()comment]
770 — 1.21.5 (March 25, 2025)
Gameplay headline
Farm animal variants (cold/warm/temperate pigs, cows, chickens with biome-based spawning), new decorative plants (leaf litter, wildflowers, bushes, firefly bushes), wolf sound variants (7). Game test framework (/test command, test blocks). Text components switch from JSON to SNBT. MCWIKI 1.21.5
Protocol changes (769→770)
VV package: v1_21_4to1_21_5/ (Protocol1_21_4To1_21_5.java)
This is one of the larger protocol bumps: packet added/removed and major item-component churn.
Packet additions and removals
Clientbound play:
ADD_EXPERIENCE_ORBremoved. Experience orbs now spawn via the regularADD_ENTITYpacket (entity typeexperience_orb). All subsequent IDs shift. [VVClientboundPackets1_21_5.java— noADD_EXPERIENCE_ORBentry; 1.21 enum had it at 0x02]PLAYER_ROTATION(0x42) added: Server sends player rotation authoritative update. Separate fromPLAYER_POSITION. [VVClientboundPackets1_21_5.java:0x42]TEST_INSTANCE_BLOCK_STATUS(0x77): New packet for the game test framework. [VVClientboundPackets1_21_5.java:0x77]
Serverbound play (vs 1.21.4):
PICK_ITEM_FROM_BLOCK(0x22),PICK_ITEM_FROM_ENTITY(0x23) — carried from 769PLAYER_LOADED(0x2A): New — client signals it has loaded the world. [VVServerboundPackets1_21_5.java:0x2A]SET_TEST_BLOCK(0x39): Test framework. VV cancels. [VVProtocol1_21_4To1_21_5.java:cancelServerbound()]TEST_INSTANCE_BLOCK_ACTION(0x3D): Test framework. VV cancels. [VVProtocol1_21_4To1_21_5.java:cancelServerbound()]
Packet field changes
PLAYER_CHAT: Message-index varint added as first field. VV synthesizes this usingMessageIndexStorage(tracks per-connection index). [VVProtocol1_21_4To1_21_5.java:replaceClientbound(PLAYER_CHAT),MessageIndexStorage]CHAT_COMMAND_SIGNEDandCHAT(serverbound):checksum: bytefield added at end. VV reads and drops it. [VVProtocol1_21_4To1_21_5.java:registerServerbound(CHAT_COMMAND_SIGNED),registerServerbound(CHAT)]wolf_variantregistry:assetsfield restructured —wild_texture,tame_texture,angry_texturemoved underassetscompound;biomesfield removed. VV remaps on registry send. [VVProtocol1_21_4To1_21_5.java:registryDataRewriterhandler forwolf_variant]
Item component changes (major churn)
Many component keys changed to 1_21_5-suffixed variants:
UNBREAKABLE→1_21_5,ENCHANTMENTS→1_21_5,STORED_ENCHANTMENTS→1_21_5DYED_COLOR→1_21_5,TRIM→1_21_5,ATTRIBUTE_MODIFIERS→1_21_5EQUIPPABLE→1_21_5,TOOL→1_21_5,INSTRUMENT→1_21_5,JUKEBOX_PLAYABLE→1_21_5- New components added:
BLOCKS_ATTACKS1_21_5(shield-like),PROVIDES_BANNER_PATTERNS1_21_5,TOOLTIP_DISPLAY,WEAPON,POTION_DURATION_SCALE,PROVIDES_TRIM_MATERIAL1_21_5,BREAK_SOUND - Mob-variant components as items:
VILLAGER_VARIANT,WOLF_VARIANT,WOLF_COLLAR,FOX_VARIANT,SALMON_SIZE,PARROT_VARIANT,TROPICAL_FISH_*,MOOSHROOM_VARIANT,RABBIT_VARIANT,PIG_VARIANT,FROG_VARIANT,HORSE_VARIANT,PAINTING_VARIANT,LLAMA_VARIANT,AXOLOTL_VARIANT,CAT_VARIANT,CAT_COLLAR,SHEEP_COLOR,SHULKER_COLOR,COW_VARIANT,CHICKEN_VARIANT1_21_5,WOLF_SOUND_VARIANT— all bucket/spawn-egg entity variant data is now carried as item components.
[VV Protocol1_21_4To1_21_5.java:onMappingDataLoaded()]
Smithing trim recipe slot display change
Trim pattern slot display format changed — VV substitutes a placeholder (holder index 0) when translating smithing-trim recipe packets down. [VV Protocol1_21_4To1_21_5.java recipeRewriter anonymous class]
771 — 1.21.6 (June 17, 2025)
Gameplay headline
"Chase the Skies" — rideable happy ghasts (up to 4 riders, colored harnesses); locator bar (shows other players' direction/distance in HUD); mob-to-mob leads; craftable saddles; waypoints. Dialog system (server-controlled modal UI). MCWIKI 1.21.6
Protocol changes (770→771)
VV package: v1_21_5to1_21_6/ (Protocol1_21_5To1_21_6.java)
New packets
Clientbound play:
TRACKED_WAYPOINT(0x83): Waypoint tracking for the locator bar feature. [VVClientboundPackets1_21_6.java:0x83]CLEAR_DIALOG(0x84): Dismiss the current server dialog. [VVClientboundPackets1_21_6.java:0x84]SHOW_DIALOG(0x85): Display a dialog to the player. [VVClientboundPackets1_21_6.java:0x85]
Configuration state — clientbound:
CLEAR_DIALOG(0x11) andSHOW_DIALOG(0x12) also appear in Configuration state — dialogs can be shown during config phase. [VVClientboundConfigurationPackets1_21_6.java:0x11,0x12]
Serverbound play:
CHANGE_GAME_MODE(0x04): New packet for switching game mode. VV translates this toCHAT_COMMAND(/gamemode <name>) for 1.21.5 servers. [VVProtocol1_21_5To1_21_6.java:registerServerbound(CHANGE_GAME_MODE)]CUSTOM_CLICK_ACTION(0x41): New serverbound packet sent when a player interacts with a dialog element. VV cancels (no equivalent). [VVProtocol1_21_5To1_21_6.java:cancelServerbound(CUSTOM_CLICK_ACTION)]
Packet field changes
CHANGE_DIFFICULTY: Difficulty value changes type fromunsigned bytetovarint. VV converts both directions. [VVProtocol1_21_5To1_21_6.java:registerClientbound(CHANGE_DIFFICULTY),registerServerbound(CHANGE_DIFFICULTY)]PLAYER_COMMAND:press_shift_key(action 0) andrelease_shift_key(action 1) removed — sneak is now aPLAYER_INPUTflag. All remaining actions shift down by 2. VV synthesizespress_shift_key/release_shift_keyfromPLAYER_INPUT's sneak flag, usingSneakStorageto track state changes. [VVEntityPacketRewriter1_21_6.java:registerServerbound(PLAYER_COMMAND),registerServerbound(PLAYER_INPUT)]
Configuration: dialog registry injection
At FINISH_CONFIGURATION, VV synthesizes a minecraft:dialog registry entry (server_links dialog type) and sends it as REGISTRY_DATA — vanilla servers don't send this so older clients wouldn't see server links dialogs. [VV EntityPacketRewriter1_21_6.java:appendClientbound(FINISH_CONFIGURATION)]
Dimension type: cloud_height defaults
VV patches dimension-type registry entries to inject a default cloud_height: 192 for overworld-like dimensions, since 1.21.6 clients render clouds based on this field. [VV Protocol1_21_5To1_21_6.java:registryDataRewriter handler for dimension_type]
Item components
ATTRIBUTE_MODIFIERS→1_21_6,EQUIPPABLE→1_21_6
[VV Protocol1_21_5To1_21_6.java:onMappingDataLoaded()]
772 — 1.21.7 / 1.21.8 (June 30 / July 17, 2025)
Gameplay headline
1.21.7: New music disc "Lava Chicken" (Hyper Potions, from chicken jockey kill); new painting "Dennis" (3×3, A Minecraft Movie tie-in). 16 bug fixes (AMD/Qualcomm rendering, texture atlas leaks). MCWIKI 1.21.7
1.21.8: Graphics bug-fix only — Intel Gen11 shading errors, inventory item-color glitches on Intel integrated graphics. Same protocol 772. MCWIKI 1.21.8
Protocol changes (771→772)
VV package: v1_21_6to1_21_7/ (Protocol1_21_6To1_21_7.java)
Purely incremental — no new packet types. Same clientbound/serverbound enum as 771. VV's Protocol1_21_6To1_21_7 class has an empty registerPackets() body; translation is limited to block/item/entity ID remapping and dialog-packet item rewriting. [VV Protocol1_21_6To1_21_7.java:registerPackets()]
The git log shows 6b74116ff Handle item changes in dialog packets as the main content commit — items embedded in SHOW_DIALOG / CLEAR_DIALOG needed remapping for the new block/item IDs. [VV-LOG v1_21_6to1_21_7]
773 — 1.21.9 / 1.21.10 (September 30 / October 7, 2025)
Gameplay headline
"The Copper Age" — copper golem mob, copper tools/armor (stone-tier, high enchantability), copper chests (with oxidation), shelves (all wood types), copper lanterns/chains/bars. Chat drafts persist. New game rules (portal control, mob spawn). MCWIKI 1.21.9
1.21.10: Five bug fixes from 1.21.9 (wind charge collision, TP chunk loading, piston/cobweb entity clip). Same protocol 773. MCWIKI 1.21.10
Protocol changes (772→773)
VV package: v1_21_7to1_21_9/ (Protocol1_21_7To1_21_9.java)
This is a notably large bump: movement encoding overhaul, explosion restructure, debug packet additions.
Entity velocity encoding change
ADD_ENTITY: Entity initial velocity previously encoded as three signed shorts (velX,velY,velZ— each = velocity × 8000, clamped). Now encoded asLOW_PRECISION_VECTOR(a compact 3-component float vector type). VV translates: reads the old shorts, reconstructs the vector. [VVEntityPacketRewriter1_21_9.java:replaceClientbound(ADD_ENTITY)]SET_ENTITY_MOTION: Same change — shorts →LOW_PRECISION_VECTOR. [VVEntityPacketRewriter1_21_9.java:registerClientbound(SET_ENTITY_MOTION)]PLAYER_ROTATION: Gets tworelative: booleanflags (one per axis). VV writesfalsefor both when translating down. [VVEntityPacketRewriter1_21_9.java:registerClientbound(PLAYER_ROTATION)]
Explosion restructure
EXPLODE packet restructured: the explosion radius and affected-block count (previously sent inline) are now sourced from PROJECTILE_POWER's tracked state. VV emits the old-format explosion packet using values from LastExplosionPowerStorage. A new block_particles list field appended (VV writes count=0). [VV Protocol1_21_7To1_21_9.java:replaceClientbound(EXPLODE)]
New debug packets (clientbound play)
Four new debug visualisation packets added (likely tied to the game test framework):
DEBUG_BLOCK_VALUE(0x1A)DEBUG_CHUNK_VALUE(0x1B)DEBUG_ENTITY_VALUE(0x1C)DEBUG_EVENT(0x1D)
And GAME_EVENT_TEST_HIGHLIGHT_POS (0x27): Highlight test positions in the world. [VV ClientboundPackets1_21_9.java]
All existing IDs shift up accordingly — packet count goes from 134 (0x85) in 772 to 139 (0x8A) in 773.
Configuration state changes
CODE_OF_CONDUCT(0x13) added to serverbound Configuration packets (client accepts/rejects). VV cancelsACCEPT_CODE_OF_CONDUCTwhen translating down. [VVServerboundConfigurationPackets1_21_9.java:0x09;Protocol1_21_7To1_21_9.java:cancelServerbound(ACCEPT_CODE_OF_CONDUCT)]
Debug sample subscription
DEBUG_SAMPLE_SUBSCRIPTION serverbound changed: from a single type: varint to a list count: varint + per-entry registry_id: varint. VV maps the new DEDICATED_SERVER_TICK_TIME subscription (id=0) back to the old TICK_TIME type (0). [VV Protocol1_21_7To1_21_9.java:registerServerbound(DEBUG_SAMPLE_SUBSCRIPTION)]
SET_DEFAULT_SPAWN_POSITION
774 — 1.21.11 (December 9, 2025)
Gameplay headline
"Mounts of Mayhem" — nautilus (tameable aquatic mount), zombie nautilus (hostile), camel husk, parched (desert skeleton), zombie horseman. Spears (7 material tiers, jab + charge attacks, lunge enchantment). Nautilus armor. Netherite horse armor. Overhaul of dimension type and biome data (environment attributes system). MCWIKI 1.21.11
Protocol changes (773→774)
VV package: v1_21_9to1_21_11/ (Protocol1_21_9To1_21_11.java)
This is the most structurally significant bump of the 1.21 line from a proxy standpoint.
Packet rename
HORSE_SCREEN_OPEN→MOUNT_SCREEN_OPEN(same ID 0x28; name change only reflects expanded mount support). VV registers a direct remap. [VVEntityPacketRewriter1_21_11.java:registerClientbound(HORSE_SCREEN_OPEN → MOUNT_SCREEN_OPEN)]
New entity type
zombie_nautilusentity type added. New entity-data typezombieNautilusVariantTyperegistered. [VVEntityPacketRewriter1_21_11.java:registerRewrites(),EntityTypes1_21_11]
Registry injection at FINISH_CONFIGURATION
VV injects two entirely new registries before the config-phase completes, so older servers' clients see them:
zombie_nautilus_variantregistry — VV synthesizes a single entry (minecraft:palewithtemperateasset ID). [VVProtocol1_21_9To1_21_11.java:registerPackets(),appendClientbound(FINISH_CONFIGURATION)]timelineregistry — an experimental feature allowing time-based behavior modifications. VV synthesizes entries fromMAPPINGS.timelineRegistry(). [VVProtocol1_21_9To1_21_11.java:registerPackets()]
dimension_type registry overhaul (massive)
The dimension_type data format was significantly restructured — many fields extracted into a new attributes compound NBT sub-object. VV performs full field-level migration for each dimension type entry:
fixed_time→has_fixed_timebooleanhas_raids→attributes/"gameplay/can_start_raid"piglin_safe→attributes/"gameplay/piglins_zombify"(inverted)respawn_anchor_works→attributes/"gameplay/respawn_anchor_works"ultrawarm→attributes/"gameplay/fast_lava"+"gameplay/water_evaporates"cloud_height→attributes/"visual/cloud_height"+ synthesizes"visual/cloud_color": "#ccffffff"- New fields added:
skybox,cardinal_light,timelineslist,attributes/"visual/sky_light_color",attributes/"visual/fog_start_distance",attributes/"visual/fog_end_distance",attributes/"audio/background_music", ambient cave sounds.
[VV Protocol1_21_9To1_21_11.java:registryDataRewriter dimension_type handler]
worldgen/biome registry overhaul
Biome registry entries similarly gain an attributes sub-object with all sound and visual properties migrated:
effects.sky_color→attributes/"visual/sky_color"(suppressed for nether biomes)effects.water_fog_color→attributes/"visual/water_fog_color"effects.fog_color→attributes/"visual/fog_color"effects.music→attributes/"audio/background_music"effects.mood_sound/additions_sound/ambient_sound→attributes/"audio/ambient_sounds"effects.particle→attributes/"visual/ambient_particles"
[VV Protocol1_21_9To1_21_11.java:registryDataRewriter worldgen/biome handler]
New item components
ATTACK_RANGE,USE_EFFECTS,MINIMUM_ATTACK_CHARGE,DAMAGE_TYPE1_21_11,PIERCING_WEAPON,KINETIC_WEAPON,SWING_ANIMATION,ZOMBIE_NAUTILUS_VARIANT1_21_11
[VV Protocol1_21_9To1_21_11.java:onMappingDataLoaded()]
Game time storage
VV adds GameTimeStorage to track absolute game time (needed for timeline-based behavior). [VV Protocol1_21_9To1_21_11.java:init()]
Serverbound: spear cancel
PLAYER_ACTION action ID 7 ("stab") added for spear jab — VV cancels these when downgrading. [VV EntityPacketRewriter1_21_11.java:registerServerbound(PLAYER_ACTION)]
Proxy and ViaVersion translation impact
| Bump | Translation cost | Key challenge |
|---|---|---|
| 766→767 | Low | Attribute UUID↔ID bidirectional map; PROJECTILE_POWER scalar; chat type holder |
| 767→768 | High | 7 new clientbound packets (all IDs shift); 2 new serverbound; full item-component set rebuild; max-health tracking; chunk-load workaround for 1.21.2 clients |
| 768→769 | Medium | PICK_ITEM split; LEVEL_PARTICLES field insert; profile action enum extension |
| 769→770 | High | ADD_EXPERIENCE_ORB removal (XP orbs now ADD_ENTITY); message-index synthesis for chat; chat checksum stripping; test-framework packets cancelled; 20+ new item components including all mob-variant data |
| 770→771 | Medium | Dialog packet passthrough (play+config); sneak flag synthesis from PLAYER_INPUT; PLAYER_COMMAND action re-numbering; CHANGE_DIFFICULTY type conversion; dialog registry injection |
| 771→772 | Low | ID remapping only; dialog packet item rewriting |
| 772→773 | High | Entity velocity type change (LOW_PRECISION_VECTOR ↔ shorts) for ALL entities; explosion packet restructure; 5 new debug/test packets shifting all IDs; explosion power storage tracking |
| 773→774 | Very high | Full dimension_type field migration (many fields → attributes compound); full worldgen/biome field migration; two new registry types injected during config; new entity type + variant; spear action filtering |
Proxy notes:
- Login state:
LOGIN_FINISHEDloststrict_error_handling(768). If a proxy injects it, strip on the way down. - Configuration state: Dialog packets (
CLEAR_DIALOG,SHOW_DIALOG) appear in both config and play states from 771 onward. Proxies must forward these in both states. CODE_OF_CONDUCT(config, 773): New serverbound; cancel when forwarding to 772 servers.BUNDLE_ITEM_SELECTED/CLIENT_TICK_END(768): Cancel toward 767 servers.- Chunk-load (768): 1.21.2 clients need forced chunk unload before re-send; 1.21.3/1.21.4 don't.
- Item components: Every bump through 770 added or renamed component keys. A proxy doing item translation must track which component key set the connected client/server uses.
dimension_type(774): By far the most complex registry translation in the 1.21 line — the field-level migration is large enough that ViaVersion devotes ~150 lines of registry rewriting code to it alone.