Difference between revisions of "Pre-release protocol"

From wiki.vg
Jump to navigation Jump to search
(Add packet id changes)
(Updated to 1.21-pre2)
 
(251 intermediate revisions by 31 users not shown)
Line 1: Line 1:
This page documents the changes from the [[Protocol|last stable Minecraft release]] (currently [[Protocol version numbers|1.15.2, protocol 578]]) to the current pre-release (currently [[Protocol version numbers|20w22a, protocol 719]]). Note that this page contains bleeding-edge information that may not be completely or correctly documented.
+
This page documents the changes from the [[Protocol|last stable Minecraft release]] (currently [[Protocol version numbers|1.20.6, protocol 766]]) to the current pre-release (currently [[Protocol version numbers|1.21-pre2, protocol {{Snapshot PVN|1073742024}}]]). Note that this page contains bleeding-edge information that may not be completely or correctly documented.
  
 
One who wishes to commandeer the merging of this into [[Protocol]] when an update is made must be sure to respect any changes that may have occurred to the respective packets there.
 
One who wishes to commandeer the merging of this into [[Protocol]] when an update is made must be sure to respect any changes that may have occurred to the respective packets there.
Line 9: Line 9:
 
=== Data types ===
 
=== Data types ===
  
The UUID type is now also sometimes encoded by the Notchian server as an array of four 32-bit integers, from most significant to least significant (matching the new format used on entity NBT).  This representation is identical to using 16 bytes, two 64-bit integers, or one 128-bit integers.
+
No changes documented so far.
  
 
=== Packets ===
 
=== Packets ===
Line 18: Line 18:
 
  !colspan="2"| Documentation
 
  !colspan="2"| Documentation
 
  |-
 
  |-
!colspan="4"| Handshaking serverbound
+
!colspan="4"| Configuration clientbound
{{PacketList|0x00|Handshake}}
+
{{PacketList|0x0F|Clientbound Report Details (configuration)|rel=added}}
 +
{{PacketList|0x10|Clientbound Server Links (configuration)|rel=added}}
 
  |-
 
  |-
!colspan="4"| Play clientbound
+
!colspan="4"| Play clientbound
{{PacketList|{{Change|0x0F|0x0E}}|Chat Message (clientbound)}}
+
{{PacketList|0x7A|Clientbound Report Details (play)|rel=added}}
{{PacketList|0x22|Chunk Data}}
+
{{PacketList|0x7B|Clientbound Server Links (play)|rel=added}}
{{PacketList|{{Change|0x26|0x25}}|Join Game}}
 
{{PacketList|0x3B|Respawn}}
 
{{PacketList|{{Change|0x0E|0x0D}}|Set Difficulty|pre=unchanged}}
 
{{PacketList|{{Change|0x17|0x16}}|Set Slot|pre=unchanged}}
 
{{PacketList|{{Change|0x1B|0x1A}}|Disconnect (play)|pre=unchanged}}
 
{{PacketList|{{Change|0x21|0x20}}|Keep Alive (clientbound)|pre=unchanged}}
 
{{PacketList|{{Change|0x34|0x33}}|Player Info|pre=unchanged}}
 
{{PacketList|{{Change|0x36|0x35}}|Player Position And Look (clientbound)|pre=unchanged}}
 
{{PacketList|{{Change|0x40|0x3F}}|Held Item Change (clientbound)|pre=unchanged}}
 
{{PacketList|{{Change|0x4E|0x43}}|Spawn Position|pre=unchanged}}
 
{{PacketList|{{Change|0x43|0x44}}|Display Scoreboard|pre=unchanged}}
 
{{PacketList|{{Change|0x44|0x45}}|Entity Metadata|pre=unchanged}}
 
{{PacketList|{{Change|0x45|0x46}}|Attach Entity|pre=unchanged}}
 
{{PacketList|{{Change|0x46|0x47}}|Entity Velocity|pre=unchanged}}
 
{{PacketList|{{Change|0x47|0x48}}|Entity Equipment|pre=unchanged}}
 
{{PacketList|{{Change|0x48|0x49}}|Set Experience|pre=unchanged}}
 
{{PacketList|{{Change|0x49|0x4A}}|Update Health|pre=unchanged}}
 
{{PacketList|{{Change|0x4A|0x4B}}|Scoreboard Objective|pre=unchanged}}
 
{{PacketList|{{Change|0x4B|0x4C}}|Set Passengers|pre=unchanged}}
 
{{PacketList|{{Change|0x4C|0x4D}}|Teams|pre=unchanged}}
 
{{PacketList|{{Change|0x4D|0x4E}}|Update Score|pre=unchanged}}
 
{{PacketList|0x59|Entity Properties}}
 
 
  |-
 
  |-
!colspan="4"| Play serverbound
+
|}
{{PacketList|0x0F|Generate Structure|rel=added}}
 
{{PacketList|{{change|0x0F|0x10}}|Keep Alive (serverbound)|pre=unchanged}}
 
