Difference between revisions of "Pre-release protocol"
(fix formatting) |
(→Entity Metadata: Add change (this was from 20w46a).) |
||
Line 35: | Line 35: | ||
{{#vardefine:meta_prerelease|1}} | {{#vardefine:meta_prerelease|1}} | ||
− | + | ||
+ | {{Warning2|Note that other entities have had metadata shifts due to these changes, not shown here.}} | ||
+ | |||
+ | === Entity === | ||
+ | |||
+ | {{metadata inherit|Entity}} | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Index | ||
+ | ! Type | ||
+ | !style="width: 250px;" colspan="2"| Meaning | ||
+ | ! Default | ||
+ | |- | ||
+ | |rowspan="9"| {{Metadata id|}} | ||
+ | |rowspan="9"| Byte | ||
+ | ! Bit mask | ||
+ | ! Meaning | ||
+ | |rowspan="9"| 0 | ||
+ | |- | ||
+ | | 0x01 | ||
+ | | Is on fire | ||
+ | |- | ||
+ | | 0x02 | ||
+ | | Is crouching | ||
+ | |- | ||
+ | | 0x04 | ||
+ | | Unused (previously riding) | ||
+ | |- | ||
+ | | 0x08 | ||
+ | | Is sprinting | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | Is swimming | ||
+ | |- | ||
+ | | 0x20 | ||
+ | | Is invisible | ||
+ | |- | ||
+ | | 0x40 | ||
+ | | has glowing effect | ||
+ | |- | ||
+ | | 0x80 | ||
+ | | Is flying with an {{Minecraft Wiki|elytra}} | ||
+ | |- | ||
+ | | {{Metadata id|}} | ||
+ | | VarInt | ||
+ | |colspan="2"| Air ticks | ||
+ | | 300 | ||
+ | |- | ||
+ | | {{Metadata id|}} | ||
+ | | OptChat | ||
+ | |colspan="2"| Custom name | ||
+ | | empty | ||
+ | |- | ||
+ | | {{Metadata id|}} | ||
+ | | Boolean | ||
+ | |colspan="2"| Is custom name visible | ||
+ | | false | ||
+ | |- | ||
+ | | {{Metadata id|}} | ||
+ | | Boolean | ||
+ | |colspan="2"| Is silent | ||
+ | | false | ||
+ | |- | ||
+ | | {{Metadata id|}} | ||
+ | | Boolean | ||
+ | |colspan="2"| Has no gravity | ||
+ | | false | ||
+ | |- | ||
+ | | {{Metadata id|}} | ||
+ | | Pose | ||
+ | |colspan="2"| Pose | ||
+ | | STANDING | ||
+ | |- {{added}} | ||
+ | | {{Metadata id|added}} | ||
+ | | VarInt | ||
+ | |colspan="2"| Ticks frozen in powdered snow | ||
+ | | 0 | ||
+ | |} | ||
== Block Actions == | == Block Actions == |
Revision as of 23:34, 12 November 2020
This page documents the changes from the last stable Minecraft release (currently 1.16.4, protocol 754) to the current pre-release (currently 20w46a, protocol 1073741830). 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 so far.
Packets
ID | Packet name | Documentation | |
---|---|---|---|
Play serverbound | |||
0x20 | Chunk Data | Current | Pre |
0x23 | Update Light | Current | Pre |
0x25 | Map Data | Current | Pre |
0x38 | Resource Pack Send | Current | Pre |
Handshaking serverbound | |||
0x00 | Handshake | Current | Pre |
New/modified data types
No changes so far.
Entity Metadata
Entity
The base class.
Index | Type | Meaning | Default | |
---|---|---|---|---|
0 | Byte | Bit mask | Meaning | 0 |
0x01 | Is on fire | |||
0x02 | Is crouching | |||
0x04 | Unused (previously riding) | |||
0x08 | Is sprinting | |||
0x10 | Is swimming | |||
0x20 | Is invisible | |||
0x40 | has glowing effect | |||
0x80 | Is flying with an elytra | |||
1 | VarInt | Air ticks | 300 | |
2 | OptChat | Custom name | empty | |
3 | Boolean | Is custom name visible | false | |
4 | Boolean | Is silent | false | |
5 | Boolean | Has no gravity | false | |
6 | Pose | Pose | STANDING | |
7 | VarInt | Ticks frozen in powdered snow | 0 |
Block Actions
No changes so far.
Inventories
No changes so far.
Plugin Channels
No changes so far.
Play
Clientbound
Chunk Data
- Main article: Chunk Format
- See also: #Unload Chunk
The following information needs to be added to this page: | |
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... (/r/mojira discussion which notes that it seems to be some kind of interpolation, and 3D biomes are only used in the nether) |
The server only sends skylight information for chunk pillars in the Overworld, it's up to the client to know in which dimension 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 later).
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x20 | Play | Client | Chunk X | Int | Chunk coordinate (block coordinate divided by 16, rounded down) |
Chunk Z | Int | Chunk coordinate (block coordinate divided by 16, rounded down) | |||
Full chunk | Boolean | See 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 MOTION_BLOCKING , 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 WORLD_SURFACE long array, the purpose of which is unknown, but it's not required for the chunk to be accepted.
| |||
Biomes length | Optional VarInt | Size of the following array. Not present if full chunk is false. | |||
Biomes | Optional array of VarInt | ||||
Size | VarInt | Size of Data in bytes | |||
Data | Byte array | See data structure in Chunk Format | |||
Number of block entities | VarInt | Number of elements in the following array | |||
Block entities | Array of NBT Tag | All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions. |
Note that the Notchian client requires an 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.
The compacted array format has been adjusted so that individual entries no longer span across multiple longs, affecting the main data array and heightmaps.
New format, 5 bits per block, containing the following references to blocks in a palette (not shown): 122344566480743131516914101202
0020863148418841
0000000000100000100001100011000101001000010000011000100001000001
01018A7260F68C87
0000000100000001100010100111001001100000111101101000110010000111
Update Light
Updates light levels for a chunk.
Packet ID | State | Bound To | Field Name | Field Type | Notes | ||
---|---|---|---|---|---|---|---|
0x23 | Play | Client | Chunk X | VarInt | Chunk coordinate (block coordinate divided by 16, rounded down) | ||
Chunk Z | VarInt | Chunk coordinate (block coordinate divided by 16, rounded down) | |||||
Trust Edges | Boolean | If edges should be trusted for light updates. | |||||
? (Changes unknown) | ? (Changes unknown) | ||||||
? (Changes unknown) | ? (Changes unknown) | ||||||
? (Changes unknown) | ? (Changes unknown) | ||||||
? (Changes unknown) | ? (Changes unknown) | ||||||
Sky Light arrays | Length | Array | VarInt | Length of the following array in bytes (always 2048) | |||
Sky Light array | Array of 2048 bytes | There is 1 array for each bit set to true in the sky light mask, starting with the lowest value. Half a byte per light value. | |||||
Block Light arrays | Length | Array | VarInt | Length of the following array in bytes (always 2048) | |||
Block Light array | Array of 2048 bytes | There is 1 array for each bit set to true in the block light mask, starting with the lowest value. Half a byte per light value. |
Map Data
Updates a rectangular area on a map item.
Packet ID | State | Bound To | Field Name | Field Type | Notes | ||
---|---|---|---|---|---|---|---|
0x25 | Play | Client | Map ID | VarInt | Map ID of the map being modified | ||
Scale | Byte | From 0 for a fully zoomed-in map (1 block per pixel) to 4 for a fully zoomed-out map (16 blocks per pixel) | |||||
Tracking Position | Boolean | Specifies whether player and item frame icons are shown | |||||
Locked | Boolean | True if the map has been locked in a cartography table | |||||
Tracking Position | Boolean | Specifies whether player and item frame icons are shown | |||||
Icon Count | VarInt | Number of elements in the following array. Only present if "Tracking Position" is true. | |||||
Icon | Type | Array | VarInt enum | See below | |||
X | Byte | Map coordinates: -128 for furthest left, +127 for furthest right | |||||
Z | Byte | Map coordinates: -128 for highest, +127 for lowest | |||||
Direction | Byte | 0-15 | |||||
Has Display Name | Boolean | ||||||
Display Name | Optional Chat | Only present if previous Boolean is true | |||||
Columns | Unsigned Byte | Number of columns updated | |||||
Rows | Optional Byte | Only if Columns is more than 0; number of rows updated | |||||
X | Optional Byte | Only if Columns is more than 0; x offset of the westernmost column | |||||
Z | Optional Byte | Only if Columns is more than 0; z offset of the northernmost row | |||||
Length | Optional VarInt | Only if Columns is more than 0; length of the following array | |||||
Data | Optional Array of Unsigned Byte | Only if Columns is more than 0; see Map item format |
For icons, a direction of 0 is a vertical icon and increments by 22.5° (360/16).
Types are based off of rows and columns in map_icons.png
:
Icon type | Result |
---|---|
0 | White arrow (players) |
1 | Green arrow (item frames) |
2 | Red arrow |
3 | Blue arrow |
4 | White cross |
5 | Red pointer |
6 | White circle (off-map players) |
7 | Small white circle (far-off-map players) |
8 | Mansion |
9 | Temple |
10 | White Banner |
11 | Orange Banner |
12 | Magenta Banner |
13 | Light Blue Banner |
14 | Yellow Banner |
15 | Lime Banner |
16 | Pink Banner |
17 | Gray Banner |
18 | Light Gray Banner |
19 | Cyan Banner |
20 | Purple Banner |
21 | Blue Banner |
22 | Brown Banner |
23 | Green Banner |
24 | Red Banner |
25 | Black Banner |
26 | Treasure marker |
Resource Pack Send
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x38 | Play | Client | URL | String (32767) | The URL to the resource pack. |
Hash | String (40) | A 40 character hexadecimal and lowercase SHA-1 hash of the resource pack file. (must be lower case in order to work) If it's not a 40 character hexadecimal string, the client will not use it for hash verification and likely waste bandwidth — but it will still treat it as a unique id | |||
Forced | Boolean | The notchian client will be forced to use the ressource pack from the server. |
Serverbound
No changes so far.
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.
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x00 | Handshaking | Server | Protocol Version | VarInt | See protocol version numbers (currently |
Server Address | String | 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 | VarInt Enum | 1 for status, 2 for login |
Status
Clientbound
No changes so far.
Serverbound
No changes so far.
Login
Clientbound
No changes so far.
Serverbound
No changes so far.