Files
minecraft_protocol/versions/1.11.md
T
claude-timemachine d73c1c9537 minecraft_protocol: foundation + per-version protocol docs 1.7.10->26.2
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>
2026-06-19 14:15:32 +02:00

18 KiB
Raw Blame History

1.11.x — The Exploration Update

Release Protocol Date minecraft-data dir
1.11 315 2016-11-14 data/pc/1.11
1.11.1 316 2016-12-20 (inherits 1.11)
1.11.2 316 2016-12-21 data/pc/1.11.2

Sources:

  • Release notes: minecraft.wiki/w/Java_Edition_1.11 (fetched 2026-06-19); minecraft.wiki/w/Java_Edition_1.11.1 (fetched 2026-06-19); minecraft.wiki/w/Java_Edition_1.11.2 (fetched 2026-06-19)
  • ViaVersion v1_10to1_11: /tmp/mcproto-refs/ViaVersion/common/src/main/java/com/viaversion/viaversion/protocols/v1_10to1_11/Protocol1_10To1_11.java, rewriter/EntityPacketRewriter1_11.java, rewriter/ItemPacketRewriter1_11.java, data/EntityMappings1_11.java, data/BlockEntityMappings1_11.java, data/PotionColorMappings1_11.java
  • ViaVersion v1_11to1_11_1: /tmp/mcproto-refs/ViaVersion/common/src/main/java/com/viaversion/viaversion/protocols/v1_11to1_11_1/Protocol1_11To1_11_1.java, rewriter/ItemPacketRewriter1_11_1.java
  • minecraft-data: /tmp/mcproto-refs/minecraft-data/data/pc/1.10/, 1.11/, 1.11.2/

Headline

The Exploration Update shipped woodland mansions, the illager mob family (evokers, vindicators, vexes), llamas, shulker boxes, the observer block, and a totem of undying. From a protocol standpoint this is a minor-to-medium bump: no packets were added or removed between 1.10 (protocol 210) and 1.11 (protocol 315); however, several existing packets received field-level changes and the entire entity/block-entity NBT namespace was migrated from Pascal-cased legacy names to snake_case namespaced identifiers. The 315→316 bump (1.11.1) is one of the smallest in the entire 1.x series — only one serverbound packet was changed to handle a new item added in 1.11.1.


Protocol changes vs 1.10 (315)

Confirmed by diff of minecraft-data/data/pc/1.10/protocol.json vs data/pc/1.11/protocol.json and ViaVersion v1_10to1_11 rewriters.

Packet IDs — no change

All 76 clientbound play packets (0x000x4b) and all serverbound play packets share identical IDs between protocol 210 (1.10) and 315 (1.11). The packet set is unchanged. All changes are within existing packet payloads.

Sources: minecraft-data 1.10/protocol.json vs 1.11/protocol.jsontoClient and toServer mapping tables are byte-for-byte identical; ViaVersion Protocol1_10To1_11 extends AbstractProtocol<ClientboundPackets1_9_3, ClientboundPackets1_9_3, ServerboundPackets1_9_3, ServerboundPackets1_9_3> reusing the unchanged 1.9.3 packet enum for both old and new sides.

Play — Clientbound

0x03 spawn_entity_living (Spawn Living Entity / ADD_MOB)

The type field changed wire format:

Version Field Wire type
1.10 (210) type u8 (unsigned byte)
1.11 (315) type varint

Source: minecraft-data/data/pc/1.10/protocol.json packet_spawn_entity_living.type = "u8" vs 1.11/protocol.json type = "varint". Confirmed by ViaVersion EntityPacketRewriter1_11.java line 123: map(Types.UNSIGNED_BYTE, Types.VAR_INT); // 2 - Entity Type.

This is necessary because 1.11 expanded the entity type table to numbered IDs well beyond 255 and reorganised the ID space (see Entity Type Remapping below).

0x45 title (Title / SET_TITLES)

An action bar action was inserted at index 2, shifting the existing timing action from 2 to 3:

Action index 1.10 (210) 1.11 (315)
0 Set title Set title
1 Set subtitle Set subtitle
2 Set times Set action bar (new)
3 Set times (was 2)
4 Hide Hide (was 3)
5 Reset Reset (was 4)

Source: minecraft-data/data/pc/1.10/protocol.json title text.fields = {"0":"string","1":"string"}, fadeIn.fields = {"2":"i32"} vs 1.11/protocol.json text fields = {"0":"string","1":"string","2":"string"}, fadeIn.fields = {"3":"i32"}. Confirmed by ViaVersion Protocol1_10To1_11.java lines 7184: if (action >= 2) { wrapper.set(Types.VAR_INT, 0, action + 1); } — increments the action number for any value ≥ 2 to make room for action bar at index 2.

0x48 collect (Take Item Entity / TAKE_ITEM_ENTITY)