{{PacketList|{{change|0x10|0x11}}|Lock Difficulty|pre=unchanged}}
 
{{PacketList|{{change|0x11|0x12}}|Player Position|pre=unchanged}}
 
{{PacketList|{{change|0x12|0x13}}|Player Position And Rotation (serverbound)|pre=unchanged}}
 
{{PacketList|{{change|0x13|0x14}}|Player Rotation|pre=unchanged}}
 
{{PacketList|{{change|0x14|0x15}}|Player Movement|pre=unchanged}}
 
{{PacketList|{{change|0x15|0x16}}|Vehicle Move (serverbound)|pre=unchanged}}
 
{{PacketList|{{change|0x16|0x17}}|Steer Boat|pre=unchanged}}
 
{{PacketList|{{change|0x17|0x18}}|Pick Item|pre=unchanged}}
 
{{PacketList|{{change|0x18|0x19}}|Craft Recipe Request|pre=unchanged}}
 
{{PacketList|{{change|0x19|0x1A}}|Player Abilities (serverbound)|pre=unchanged}}
 
{{PacketList|{{change|0x1A|0x1B}}|Player Digging|pre=unchanged}}
 
{{PacketList|{{change|0x1B|0x1C}}|Entity Action|pre=unchanged}}
 
{{PacketList|{{change|0x1C|0x1D}}|Steer Vehicle|pre=unchanged}}
 
{{PacketList|{{change|0x1D|0x1E}}|Recipe Book Data|pre=unchanged}}
 
{{PacketList|{{change|0x1E|0x1F}}|Name Item|pre=unchanged}}
 
{{PacketList|{{change|0x1F|0x20}}|Resource Pack Status|pre=unchanged}}
 
{{PacketList|{{change|0x20|0x21}}|Advancement Tab|pre=unchanged}}
 
{{PacketList|{{change|0x21|0x22}}|Select Trade|pre=unchanged}}
 
{{PacketList|{{change|0x22|0x23}}|Set Beacon Effect|pre=unchanged}}
 
{{PacketList|{{change|0x23|0x24}}|Held Item Change (serverbound)|pre=unchanged}}
 
{{PacketList|{{change|0x24|0x25}}|Update Command Block|pre=unchanged}}
 
{{PacketList|{{change|0x25|0x26}}|Update Command Block Minecart|pre=unchanged}}
 
{{PacketList|{{change|0x26|0x27}}|Creative Inventory Action|pre=unchanged}}
 
{{PacketList|{{change|0x27|0x28}}|Update Jigsaw Block}}
 
{{PacketList|{{change|0x28|0x29}}|Update Structure Block|pre=unchanged}}
 
{{PacketList|{{change|0x29|0x2A}}|Update Sign|pre=unchanged}}
 
{{PacketList|{{change|0x2A|0x2B}}|Animation (serverbound)|pre=unchanged}}
 
{{PacketList|{{change|0x2B|0x2C}}|Spectate|pre=unchanged}}
 
{{PacketList|{{change|0x2C|0x2D}}|Player Block Placement|pre=unchanged}}
 
{{PacketList|{{change|0x2D|0x2E}}|Use Item|pre=unchanged}}
 
|-
 
!colspan="4"| Login clientbound
 
{{PacketList|0x02|Login Success}}
 
|}
 
  
== New/modified data types ==
+
== Handshake ==
  
 
No changes so far.
 
No changes so far.
  
