Corrected real errors: several 1.7.x release dates, resource_pack_send version, config packet ordering, structured-component count (56), PLAYER_LOADED (1.21.4), entity_sound_effect field order. Confirmed+cited the rest; remaining ~19 items re-marked UNCONFIRMED (third-party/ViaLegacy/26.2 internals unreachable from refs). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
19 KiB
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 (0x00–0x4b) 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.json — toClient 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 71–84: 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 152–162: 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 (0–36) 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 129–156 and data/PotionColorMappings1_11.java — maps 37 old data values to new RGB color integers; marks indices 21–24 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 87–105.
0x19 named_sound_effect (Named Sound Effect / SOUND)
The sound ID space was renumbered. ViaVersion getNewSoundId() (Protocol1_10To1_11.java lines 190–217) 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 162–173:
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 175–187 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:
-
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
EntityHorsetype existed (ID 100); in 1.11, five separate IDs exist: horse (100), donkey (31), mule (32), skeleton horse (28), zombie horse (29). Similarly the singleSkeleton(51) split into skeleton (51), wither skeleton (5), and stray (6). This is why ViaVersion'srewriteEntityType()inEntityPacketRewriter1_11.javareads metadata index 12 (skeleton sub-type), 13 (zombie sub-type), or 14 (horse sub-type) to decide the correct new entity ID. -
Entity save-data names were namespaced: All entity NBT
idstrings were migrated from PascalCase (EntityHorse,LavaSlime,MushroomCow, etc.) tominecraft:snake_case(horse,magma_cube,mooshroom, etc.). Full mapping inEntityMappings1_11.javainv1_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 218–234 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 218–234, 449, 450) with stone (ID 1) when sending to 1.10 servers. Source: ItemPacketRewriter1_11.java lines 93–98.
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 65–72.
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 49–56; 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 36–48.
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/:
- Entity spawn type field:
ADD_MOBtype field → downcast varint to unsigned byte before forwarding to 1.10 client. - 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_skeletonvsskeletonvsstrayto old clients). - 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).
- Collect pickup count: Synthesise (drop) the new
pickupItemCountfield when forwarding to 1.10 clients. - Block placement cursor: Convert
f32cursor fields toi8(×16) when forwarding serverbound to 1.11 servers from 1.10 clients. - Block entity NBT: Translate all block entity
idtags fromminecraft:snake_case→ PascalCase on the way to 1.10 clients (and vice versa serverbound). - Entity NBT names: Translate entity names in spawn eggs and spawner block entities.
- Sound IDs: Remap or cancel sound effect IDs per the offset table.
- Potion splash effect IDs: Remap effect 2002 data values and redirect instant potions to new effect ID 2007.
- Item ID blocking: Block unknown items (IDs 218–234, 449, 450) by replacing with stone before forwarding to 1.10 servers.
- Enchantment glint compat: Inject dummy
enchentry for empty-list items destined for 1.10 clients. - 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)
Resolved verification notes
Shulker box item ID range (218–234): Confirmed against minecraft-data/data/pc/1.11/items.json. The range 218–234 inclusive is 17 values: 218 = observer (the observer block item), 219–234 = the 16 coloured shulker box variants (white_shulker_box through black_shulker_box). totem = 449, shulker_shell = 450 (outside this range). ViaVersion's condition identifier() >= 218 && identifier() <= 234 therefore blocks observer and all 16 shulker boxes — the count discrepancy is explained by the observer occupying the 17th slot, not a second shulker entry. Source: minecraft-data/data/pc/1.11/items.json; ItemPacketRewriter1_11.java lines 93–98.
Fishing hook velocity scaling: The tryFixFishingHookVelocity code (commit 1ff3035bc, "Make 1.10->1.11 fishing hook position desync slightly less bad") carries an inline comment "TODO Fix properly". This is not a documented protocol change — it is a ViaVersion approximation workaround for a position-desync artefact that the author explicitly marked as unresolved. No Mojang protocol spec describes a velocity multiplier change for fishing hooks between 1.10 and 1.11.
Chat length limit (100 → 256): Confirmed from two directions. Protocol1_10To1_11.java lines 182–183 truncate outgoing chat to 100 characters with the comment "100-character limit on older servers", confirming that 1.10 servers enforce a 100-character limit. The 1.11 server-side maximum is 256 characters (minecraft.wiki Java Edition 1.11 release notes, fetched 2026-06-19: "maximum length of chat messages was increased to 256"). ViaVersion's truncation to 100 on the downgrade path is consistent with this delta.