A third field pickupItemCount was added:

Version Fields
1.10 (210) collectedEntityId (varint), collectorEntityId (varint)
1.11 (315) collectedEntityId (varint), collectorEntityId (varint), pickupItemCount (varint)

Source: minecraft-data/data/pc/1.10/protocol.json packet_collect has 2 fields; 1.11/protocol.json has 3, adding pickupItemCount. Confirmed by ViaVersion EntityPacketRewriter1_11.java lines 152162: wrapper.write(Types.VAR_INT, 1); // 2 - Pickup Count — injects a hardcoded 1 to synthesise the field when translating from 1.11 to 1.10 clients.

0x21 world_event (Effect / LEVEL_EVENT)

Effect ID 2002 (splash potion impact) was split: linear potion data values (036) that previously encoded potion type as a damage-value integer were replaced by color-based RGB values. Additionally, instant-effect potions (Instant Health, Instant Damage) were reclassified to use a new effect ID 2007 rather than 2002.

Source: ViaVersion Protocol1_10To1_11.java lines 129156 and data/PotionColorMappings1_11.java — maps 37 old data values to new RGB color integers; marks indices 2124 as isInstant = true which triggers the 2002→2007 remap.

0x09 tile_entity_data / 0x20 map_chunk (Block Entity Data / Level Chunk)

Block entity id tags in NBT were migrated from PascalCase legacy strings to minecraft:snake_case namespaced identifiers. This affects both the inline block entity list in LEVEL_CHUNK (0x20) and the standalone BLOCK_ENTITY_DATA (0x09) packet.

Full mapping (old → new), source BlockEntityMappings1_11.java in v1_10to1_11/data/:

Old New
Furnace minecraft:furnace
Chest minecraft:chest
EnderChest minecraft:ender_chest
RecordPlayer minecraft:jukebox
Trap minecraft:dispenser
Dropper minecraft:dropper
Sign minecraft:sign
MobSpawner minecraft:mob_spawner
Music minecraft:noteblock
Piston minecraft:piston
Cauldron minecraft:brewing_stand
EnchantTable minecraft:enchanting_table
Airportal minecraft:end_portal
Beacon minecraft:beacon
Skull minecraft:skull
DLDetector minecraft:daylight_detector
Hopper minecraft:hopper
Comparator minecraft:comparator
FlowerPot minecraft:flower_pot
Banner minecraft:banner
Structure minecraft:structure_block
EndGateway minecraft:end_gateway
Control minecraft:command_block

0x0a block_action (Block Action / BLOCK_EVENT)

For piston blocks (block type IDs 33 and 29), ViaVersion optionally cancels the block action packet entirely when isPistonAnimationPatch is enabled, to suppress rendering glitches on 1.10 clients watching 1.11 servers. This is a ViaVersion compat workaround, not a protocol format change. Source: Protocol1_10To1_11.java lines 87105.

0x19 named_sound_effect (Named Sound Effect / SOUND)

The sound ID space was renumbered. ViaVersion getNewSoundId() (Protocol1_10To1_11.java lines 190217) documents the shifts:

Range Change
ID 196 Removed entirely (experience orb pickup sound)
IDs ≥ 85 +2 (shulker box sounds inserted)
IDs ≥ 176 +1 (guardian flop sound inserted)
IDs ≥ 197 +8 (evocation sounds: 8 new IDs)
IDs ≥ 207 1 (accounts for the removed ID 196 orb sound)
IDs ≥ 279 +9 (llama sounds: 9 new IDs)
IDs ≥ 296 +1 (mule chest sound inserted)
IDs ≥ 390 +4 (vex sounds: 4 new IDs)
IDs ≥ 400 +3 (vindication illager sounds: 3 new IDs)
IDs ≥ 450 +1 (elytra sound inserted)
IDs ≥ 455 +1 (empty bottle sound inserted)
IDs ≥ 470 +1 (totem use sound inserted)

Play — Serverbound

0x08 block_place (Use Item On / PLAYER_BLOCK_PLACEMENT)

The cursor position fields cursorX/Y/Z changed from signed byte (i8, encoded as fixed-point ×16) to float (f32):

Version cursorX/Y/Z type
1.10 (210) i8 (signed byte, value × 16 ÷ 16.0 to recover float)
1.11 (315) f32 (IEEE 754 float)

Source: minecraft-data/data/pc/1.10/protocol.json packet_block_place.cursorX = "i8" vs 1.11/protocol.json cursorX = "f32". Confirmed by ViaVersion Protocol1_10To1_11.java lines 162173:

private static final ValueTransformer<Float, Short> toOldByte = new ValueTransformer<>(Types.UNSIGNED_BYTE) {
    public Short transform(PacketWrapper wrapper, Float inputValue) {
        return (short) (inputValue * 16);
    }
};
// ...
map(Types.FLOAT, toOldByte);  // cursorX
map(Types.FLOAT, toOldByte);  // cursorY
map(Types.FLOAT, toOldByte);  // cursorZ