== Entity Metadata ==
+
== Status ==
 
 
{{#vardefine:meta_prerelease|1}}
 
 
 
=== FishingHook ===
 
 
 
{{Metadata inherit|FishingHook|inherits=Entity|start_at=7}}
 
 
 
{| class="wikitable"
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| VarInt
 
|colspan="2"| Hooked entity id + 1, or 0 if there is no hooked entity
 
| 0
 
|- {{Added}}
 
| {{Metadata id|added}}
 
| Boolean
 
|colspan="2"| Is catchable
 
| False
 
|}
 
 
 
=== Abstract Arrow ===
 
 
 
{{Metadata inherit|Abstract Arrow|inherits=Entity|start_at=7}}
 
 
 
Abstract base class for [[#Tipped Arrow|Tipped Arrow]] (which is used for regular arrows as well as tipped ones) and [[#Spectral Arrow|Spectral Arrow]].
 
 
 
{| class="wikitable"
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| rowspan="3" | {{Metadata id|}}
 
| rowspan="3" | Byte
 
! Bit mask
 
! Meaning
 
| rowspan="3" | 0
 
|-
 
| 0x01
 
| Is critical
 
|-
 
| 0x02
 
| Is noclip (used by loyalty tridents when returning)
 
|- {{removed}}
 
| {{Metadata id|removed}}
 
| OptUUID
 
|colspan="2"| Unused
 
| Empty
 
|-
 
| {{Metadata id|}}
 
| Byte
 
|colspan="2"| Peircing level
 
| 0
 
|}
 
 
 
=== Tipped Arrow ===
 
 
 
{{Metadata inherit|Tipped Arrow|inherits=Abstract Arrow}}
 
 
 
Used for both tipped and regular arrows.  If not tipped, then color is set to -1 and no tipped arrow particles are used.
 
 
 
{| class="wikitable"
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| VarInt
 
|colspan="2"| Color (-1 for no particles)
 
| -1
 
|}
 
 
 
=== Spectral Arrow ===
 
 
 
{{Metadata inherit|Spectral Arrow|inherits=Abstract Arrow}}
 
 
 
No additional metadata.
 
 
 
=== Trident ===
 
 
 
{{Metadata inherit|Trident|inherits=Abstract Arrow}}
 
 
 
{| class="wikitable"
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| VarInt
 
|colspan="2"| Loyalty level (enchantment)
 
| 0
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Has enchantment glint
 
| False
 
|}
 
 
 
=== Strider ===
 
 
 
{{Metadata inherit|Strider|inherits=Animal|start_at=16}}
 
 
 
{| class="wikitable" {{added}}
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| VarInt
 
|colspan="2"| Total time to "boost" with warped fungus on a stick for
 
| 0
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Should display name tag (true unless riding a vehicle or on or in a block tagged with strider_warm_blocks (default: lava))
 
| false
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Has saddle
 
| false
 
|}
 
 
 
=== Hoglin ===
 
 
 
{{Metadata inherit|Hoglin|inherits=Animal|start_at=16}}
 
 
 
{| class="wikitable" {{added}}
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Is immune to zombification
 
| false
 
|}
 
 
 
=== Zoglin ===
 
 
 
{{Metadata inherit|Hoglin|inherits=Monster|start_at=15}}
 
 
 
{| class="wikitable" {{added}}
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Is baby
 
| false
 
|}
 
 
 
=== Piglin ===
 
 
 
{{Metadata inherit|Piglin|inherits=Monster|start_at=15}}
 
 
 
{| class="wikitable" {{added}}
 
! Index
 
! Type
 
!style="width: 250px;" colspan="2"| Meaning
 
! Default
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Is baby
 
| false
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Is immune to zombification
 
| false
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Is charging crossbow
 
| false
 
|-
 
| {{Metadata id|}}
 
| Boolean
 
|colspan="2"| Is dancing
 
| false
 
|}
 
 
 
=== {{Change|Zombie Pigman|Zombified Piglin}} ===
 
 
 
{{Metadata inherit|{{Change|Zombie Pigman|Zombified Piglin}}|inherits=Zombie|start_at=18}}
 
 
 
No additional metadata.
 
 
 
== Block Actions ==
 
  
 
No changes so far.
 
No changes so far.
  
== Inventories ==
+
== Login ==
  
 
No changes so far.
 
No changes so far.
  
== Plugin Channels ==
+
== Configuration ==
 
 
No changes so far.
 
 
 
== Play ==
 
  
 
=== Clientbound ===
 
=== Clientbound ===
  
==== Chat Message (clientbound) ====  
+
==== Clientbound Report Details (configuration) ====
  
Identifying the difference between Chat/System Message is important as it helps respect the user's chat visibility options.  See [[Chat#Processing chat|processing chat]] for more info about these positions.
+
Contains a list of key-value text entries that are included in any crash or disconnection report generated during connection to the server.
  
{{warning2|Game info accepts json formatting but does not display it, although the deprecated §-based formatting works.  This is not an issue when using the [[#Title|Title]] packet, so prefer that packet for displaying information in that slot.  See [https://bugs.mojang.com/browse/MC-119145 MC-119145] for more information.}}
+
{| class="wikitable" {{added}}
 
 
{| class="wikitable"
 
 
  ! Packet ID
 
  ! Packet ID
 
  ! State
 
  ! State
 
  ! Bound To
 
  ! Bound To
  ! Field Name
+
  ! colspan="2"| Field Name
  ! Field Type
+
  ! colspan="2"| Field Type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="3"| 0x0F
+
  | rowspan="3"| 0x0F
  |rowspan="3"| Play
+
  | rowspan="3"| Configuration
  |rowspan="3"| Client
+
  | rowspan="3"| Client
  | JSON Data
+
  | colspan="2"| Details Count
  | [[Chat]]
+
| colspan="2"| {{Type|VarInt}} (32)
  | Limited to 32767 bytes
+
| The number of details in the following array.
 +
  |-
 +
| rowspan="2"| Details
 +
| Title
 +
| rowspan="2"| {{Type|Array}}
 +
| {{Type|String}} (128)
 +
  |
 
  |-
 
  |-
  | Position
+
  | Description
  | Byte
+
  | {{Type|String}} (4096)
| 0: chat (chat box), 1: system message (chat box), 2: game info (above hotbar).
+
  |
|- {{added}}
+
|}
  | Sender
 
| UUID
 
| Used by the Notchian client for the disableChat launch option. Setting both longs to 0 will always display the message regardless of the setting.
 
|}
 
  
==== Chunk Data ====
+
==== Clientbound Server Links (configuration) ====
{{Main|Chunk Format}}
 
{{See also|#Unload Chunk}}
 
  
{{Need Info|How do biomes work now?  The biome change happened at the same time as the seed change, but it's not clear how/if biomes could be computed given that it's not the actual seed...  ([https://www.reddit.com/r/Mojira/comments/e5at6i/a_discussion_for_the_changes_to_how_biomes_are/ /r/mojira discussion] which notes that it seems to be some kind of interpolation, and 3D biomes are only used in the nether)}}
+
This packet contains a list of links that the Notchian client will display in the menu available from the pause menu. Link labels can be built-in or custom (i.e., any text).
  
The server only sends skylight information for chunk pillars in the {{Minecraft Wiki|Overworld}}, it's up to the client to know in which dimenison the player is currently located. You can also infer this information from the primary bitmask and the amount of uncompressed bytes sent.  This packet also sends all block entities in the chunk (though sending them is not required; it is still legal to send them with [[#Update Block Entity|Update Block Entity]] later).
+
{| class="wikitable" {{added}}
 
 
{| class="wikitable"
 
 
  ! Packet ID
 
  ! Packet ID
 
  ! State
 
  ! State
 
  ! Bound To
 
  ! Bound To
  ! Field Name
+
  ! colspan="2"| Field Name
  ! Field Type
+
  ! colspan="2"| Field Type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="10"| 0x22
+
  | rowspan="4"| 0x10
  |rowspan="10"| Play
+
  | rowspan="4"| Configuration
  |rowspan="10"| Client
+
  | rowspan="4"| Client
  | Chunk X
+
  | colspan="2"| Links Count
| Int
+
  | colspan="2"| {{Type|VarInt}}
  | Chunk coordinate (block coordinate divided by 16, rounded down)
+
  | The number of links in the following array.
|-
 
| Chunk Z
 
| Int
 
| Chunk coordinate (block coordinate divided by 16, rounded down)
 
|-
 
| Full chunk
 
| Boolean
 
| See [[Chunk Format#Full chunk|Chunk Format]]
 
|-
 
| Primary Bit Mask
 
| VarInt
 
  | Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15).
 
|-
 
| Heightmaps
 
| [[NBT]]
 
| Compound containing one long array named <code>MOTION_BLOCKING</code>, which is a heightmap for the highest solid block at each position in the chunk (as a compacted long array with 256 entries at 9 bits per entry totaling 36 longs). The Notchian server also adds a <code>WORLD_SURFACE</code> long array, the purpose of which is unknown, but it's not required for the chunk to be accepted.
 
|-
 
| Biomes
 
| Optional array of Integer
 
| 1024 biome IDs, ordered by x then z then y, in 4&times;4&times;4 blocks.  Not present if full chunk is false.
 
|-
 
| Size
 
| VarInt
 
| Size of Data in bytes
 
 
  |-
 
  |-
  | Data
+
  | rowspan="3"| Links
  | Byte array
+
| Is built-in
  | See [[Chunk Format#Data structure|data structure]] in Chunk Format
+
  | rowspan="3"| {{Type|Array}}
 +
  | {{Type|Boolean}}
 +
| Determines if the following label is built-in (from enum) or custom (text component).
 
  |-
 
  |-
  | Number of block entities
+
  | Label
  | VarInt
+
  | {{Type|VarInt}} {{Type|Enum}} / {{Type|Text Component}}
  | Number of elements in the following array
+
  | See below.
 
  |-
 
  |-
  | Block entities
+
  | URL
  | Array of [[NBT|NBT Tag]]
+
  | {{Type|String}}
  | All block entities in the chunk.  Use the x, y, and z tags in the NBT to determine their positions.
+
  | Valid URL.
|}
+
|}
  
Note that the Notchian client requires an [[#Update View Position|Update View Position]] packet when it crosses a chunk border, otherwise it'll only display render distance + 2 chunks around the chunk it spawned in.
 
  
{{Change||The compacted array format has been adjusted so that individual entries no longer span across multiple longs, affecting the main data array and heightmaps.}}
+
{| class="wikitable" {{added}}
 
+
  ! ID
==== Join Game ====
+
  ! Name
 
 
See [[Protocol Encryption]] for information on logging in.
 
 
 
{| class="wikitable"
 
  ! Packet ID
 
  ! State
 
! Bound To
 
! Field Name
 
! Field Type
 
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="15"| 0x26
+
  | 0
|rowspan="15"| Play
+
  | Bug Report
|rowspan="15"| Client
+
  | Displayed on connection error screen; included as a comment in the disconnection report.
| Entity ID
 
  | Int
 
  | The player's Entity ID (EID)
 
 
  |-
 
  |-
  | Gamemode
+
  | 1
| Unsigned Byte
+
  | Community Guidelines
| 0: Survival, 1: Creative, 2: Adventure, 3: Spectator. Bit 3 (0x8) is the hardcore flag.
+
  |  
  |- {{Added}}
 
| World Count
 
| VarInt
 
| Size of the following array
 
|- {{Added}}
 
| World Names
 
| Array of Identifier
 
| Identifiers for all worlds on the server
 
|- {{Added}}
 
| Dimension Codec
 
| [[NBT|NBT Tag Compound]]
 
  | This CompoundTag contains a ListTag named "dimension". The ListTag should contain CompoundTags with named StringTags "key" and "element". The full extent of these is still unknown, but the tag represents a dimension registry. See below for the vanilla default.
 
 
  |-
 
  |-
  | Dimension
+
  | 2
  | {{change|Int Enum|Identifier}}
+
  | Support
| {{change|-1: The Nether, 0: The Overworld, 1: The End|Valid dimensions are defined per dimension registry sent before this}}
+
  |  
|- {{Added}}
 
| World Name
 
| Identifier
 
  | Name of the world being spawned into
 
 
  |-
 
  |-
  | Hashed seed
+
  | 3
  | Long
+
  | Status
  | First 8 bytes of the SHA-256 hash of the world's seed.
+
  |  
 
  |-
 
  |-
  | Max Players
+
  | 4
  | Unsigned Byte
+
  | Feedback
  | Was once used by the client to draw the player list, but now is ignored
+
  |  
|- {{Removed}}
 
| Level Type
 
| String Enum (16)
 
| default, flat, largeBiomes, amplified, customized, buffet, default_1_1
 
 
  |-
 
  |-
  | View Distance
+
  | 5
  | VarInt
+
  | Community
  | Render distance (2-32)
+
  |  
 
  |-
 
  |-
  | Reduced Debug Info
+
  | 6
  | Boolean
+
  | Website
  | If true, a Notchian client shows reduced information on the {{Minecraft Wiki|debug screen}}.  For servers in development, this should almost always be false.
+
  |  
 
  |-
 
  |-
  | Enable respawn screen
+
  | 7
  | Boolean
+
  | Forums
  | Set to false when the doImmediateRespawn gamerule is true
+
  |  
|- {{Added}}
 
| Is Debug
 
| Boolean
 
| True if the world is a {{Minecraft Wiki|debug mode}} world; debug mode worlds cannot be modified and have predefined blocks
 
|- {{Added}}
 
| Is Flat
 
| Boolean
 
| True if the world is a {{Minecraft Wiki|superflat}} world; flat worlds have different void fog and a horizon at y=0 instead of y=63
 
|}
 
Example of Dimension codec CompoundTag sent by the server:
 
    ListTag (Type: CompoundTag) "dimension":
 
        CompoundTag:
 
            StringTag "key" value: 'minecraft:overworld'
 
            StringTag "element" value: 'minecraft:overworld'
 
        CompoundTag:
 
            StringTag "key" value: 'minecraft:the_nether'
 
            StringTag "element" value: 'minecraft:the_nether'
 
        CompoundTag:
 
            StringTag "key" value: 'minecraft:the_end'
 
            StringTag "element" value: 'minecraft:the_end'
 
 
 
==== Respawn ====
 
 
 
To change the player's dimension (overworld/nether/end), send them a respawn packet with the appropriate dimension, followed by prechunks/chunks for the new dimension, and finally a position and look packet. You do not need to unload chunks, the client will do it automatically.
 
 
 
{| class="wikitable"
 
! Packet ID
 
! State
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="8"| 0x3B
+
  | 8
|rowspan="8"| Play
+
  | News
|rowspan="8"| Client
+
  |  
| Dimension
 
| {{change|Int Enum|Identifier}}
 
| {{change|-1: The Nether, 0: The Overworld, 1: The End|Valid dimensions are defined per dimension registry sent in [[#Join Game|Join Game]]}}
 
|- {{Added}}
 
| World Name
 
  | Identifier
 
  | Name of the world being spawned into
 
 
  |-
 
  |-
  | Hashed seed
+
  | 9
  | Long
+
  | Announcements
  | First 8 bytes of the SHA-256 hash of the world's seed.
+
  |  
 
  |-
 
  |-
| Gamemode
 
| Unsigned Byte
 
| 0: survival, 1: creative, 2: adventure, 3: spectator. The hardcore flag is not included
 
|- {{Removed}}
 
| Level Type
 
| String (16)
 
| Same as [[#Join Game|Join Game]]
 
|- {{Added}}
 
| Is Debug
 
| Boolean
 
| True if the world is a {{Minecraft Wiki|debug mode}} world; debug mode worlds cannot be modified and have predefined blocks
 
|- {{Added}}
 
| Is Flat
 
| Boolean
 
| True if the world is a {{Minecraft Wiki|superflat}} world; flat worlds have different void fog and a horizon at y=0 instead of y=63
 
|- {{added}}
 
| Copy metadata
 
| Boolean
 
| If false, metadata is reset on the respawned player entity.  Set to true for dimension changes (including the dimension change triggered by sending client status perform respawn to exit the end poem/credits), and false for normal respawns.
 
 
  |}
 
  |}
  
{{Need Info|Does the new World Name field resolve this same-dimension issue?}}
+
=== Serverbound ===
  
{{Warning2|Avoid changing player's dimension to same dimension they were already in unless they are dead. If you change the dimension to one they are already in, weird bugs can occur, such as the player being unable to attack other players in new world (until they die and respawn).
+
No changes so far.
  
If you must respawn a player in the same dimension without killing them, send two respawn packets, one to a different world and then another to the world you want. You do not need to complete the first respawn; it only matters that you send two packets.}}
+
== Play ==
 +
 
 +
=== Clientbound ===
  
==== Entity Properties ====
+
==== Clientbound Report Details (play) ====
  
Sets {{Minecraft Wiki|Attribute|attributes}} on the given entity.
+
Contains a list of key-value text entries that are included in any crash or disconnection report generated during connection to the server.
  
{| class="wikitable"
+
{| class="wikitable" {{added}}
 
  ! Packet ID
 
  ! Packet ID
 
  ! State
 
  ! State
 
  ! Bound To
 
  ! Bound To
  !colspan="2"| Field Name
+
  ! colspan="2"| Field Name
  !colspan="2"| Field Type
+
  ! colspan="2"| Field Type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="6"| 0x59
+
  | rowspan="3"| 0x7A
  |rowspan="6"| Play
+
  | rowspan="3"| Configuration
  |rowspan="6"| Client
+
  | rowspan="3"| Client
  |colspan="2"| Entity ID
+
  | colspan="2"| Details Count
  |colspan="2"| VarInt
+
  | colspan="2"| {{Type|VarInt}} (32)
  |  
+
  | The number of details in the following array.
 
  |-
 
  |-
  |colspan="2"| Number Of Properties
+
  | rowspan="2"| Details
  |colspan="2"| Int
+
  | Title
  | Number of elements in the following array
+
| rowspan="2"| {{Type|Array}}
 +
| {{Type|String}} (128)
 +
  |
 
  |-
 
  |-
  |rowspan="4"| Property
+
  | Description
| Key
+
  | {{Type|String}} (4096)
|rowspan="4"| Array
+
  |
  | {{Change|String (64)|Identifier}}
+
|}
| See below
 
|-
 
| Value
 
| Double
 
  | See below
 
|-
 
| Number Of Modifiers
 
| VarInt
 
| Number of elements in the following array
 
|-
 
| Modifiers
 
| Array of Modifier Data
 
| See {{Minecraft Wiki|Attribute#Modifiers}}. Modifier Data defined below.
 
|}
 
  
Known Key values (see also {{Minecraft Wiki|Attribute#Modifiers}}):
+
==== Clientbound Server Links (play) ====
  
{| class="wikitable"
+
This packet contains a list of links that the Notchian client will display in the menu available from the pause menu. Link labels can be built-in or custom (i.e., any text).
|-
 
! Key
 
! Default
 
! Min
 
! Max
 
! Label
 
|-
 
| {{change|generic.maxHealth|generic.max_health}}
 
| 20.0
 
| 0.0
 
| 1024.0
 
| Max Health
 
|-
 
| {{change|generic.followRange|generic.follow_range}}
 
| 32.0
 
| 0.0
 
| 2048.0
 
| Follow Range
 
|-
 
| {{change|generic.knockbackResistance|generic.knockback_resistance}}
 
| 0.0
 
| 0.0
 
| 1.0
 
| Knockback Resistance
 
|-
 
| {{change|generic.movementSpeed|generic.movement_speed}}
 
| 0.7
 
| 0.0
 
| 1024.0
 
| Movement Speed
 
|-
 
| {{change|generic.attackDamage|generic.attack_damage}}
 
| 2.0
 
| 0.0
 
| 2048.0
 
| Attack Damage
 
|-
 
| {{change|generic.attackSpeed|generic.attack_speed}}
 
| 4.0
 
| 0.0
 
| 1024.0
 
| Attack Speed
 
|-
 
| {{change|generic.flyingSpeed|generic.flying_speed}}
 
| 0.4
 
| 0.0
 
| 1024.0
 
| Flying Speed
 
|-
 
| generic.armor
 
| 0.0
 
| 0.0
 
| 30.0
 
| Armor
 
|-
 
| {{change|generic.armorToughness|generic.armor_toughness}}
 
| 0.0
 
| 0.0
 
| 20.0
 
| Armor Toughness
 
|-
 
| {{change|generic.attackKnockback|generic.attack_knockback}}
 
| 0.0
 
| 0.0
 
| 5.0
 
| &mdash;
 
|-
 
| generic.luck
 
| 0.0
 
| -1024.0
 
| 1024.0
 
| Luck
 
|-
 
| {{change|horse.jumpStrength|horse.jump_strength}}
 
| 0.7
 
| 0.0
 
| 2.0
 
| Jump Strength
 
|-
 
| {{change|zombie.spawnReinforcements|zombie.spawn_reinforcements}}
 
| 0.0
 
| 0.0
 
| 1.0
 
| Spawn Reinforcements Chance
 
|-
 
| generic.reachDistance
 
| 5.0
 
| 0.0
 
| 1024.0
 
| Player Reach Distance (Forge only)
 
|-
 
| forge.swimSpeed
 
| 1.0
 
| 0.0
 
| 1024.0
 
| Swimming Speed (Forge only)
 
|}
 
 
 
Unknown attributes will cause a game crash ([https://bugs.mojang.com/browse/MC-150405 MC-150405]) due to the default minimum being larger than the default value.
 
 
 
''Modifier Data'' structure:
 
 
 
{| class="wikitable"
 
|-
 
! Field Name
 
! Field Type
 
! Notes
 
|-
 
| UUID
 
| UUID
 
|
 
|-
 
| Amount
 
| Double
 
| May be positive or negative
 
|-
 
| Operation
 
| Byte
 
| See below
 
|}
 
 
 
The operation controls how the base value of the modifier is changed.
 
 
 
* 0: Add/subtract amount
 
* 1: Add/subtract amount percent of the current value
 
* 2: Multiply by amount percent
 
 
 
All of the 0's are applied first, and then the 1's, and then the 2's.
 
 
 
=== Serverbound ===
 
 
 
==== Generate Structure ====
 
 
 
Sent when Generate is pressed on the {{Minecraft Wiki|Jigsaw Block}} interface.
 
  
 
{| class="wikitable" {{added}}
 
{| class="wikitable" {{added}}
Line 724: Line 202:
 
  ! State
 
  ! State
 
  ! Bound To
 
  ! Bound To
  ! Field Name
+
  ! colspan="2"| Field Name
  ! Field Type
+
  ! colspan="2"| Field Type
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x0F
+
  | rowspan="4"| 0x7B
  |rowspan="2"| Play
+
  | rowspan="4"| Configuration
  |rowspan="2"| Server
+
  | rowspan="4"| Client
  | Location
+
  | colspan="2"| Links Count
  | Position
+
  | colspan="2"| {{Type|VarInt}}
  | Block entity location
+
  | The number of links in the following array.
 
  |-
 
  |-
  | Levels
+
  | rowspan="3"| Links
  | VarInt
+
| Is built-in
  | Value of the levels slider/max depth to generate
+
| rowspan="3"| {{Type|Array}}
 +
  | {{Type|Boolean}}
 +
  | Determines if the following label is built-in (from enum) or custom (text component).
 
  |-
 
  |-
  | Keep Jigsaws
+
  | Label
  | Boolean
+
  | {{Type|VarInt}} {{Type|Enum}} / {{Type|Text Component}}
  |
+
| See below.
  |}
+
  |-
 +
  | URL
 +
| {{Type|String}}
 +
| Valid URL.
 +
|}
  
==== Update Jigsaw Block ====
+
{| class="wikitable" {{added}}
 
+
  ! ID
Sent when Done is pressed on the {{Minecraft Wiki|Jigsaw Block}} interface.
+
  ! Name
 
 
{| class="wikitable"
 
  ! Packet ID
 
  ! State
 
! Bound To
 
! Field Name
 
! Field Type
 
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="7"| {{Change|0x27|0x28}}
+
  | 0
|rowspan="7"| Play
+
  | Bug Report
|rowspan="7"| Server
+
  | Displayed on connection error screen; included as a comment in the disconnection report.
| Location
+
  |-
  | Position
+
  | 1
  | Block entity location
+
  | Community Guidelines
  |- {{Removed}}
 
  | Attachment type
 
  | Identifier
 
 
  |  
 
  |  
  |- {{Added}}
+
  |-
  | Name
+
  | 2
  | Identifier
+
  | Support
 
  |  
 
  |  
  |- {{Added}}
+
  |-
  | Target
+
  | 3
  | Identifier
+
  | Status
 
  |  
 
  |  
  |-  
+
  |-
  | {{Change|Target pool|Pool}}
+
  | 4
  | Identifier
+
  | Feedback
 
  |  
 
  |  
 
  |-
 
  |-
  | Final state
+
  | 5
  | String
+
  | Community
  | "Turns into" on the GUI, <code>final_state</code> in NBT
+
  |  
|- {{Added}}
 
| Joint type
 
| String
 
| <code>rollable</code> if the attached piece can be rotated, else <code>aligned</code>
 
|}
 
 
 
== Handshaking ==
 
 
 
=== Clientbound ===
 
 
 
There are no clientbound packets in the Handshaking state, since the protocol immediately switches to a different state after the client sends the first packet.
 
 
 
=== Serverbound ===
 
 
 
==== Handshake ====
 
 
 
This causes the server to switch into the target state.
 
 
 
{| class="wikitable"
 
! Packet ID
 
! State
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="4"| 0x00
+
  | 6
|rowspan="4"| Handshaking
+
  | Website
|rowspan="4"| Server
+
  |  
  | Protocol Version
 
  | VarInt
 
| See [[protocol version numbers]] (currently {{change|578|719}})
 
 
  |-
 
  |-
  | Server Address
+
  | 7
  | String
+
  | Forums
  | Hostname or IP, e.g. localhost or 127.0.0.1, that was used to connect. The Notchian server does not use this information. Note that SRV records are a complete redirect, e.g. if _minecraft._tcp.example.com points to mc.example.org, users connecting to example.com will provide mc.example.org as server address in addition to connecting to it.
+
  |  
|-
 
| Server Port
 
| Unsigned Short
 
| Default is 25565.  The Notchian server does not use this information.
 
 
  |-
 
  |-
  | Next State
+
  | 8
  | VarInt Enum
+
  | News
  | 1 for [[#Status|status]], 2 for [[#Login|login]]
+
  |  
|}
 
 
 
== Status ==
 
 
 
=== Clientbound ===
 
 
 
No changes so far.
 
 
 
=== Serverbound ===
 
 
 
No changes so far.
 
 
 
== Login ==
 
 
 
=== Clientbound ===
 
 
 
==== Login Success ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! State
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="2"| 0x02
+
  | 9
|rowspan="2"| Login
+
  | Announcements
  |rowspan="2"| Client
+
  |  
  | UUID
 
| {{Change|String (36)|UUID}}
 
| {{Change|Unlike in other packets, this field contains the UUID as a string with hyphens}}.
 
 
  |-
 
  |-
| Username
 
| String (16)
 
|
 
 
  |}
 
  |}
 
This packet switches the connection state to [[#Play|play]].
 
  
 
=== Serverbound ===
 
=== Serverbound ===
  
 
No changes so far.
 
No changes so far.
 
  
 
[[Category:Minecraft Modern]]
 
[[Category:Minecraft Modern]]

Latest revision as of 10:40, 8 June 2024

This page documents the changes from the last stable Minecraft release (currently 1.20.6, protocol 766) to the current pre-release (currently 1.21-pre2, protocol Snapshot 200). Note that this page contains bleeding-edge information that may not be completely or correctly documented.

One who wishes to commandeer the merging of this into Protocol when an update is made must be sure to respect any changes that may have occurred to the respective packets there.

Contents

Data types

No changes documented so far.

Packets

ID Packet name Documentation
Configuration clientbound
0x0F Clientbound Report Details (configuration) Pre
0x10 Clientbound Server Links (configuration) Pre
Play clientbound
0x7A Clientbound Report Details (play) Pre
0x7B Clientbound Server Links (play) Pre

Handshake

No changes so far.

Status

No changes so far.

Login

No changes so far.

Configuration

Clientbound

Clientbound Report Details (configuration)

Contains a list of key-value text entries that are included in any crash or disconnection report generated during connection to the server.

Packet ID State Bound To Field Name Field Type Notes
0x0F Configuration Client Details Count VarInt (32) The number of details in the following array.
Details Title Array String (128)
Description String (4096)

Clientbound Server Links (configuration)

This packet contains a list of links that the Notchian client will display in the menu available from the pause menu. Link labels can be built-in or custom (i.e., any text).

Packet ID State Bound To Field Name Field Type Notes
0x10 Configuration Client Links Count VarInt The number of links in the following array.
Links Is built-in Array Boolean Determines if the following label is built-in (from enum) or custom (text component).
Label VarInt Enum / Text Component See below.
URL String Valid URL.


ID Name Notes
0 Bug Report Displayed on connection error screen; included as a comment in the disconnection report.
1 Community Guidelines
2 Support
3 Status
4 Feedback
5 Community
6 Website
7 Forums
8 News
9 Announcements

Serverbound

No changes so far.

Play

Clientbound

Clientbound Report Details (play)

Contains a list of key-value text entries that are included in any crash or disconnection report generated during connection to the server.

Packet ID State Bound To Field Name Field Type Notes
0x7A Configuration Client Details Count VarInt (32) The number of details in the following array.
Details Title Array String (128)
Description String (4096)

Clientbound Server Links (play)

This packet contains a list of links that the Notchian client will display in the menu available from the pause menu. Link labels can be built-in or custom (i.e., any text).

Packet ID State Bound To Field Name Field Type Notes
0x7B Configuration Client Links Count VarInt The number of links in the following array.
Links Is built-in Array Boolean Determines if the following label is built-in (from enum) or custom (text component).
Label VarInt Enum / Text Component See below.
URL String Valid URL.
ID Name Notes
0 Bug Report Displayed on connection error screen; included as a comment in the disconnection report.
1 Community Guidelines
2 Support
3 Status
4 Feedback
5 Community
6 Website
7 Forums
8 News
9 Announcements

Serverbound

No changes so far.