The transformer multiplies the incoming float by 16 and casts to byte to send the old format to 1.10 servers.

0x02 chat (Chat Message)

The server-side chat message length limit was raised from 100 to 256 characters. ViaVersion truncates outgoing messages to 100 characters when sending to 1.10 servers. Source: Protocol1_10To1_11.java lines 175187 and minecraft.wiki 1.11 release notes (fetched 2026-06-19).

Entity type ID remapping and NBT namespace migration

1.11 was the first version to apply a comprehensive entity ID/name restructure. Two changes happened simultaneously:

  1. Numeric IDs were reorganised: Several sub-types previously encoded via metadata (elder guardian, wither skeleton, stray, husk, zombie villager, skeleton horse, zombie horse, donkey, mule) became distinct entity type IDs. In 1.10, only one EntityHorse type existed (ID 100); in 1.11, five separate IDs exist: horse (100), donkey (31), mule (32), skeleton horse (28), zombie horse (29). Similarly the single Skeleton (51) split into skeleton (51), wither skeleton (5), and stray (6). This is why ViaVersion's rewriteEntityType() in EntityPacketRewriter1_11.java reads metadata index 12 (skeleton sub-type), 13 (zombie sub-type), or 14 (horse sub-type) to decide the correct new entity ID.

  2. Entity save-data names were namespaced: All entity NBT id strings were migrated from PascalCase (EntityHorse, LavaSlime, MushroomCow, etc.) to minecraft:snake_case (horse, magma_cube, mooshroom, etc.). Full mapping in EntityMappings1_11.java in v1_10to1_11/data/ (74 entries). This affects spawn eggs (item 383) and monster spawner block entities.

New mob entity type IDs in 1.11 (minecraft-data 1.11/entities.json):

Entity Type ID (mob) Object ID
evocation_fangs 33 79
evocation_illager (evoker) 34
vex 35
vindication_illager (vindicator) 36
llama 103
llama_spit 104 68
zombie_villager 27

Item changes (1.10 → 1.11)

New items added (minecraft-data 1.11/items.json diff vs 1.10/items.json):

Item Notes
observer Block + item; IDs 218234 range on server
white_shulker_box black_shulker_box 16 coloured variants
totem Totem of undying
shulker_shell Crafting ingredient

ViaVersion replaces any of these items (IDs 218234, 449, 450) with stone (ID 1) when sending to 1.10 servers. Source: ItemPacketRewriter1_11.java lines 9398.

Item NBT: enchantment glint behaviour change

In 1.10, an item with an empty ench list tag ([]) displayed an enchantment glint. In 1.11+, the list must contain at least one element. ViaVersion adds a dummy compound entry to empty ench tags when sending to 1.10 clients (and removes it on the server path). Source: ItemPacketRewriter1_11.java lines 6572.

Item NBT: negative amount handling

1.11 servers can send items with amount <= 0 to indicate "nothing here" in certain contexts. 1.10 clients interpret amount 0 as a bug. ViaVersion stores the real amount in an NBT tag (VV|Amount) and sets amount = 1 before forwarding to old clients. Source: ItemPacketRewriter1_11.java lines 4956; commit d0ed52878 Save negative item amounts in 1.10->1.11.


Per-patch: 315 (1.11) vs 316 (1.11.1 and 1.11.2)

1.11.1 — protocol 316 (2016-12-20)

Gameplay additions (minecraft.wiki 1.11.1, fetched 2026-06-19):

  • Iron nuggets added (item ID 452, smelting iron tools/armor)
  • Sweeping Edge enchantment added for swords
  • Fireworks now boost elytra-flying players and deal damage on explosion
  • Mending and Infinity enchantments became mutually exclusive on bows
  • 41 bugs fixed

Protocol change — one packet:

Only the serverbound SET_CREATIVE_MODE_SLOT (0x18) was affected. ViaVersion Protocol1_11To1_11_1 (v1_11to1_11_1) registers exactly one handler — ItemPacketRewriter1_11_1.registerPackets() which registers only registerSetCreativeModeSlot. The rewriter's handleItemToServer replaces item ID 452 (iron nugget) with stone (ID 1) when sending to 1.11 servers that do not know about that item.

Source: v1_11to1_11_1/Protocol1_11To1_11_1.java (only itemRewriter.register() called, no other packet registrations); v1_11to1_11_1/rewriter/ItemPacketRewriter1_11_1.java lines 3648.

ViaVersion git log for v1_11to1_11_1/:

cff9a8715 [ci skip] Update copyright header
9f6e7fa4e [ci skip] Update copyright header
1039b8556 Add remaining item types to item rewriter implementations (#3931)
75d86851c Apply IJ code reformat, rename rewriter methods, change metadata references to entity data
5286efde1 Move type instances out of its enclosing class
501f65e21 Packet and entity type renames
e965e9713 Package/class renames and moves

(git -C /tmp/mcproto-refs/ViaVersion log --oneline -- common/.../protocols/v1_11to1_11_1/ | head -20)

The protocol between 1.11 (315) and 1.11.1 (316) is otherwise identical in every other respect. No packet IDs changed, no fields changed in any other packet.

1.11.2 — protocol 316 (2016-12-21)

1.11.2 shares the same protocol number (316) as 1.11.1. minecraft-data confirms: data/pc/1.11.2/version.json"version": 316. The 1.11.2 directory in minecraft-data contains only protocolComments.json, sounds.json (493 sounds), and version.json — no separate protocol.json, confirming no protocol difference from 1.11.1.

Gameplay: one block change (cobblestone walls can no longer be jumped over) and 24 bug fixes. Source: minecraft.wiki 1.11.2 (fetched 2026-06-19). No protocol-level changes.


Proxy / ViaVersion translation impact

Translating a 1.10 client (210) connecting to a 1.11 server (315) requires all of the following, implemented in v1_10to1_11/:

  1. Entity spawn type field: ADD_MOB type field → downcast varint to unsigned byte before forwarding to 1.10 client.
  2. Entity type splitting: ViaVersion must read entity metadata on spawn to determine which 1.11 entity type the 1.10 monolithic type maps to (e.g. reading skeleton sub-type metadata index 12 to emit wither_skeleton vs skeleton vs stray to old clients).
  3. Title action bar shift: Decrement action index by 1 for any value ≥ 2 when sending to 1.10 clients (so the new action bar action 2 is dropped; existing times/hide/reset shift back).
  4. Collect pickup count: Synthesise (drop) the new pickupItemCount field when forwarding to 1.10 clients.
  5. Block placement cursor: Convert f32 cursor fields to i8 (×16) when forwarding serverbound to 1.11 servers from 1.10 clients.
  6. Block entity NBT: Translate all block entity id tags from minecraft:snake_case → PascalCase on the way to 1.10 clients (and vice versa serverbound).
  7. Entity NBT names: Translate entity names in spawn eggs and spawner block entities.
  8. Sound IDs: Remap or cancel sound effect IDs per the offset table.
  9. Potion splash effect IDs: Remap effect 2002 data values and redirect instant potions to new effect ID 2007.
  10. Item ID blocking: Block unknown items (IDs 218234, 449, 450) by replacing with stone before forwarding to 1.10 servers.
  11. Enchantment glint compat: Inject dummy ench entry for empty-list items destined for 1.10 clients.
  12. Chat length truncation: Trim outgoing chat to 100 chars for 1.10 servers.

Translating a 1.11 client (315) connecting to a 1.11.1 server (316), or vice versa, requires only:

  • Block item ID 452 (iron nugget) in creative-mode slot packets sent to 1.11 (315) servers.

No entity, sound, block entity, or packet-structure translation is needed across the 315→316 boundary.

ViaVersion git log for v1_10to1_11/ (selected relevant commits):

7b097b3e5 Strip trailing on chat messages in 1.10->1.11 (#4686)
3ba86741f Send default entity data for items in 1.10->1.11 (#4265)
5287d4fb4 Fix enchantment glint behaviour in 1.10->1.11 (#4156)
c5dc5b2bf Actually restrict velocity change to fishing hooks
1ff3035bc Make 1.10->1.11 fishing hook position desync slightly less bad
d0ed52878 Save negative item amounts in 1.10->1.11 (#3921)
ae3042074 Add trade list rewriter functions to ItemRewriter (#3926)
8f8f5e72c Default rewriter registrations across protocols

(git -C /tmp/mcproto-refs/ViaVersion log --oneline -- common/.../protocols/v1_10to1_11/ | head -20)


VERIFY flags

  • The exact IDs for the 16 shulker box item variants (listed as 218234 in `ItemPacketRewriter1_11.java` lines 9394) — the comment says `item.identifier() >= 218 && item.identifier() <= 234` which is 17 values (218..234 inclusive), but only 16 colors exist. One of the 17 slots may be the shulker shell or observer. Confirm against `1.11/items.json` item ID table.
  • Fishing hook velocity scaling change (noted in ViaVersion commit `1ff3035bc` and code `tryFixFishingHookVelocity` which multiplies x/z by 1.33 and y by 1.2) — whether this is a documented protocol change or solely a ViaVersion approximation fix is unclear from the code comment ("TODO Fix properly").
  • Chat length limit change from 100 to 256: wiki says 256; ViaVersion truncates to 100 for 1.10 servers. Confirm the exact 1.11 server-side maximum from protocol spec or `PacketDecoder`.