|
|
Line 1: |
Line 1: |
− | This page documents the changes from the [[Protocol|last stable Minecraft release]] (currently 1.1) to the current pre-release | + | 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. |
| | | |
− | == New packets ==
| + | 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. |
| | | |
− | === Entity Head Look (0x23) === | + | == Contents == |
| | | |
− | Changes the direction an entity's head is facing.
| + | <div style="float:right;">__TOC__</div> |
| | | |
− | {| class="wikitable"
| + | === Data types === |
− | |- class="row0"
| |
− | ! class="col0" | Packet ID
| |
− | ! class="col1" | Field Name
| |
− | ! class="col2" | Field Type
| |
− | ! class="col3" | Example
| |
− | ! class="col4" | Notes
| |
− | |- class="row1"
| |
− | | class="col0 centeralign" rowspan="2" | 0x23
| |
− | | class="col1 centeralign" | Entity ID
| |
− | | class="col2 centeralign" | int
| |
− | | class="col3 centeralign" |
| |
− | | class="col4" |
| |
− | |- class="row2"
| |
− | | class="col0 centeralign" | Head Yaw
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | Head yaw in steps of 2π/256
| |
− | |- class="row3"
| |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 6 bytes
| |
− | |}
| |
| | | |
− | === Update Tile Entity (0x84) ===
| + | No changes documented so far. |
| | | |
− | Essentially a block update on a tile entity.
| + | === Packets === |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
− | |- class="row0"
| + | ! ID |
− | ! class="col0" | Packet ID | + | ! Packet name |
− | ! class="col1" | Field Name | + | !colspan="2"| Documentation |
− | ! class="col2" | Field Type | + | |- |
− | ! class="col3" | Example
| + | !colspan="4"| Configuration clientbound |
− | ! class="col4" | Notes | + | {{PacketList|0x0F|Clientbound Report Details (configuration)|rel=added}} |
− | |- class="row1"
| + | {{PacketList|0x10|Clientbound Server Links (configuration)|rel=added}} |
− | | class="col0 centeralign" rowspan="7" | 0x84 | + | |- |
− | | class="col1 centeralign" | X | + | !colspan="4"| Play clientbound |
− | | class="col2 centeralign" | int | + | {{PacketList|0x7A|Clientbound Report Details (play)|rel=added}} |
− | | class="col3 centeralign" | | + | {{PacketList|0x7B|Clientbound Server Links (play)|rel=added}} |
− | | class="col4" | | + | |- |
− | |- class="row2" | |
− | | class="col0 centeralign" | Y
| |
− | | class="col1 centeralign" | short
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" |
| |
− | |- class="row3"
| |
− | | class="col0 centeralign" | Z
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" |
| |
− | |- class="row4"
| |
− | | class="col0 centeralign" | Action
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | The type of update to perform
| |
− | |- class="row5"
| |
− | | class="col0 centeralign" | Custom 1
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | Varies
| |
− | |- class="row6"
| |
− | | class="col0 centeralign" | Custom 2
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | Varies
| |
− | |- class="row7" | |
− | | class="col0 centeralign" | Custom 3 | |
− | | class="col1 centeralign" | int | |
− | | class="col2 centeralign" | | |
− | | class="col3" | Varies | |
− | |- class="row8" | |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 24 bytes
| |
| |} | | |} |
| | | |
− | ==== Actions ==== | + | == Handshake == |
| | | |
− | * '''1''': Set mob displayed inside a mob spawner. Custom 1 contains the [[Entities#Mobs|mob type]]
| + | No changes so far. |
| | | |
− | == Changed packets == | + | == Status == |
| | | |
− | === [[Protocol#Login_Request_.280x01.29|Login Request (0x01)]] ===
| + | No changes so far. |
| | | |
− | World height field is no longer used, always 0.
| + | == Login == |
| | | |
− | Map seed field removed
| + | No changes so far. |
| | | |
− | {| class="wikitable"
| + | == Configuration == |
− | |- class="row0"
| |
− | ! class="col0" | Packet ID
| |
− | ! class="col1" | Field Name
| |
− | ! class="col2" | Field Type
| |
− | ! class="col3" | Example
| |
− | ! class="col4" | Notes
| |
− | |- class="row1"
| |
− | | class="col0 centeralign" rowspan="8" | 0x01
| |
− | | class="col1 centeralign" | Entity ID
| |
− | | class="col2 centeralign" | int
| |
− | | class="col3 centeralign" | <code>1298</code>
| |
− | | class="col4" | The Players Entity ID
| |
− | |- class="row2"
| |
− | | class="col0 centeralign" | Not used
| |
− | | class="col1 centeralign" | string
| |
− | | class="col2 centeralign" | (empty string)
| |
− | | class="col3" | Not used
| |
− | |- class="row3"
| |
− | | class="col0 centeralign" | Level Type
| |
− | | class="col1 centeralign" | string
| |
− | | class="col2 centeralign" | default
| |
− | | class="col3" | default or SUPERFLAT; level-type in server.properties
| |
− | |- class="row4"
| |
− | | class="col0 centeralign" | Server mode
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" | <code>0</code>
| |
− | | class="col3" | 0 for survival, 1 for creative
| |
− | |- class="row5"
| |
− | | class="col0 centeralign" | Dimension
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" | <code>0</code>
| |
− | | class="col3" | <code>-1</code>: The Nether, <code>0</code>: The Overworld, <code>1</code>: The End
| |
− | |- class="row6"
| |
− | | class="col0 centeralign" | Difficulty
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" | <code>1</code>
| |
− | | class="col3" | <code>0</code> thru <code>3</code> for Peaceful, Easy, Normal, Hard
| |
− | |- class="row7"
| |
− | | class="col0 centeralign" | World height
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" | <code>0</code>
| |
− | | class="col3" | Probably not used anymore since Map Chunk is hardcoded to 256 blocks.
| |
− | |- class="row8"
| |
− | | class="col0 centeralign" | Max players
| |
− | | class="col1 centeralign" | unsigned byte
| |
− | | class="col2 centeralign" | <code>8</code>
| |
− | | class="col3" | Used by the client to draw the player list
| |
− | |- class="row9"
| |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 19 bytes + length of strings
| |
− | |}
| |
| | | |
− | === [[Protocol#Handshake_.280x02.29|Handshake (0x02)]] === | + | === Clientbound === |
| | | |
− | ==== Client to Server ==== | + | ==== Clientbound Report Details (configuration) ==== |
| | | |
− | The hostname and port were added to this packet, most likely to allow [http://en.wikipedia.org/wiki/Virtual_hosting virtual hosting] .([https://github.com/sadimusi/MVHP/blob/master/mvhp.py sample implementation])
| + | 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}} |
− | |- class="row0"
| + | ! Packet ID |
− | ! class="col0" | Packet ID | + | ! State |
− | ! class="col1" | Field Name | + | ! Bound To |
− | ! class="col2" | Field Type | + | ! colspan="2"| Field Name |
− | ! class="col3" | Example | + | ! colspan="2"| Field Type |
− | ! class="col4" | Notes
| + | ! Notes |
− | |- class="row1" | + | |- |
− | | class="col0 centeralign" | 0x02 | + | | rowspan="3"| 0x0F |
− | | class="col1 centeralign" | UsernameAndHost | + | | rowspan="3"| Configuration |
− | | class="col2 centeralign" | string | + | | rowspan="3"| Client |
− | | class="col3 centeralign" | <code>TkTech;localhost:25565</code> | + | | colspan="2"| Details Count |
− | | class="col4" | The username of the player attempting to connect, and the host he is connecting to, seperated by a semicolon. | + | | colspan="2"| {{Type|VarInt}} (32) |
− | |- class="row2" | + | | The number of details in the following array. |
− | ! class="col0" | Total Size:
| + | |- |
− | | class="col1 rightalign" colspan="4" | 3 bytes + length of strings | + | | rowspan="2"| Details |
| + | | Title |
| + | | rowspan="2"| {{Type|Array}} |
| + | | {{Type|String}} (128) |
| + | | |
| + | |- |
| + | | Description |
| + | | {{Type|String}} (4096) |
| + | | |
| |} | | |} |
| | | |
− | === [[Protocol#Respawn_.280x09.29|Respawn (0x09)]] === | + | ==== Clientbound Server Links (configuration) ==== |
| | | |
− | Dimension is now an int, slightly bizarrely. I wonder if they intended to make world_height an int, in line with 0x01 login?
| + | 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). |
| | | |
− | Map seed field removed
| + | {| class="wikitable" {{added}} |
| + | ! Packet ID |
| + | ! State |
| + | ! Bound To |
| + | ! colspan="2"| Field Name |
| + | ! colspan="2"| Field Type |
| + | ! Notes |
| + | |- |
| + | | rowspan="4"| 0x10 |
| + | | rowspan="4"| Configuration |
| + | | rowspan="4"| Client |
| + | | colspan="2"| Links Count |
| + | | colspan="2"| {{Type|VarInt}} |
| + | | The number of links in the following array. |
| + | |- |
| + | | rowspan="3"| Links |
| + | | Is built-in |
| + | | rowspan="3"| {{Type|Array}} |
| + | | {{Type|Boolean}} |
| + | | Determines if the following label is built-in (from enum) or custom (text component). |
| + | |- |
| + | | Label |
| + | | {{Type|VarInt}} {{Type|Enum}} / {{Type|Text Component}} |
| + | | See below. |
| + | |- |
| + | | URL |
| + | | {{Type|String}} |
| + | | Valid URL. |
| + | |} |
| | | |
− | {| class="wikitable"
| |
− | |- class="row0"
| |
− | ! class="col0" | Packet ID
| |
− | ! class="col1" | Field Name
| |
− | ! class="col2" | Field Type
| |
− | ! class="col3" | Example
| |
− | ! class="col4" | Notes
| |
− | |- class="row1"
| |
− | | class="col0 centeralign" rowspan="5" | 0x09
| |
− | | class="col1 centeralign" | Dimension
| |
− | | class="col2 centeralign" | int
| |
− | | class="col3 centeralign" | <code>1</code>
| |
− | | class="col4" | <code>-1</code>: The Nether, <code>0</code>: The Overworld, <code>1</code>: The End
| |
− | |- class="row2"
| |
− | | class="col1 centeralign" | Difficulty
| |
− | | class="col2 centeralign" | byte
| |
− | | class="col3 centeralign" | <code>1</code>
| |
− | | class="col4" | <code>0</code> thru <code>3</code> for Peaceful, Easy, Normal, Hard. <code>1</code> is always sent c->s
| |
− | |- class="row2"
| |
− | | class="col1 centeralign" | Creative mode
| |
− | | class="col2 centeralign" | byte
| |
− | | class="col3 centeralign" | <code>1</code>
| |
− | | class="col4" | <code>0</code> for survival, <code>1</code> for creative.
| |
− | |- class="row1"
| |
− | | class="col1 centeralign" | World height
| |
− | | class="col2 centeralign" | short
| |
− | | class="col3 centeralign" | <code>128</code>
| |
− | | class="col4" | Defaults to <code>128</code>
| |
− | |- class="row1"
| |
− | | class="col1 centeralign" | Level Type
| |
− | | class="col2 centeralign" | string
| |
− | | class="col3 centeralign" | DEFAULT
| |
− | | class="col4" | See 0x01 login
| |
− | |- class="row2"
| |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 11 bytes + length of string
| |
− | |}
| |
| | | |
− | === [[Protocol#Mob_Spawn_.280x18.29|Mob Spawn (0x18)]] === | + | {| class="wikitable" {{added}} |
| + | ! 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 |
| + | | |
| + | |- |
| + | |} |
| | | |
− | New byte field: head yaw
| + | === Serverbound === |
| | | |
− | This needs confirmation!
| + | No changes so far. |
| | | |
− | {| class="wikitable"
| + | == Play == |
− | |- class="row0"
| |
− | ! class="col0" | Packet ID
| |
− | ! class="col1" | Field Name
| |
− | ! class="col2" | Field Type
| |
− | ! class="col3" | Example
| |
− | ! class="col4" | Notes
| |
− | |- class="row1"
| |
− | | class="col0 centeralign" rowspan="9" | 0x18
| |
− | | class="col1 centeralign" | EID
| |
− | | class="col2 centeralign" | int
| |
− | | class="col3 centeralign" | <code>446</code>
| |
− | | class="col4" | Entity ID
| |
− | |- class="row2"
| |
− | | class="col0 centeralign" | Type
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" | <code>91</code>
| |
− | | class="col3" | The type of mob. See [[Entities#Mobs]]
| |
− | |- class="row3"
| |
− | | class="col0 centeralign" | X
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" | <code>13366</code>
| |
− | | class="col3" | The Absolute Integer X Position of the object
| |
− | |- class="row4"
| |
− | | class="col0 centeralign" | Y
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" | <code>2176</code>
| |
− | | class="col3" | The Absolute Integer Y Position of the object
| |
− | |- class="row5"
| |
− | | class="col0 centeralign" | Z
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" | <code>1680</code>
| |
− | | class="col3" | The Absolute Integer Z Position of the object
| |
− | |- class="row6"
| |
− | | class="col0 centeralign" | Yaw
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" | <code>-27</code>
| |
− | | class="col3" | The yaw in steps of 2π/256
| |
− | |- class="row7"
| |
− | | class="col0 centeralign" | Pitch
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" | <code>0</code>
| |
− | | class="col3" | The pitch in steps of 2π/256
| |
− | |- class="row8"
| |
− | | class="col0 centeralign" | '''Head Yaw'''
| |
− | | class="col1 centeralign" | byte
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | Head yaw in steps of 2π/256
| |
− | |- class="row9"
| |
− | | class="col0 centeralign" | Metadata
| |
− | | class="col1 centeralign" | Metadata
| |
− | | class="col2 centeralign" | <code>127</code>
| |
− | | class="col3" | Varies by mob, see [[Entities]]
| |
− | |- class="row10"
| |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 21 bytes + Metadata (at least 1)
| |
− | |}
| |
| | | |
− | === [[Protocol#Map_Chunk_.280x33.29|Map Chunk (0x33)]] === | + | === Clientbound === |
| | | |
− | This is currently a ''best guess''
| + | ==== Clientbound Report Details (play) ==== |
| | | |
− | Here's a packet capture: https://gist.github.com/1835702
| + | 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}} |
− | |- class="row0"
| + | ! Packet ID |
− | ! class="col0" | Packet ID | + | ! State |
− | ! class="col1" | Field Name | + | ! Bound To |
− | ! class="col2" | Field Type | + | ! colspan="2"| Field Name |
− | ! class="col3" | Example | + | ! colspan="2"| Field Type |
− | ! class="col4" | Notes
| + | ! Notes |
− | |- class="row1" | + | |- |
− | | class="col0 centeralign" rowspan="8" | 0x33 | + | | rowspan="3"| 0x7A |
− | | class="col1 centeralign" | X | + | | rowspan="3"| Configuration |
− | | class="col2 centeralign" | int | + | | rowspan="3"| Client |
− | | class="col3 centeralign" | | + | | colspan="2"| Details Count |
− | | class="col4" | Chunk X Coordinate (*16 to get true X) | + | | colspan="2"| {{Type|VarInt}} (32) |
− | |- class="row2"
| + | | The number of details in the following array. |
− | | class="col0 centeralign" | Z
| + | |- |
− | | class="col1 centeralign" | int
| + | | rowspan="2"| Details |
− | | class="col2 centeralign" |
| + | | Title |
− | | class="col3" | Chunk Z Coordinate (*16 to get true Z)
| + | | rowspan="2"| {{Type|Array}} |
− | |- class="row3" | + | | {{Type|String}} (128) |
− | | class="col0 centeralign" | Ground-up contiguous
| + | | |
− | | class="col1 centeralign" | boolean
| + | |- |
− | | class="col2 centeralign" |
| + | | Description |
− | | class="col3" | This is True if the chunks consists of a contiguous column of non-air (i.e., indicated with a '1' in the bitmask) chunks starting at Y=0, followed by any number of unsent chunks containing only air.
| + | | {{Type|String}} (4096) |
− | |- class="row4"
| + | | |
− | | class="col0 centeralign" | Primary bit map
| |
− | | class="col1 centeralign" | short
| |
− | | class="col2 centeralign" | 15
| |
− | | class="col3" | Bitmask with 1 for every 16x16x16 chunk which data follows in the compressed data.
| |
− | |- class="row5" | |
− | | class="col0 centeralign" | Add bit map | |
− | | class="col1 centeralign" | short | |
− | | class="col2 centeralign" | 0 | |
− | | class="col3" | Same as above, but this is used exclusively for the 'add' portion of the payload
| |
− | |- class="row6" | |
− | | class="col0 centeralign" | Compressed size | |
− | | class="col1 centeralign" | int | |
− | | class="col2 centeralign" |
| |
− | | class="col3" | Size of compressed region data.
| |
− | |- class="row7" | |
− | | class="col0 centeralign" | Unused int | |
− | | class="col1 centeralign" | int | |
− | | class="col2 centeralign" | 0 | |
− | | class="col3" | Doesn't seem to be used by the client. Always 0. I expect this is Mod API stuff.
| |
− | |- class="row8"
| |
− | | class="col0 centeralign" | Compressed data
| |
− | | class="col1 centeralign" | unsigned byte array
| |
− | | class="col2 centeralign" | <code>…</code>
| |
− | | class="col3" | The region data is compressed using ZLib Deflate function.
| |
− | |- class="row9"
| |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 22 bytes + Compressed chunk size
| |
| |} | | |} |
| | | |
− | The payload is a set of 16x16x16 chunks, sharing the same X and Z chunk coordinates. What is and isn't sent is provided by the two bitmask fields. The least significant bit is '1' if the chunk spanning from Y=0 to Y=15 is not completely air, and so forth. For block IDs, metadata, and lighting, the primary bitmask is used. A secondary bitmask is used for 'add' data, which is mojang's means of provided Block IDs past 256. In vanilla minecraft, you can expect this to always be zero.
| + | ==== Clientbound Server Links (play) ==== |
− | | |
− | The data is compressed using the deflate() function in [http://www.zlib.net/ zlib]. After uncompressing, the data consists of five (or six) sequential sections, in order:
| |
− | | |
− | * Block type array (1 byte per block, 4096 bytes per chunk)
| |
− | * Block metadata array (half byte per block, 2048 bytes per chunk)
| |
− | * Block light array (half byte per block, 2048 bytes per chunk)
| |
− | * Sky light array (half byte per block, 2048 bytes per chunk)
| |
− | * Add array (half byte per block, 2048 bytes per chunk, uses second bitmask)
| |
− | * Biome array (1 byte per XZ column, 256 bytes total, only sent if 'ground up contiguous' is true)
| |
− | | |
− | In each section except biome data, your loop should look something like this:
| |
− | <code>
| |
− | for (i=0;i<16;i++) {
| |
− | if (bitmask & 1 << i) {
| |
− | data = io.read(4096); //2048 for the other arrays, where you'll need to split the data
| |
− |
| |
− | for(int j=0; j<len(data); j++) {
| |
− |
| |
− | //Block data
| |
− | x = (j & 0xF0) >> 4;
| |
− | y = j & 0x0F;
| |
− | z = j >> 8;
| |
− |
| |
− | //Nibble arrays
| |
− | d1 = data[j] & 0x0F;
| |
− | d2 = data[j] >> 4;
| |
− |
| |
− | k = 2*j;
| |
− | x1 = (k & 0xF0) >> 4;
| |
− | y1 = k & 0x0F;
| |
− | z1 = k >> 8;
| |
− |
| |
− | k++;
| |
− | x2 = (k & 0xF0) >> 4;
| |
− | y2 = k & 0x0F;
| |
− | z2 = k >> 8;
| |
− | }
| |
− | }
| |
− | }
| |
− | </code>
| |
− | | |
− | Each biome byte can have the values from 0 to 22, higher will cause the client to crash.
| |
− | | |
− | The 'add' array uses the second bitmask. Block IDs are presumed to be <code>block_id | add << 8</code>
| |
− | | |
− | === Multi Block Change (0x34) ===
| |
− | | |
− | Like 0x33, this follows a new format. Arrays are now interlaced rather than sequential!
| |
− | | |
− | {| class="wikitable"
| |
− | |- class="row0"
| |
− | ! class="col0" | Packet ID
| |
− | ! class="col1" | Field Name
| |
− | ! class="col2" | Field Type
| |
− | ! class="col3" | Example
| |
− | ! class="col4" | Notes
| |
− | |- class="row1"
| |
− | | class="col0 centeralign" rowspan="5" | 0x34
| |
− | | class="col1 centeralign" | Chunk X
| |
− | | class="col2 centeralign" | int
| |
− | | class="col3 centeralign" | <code>-9</code>
| |
− | | class="col4" | Chunk X Coordinate
| |
− | |- class="row2"
| |
− | | class="col0 centeralign" | Chunk Z
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" | <code>12</code>
| |
− | | class="col3" | Chunk Z Coordinate
| |
− | |- class="row3"
| |
− | | class="col0 centeralign" | Record count
| |
− | | class="col1 centeralign" | short
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | The number of blocks affected
| |
− | |- class="row2"
| |
− | | class="col0 centeralign" | Data size
| |
− | | class="col1 centeralign" | int
| |
− | | class="col2 centeralign" |
| |
− | | class="col3" | The total size of the data, in bytes. Should always be 4*record count - please confirm.
| |
− | |- class="row4"
| |
− | | class="col0 centeralign" | Data
| |
− | | class="col1 centeralign" |
| |
− | | class="col2 centeralign" | <code>…</code>
| |
− | | class="col3" | Coordinates, type, and metadata of blocks to change.
| |
− | |- class="row5"
| |
− | ! class="col0" | Total Size:
| |
− | | class="col1 rightalign" colspan="4" | 15 bytes + Arrays
| |
− | |}
| |
| | | |
− | Each record is four bytes.
| + | 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). |
| | | |
− | {| class="wikitable" | + | {| class="wikitable" {{added}} |
− | |- class="row0"
| + | ! Packet ID |
− | ! class="col0" | Bit mask | + | ! State |
− | ! class="col1" | Width | + | ! Bound To |
− | ! class="col2" | Meaning | + | ! colspan="2"| Field Name |
− | |- class="row1" | + | ! colspan="2"| Field Type |
− | | class="col0" | 00 00 00 0F | + | ! Notes |
− | | class="col1" | 4 bits | + | |- |
− | | class="col2" | Block metadata | + | | rowspan="4"| 0x7B |
− | |- class="row2" | + | | rowspan="4"| Configuration |
− | | class="col0" | 00 00 FF F0 | + | | rowspan="4"| Client |
− | | class="col1" | 12 bits | + | | colspan="2"| Links Count |
− | | class="col2" | Block ID | + | | colspan="2"| {{Type|VarInt}} |
− | |- class="row3" | + | | The number of links in the following array. |
− | | class="col0" | 00 FF 00 00 | + | |- |
− | | class="col1" | 8 bits | + | | rowspan="3"| Links |
− | | class="col2" | Y co-ordinate | + | | Is built-in |
− | |- class="row4" | + | | rowspan="3"| {{Type|Array}} |
− | | class="col0" | 0F 00 00 00 | + | | {{Type|Boolean}} |
− | | class="col1" | 4 bits | + | | Determines if the following label is built-in (from enum) or custom (text component). |
− | | class="col2" | Z co-ordinate, relative to chunk | + | |- |
− | |- class="row5" | + | | Label |
− | | class="col0" | F0 00 00 00 | + | | {{Type|VarInt}} {{Type|Enum}} / {{Type|Text Component}} |
− | | class="col1" | 4 bits | + | | See below. |
− | | class="col2" | X co-ordinate, relative to chunk | + | |- |
| + | | URL |
| + | | {{Type|String}} |
| + | | Valid URL. |
| |} | | |} |
| | | |
− | == Protocol History == | + | {| class="wikitable" {{added}} |
− | | + | ! ID |
− | === 2012-02-23 ===
| + | ! Name |
− | * 12w08a
| + | ! Notes |
− | * Protocol version is now 28
| + | |- |
− | * Updated packets: 0x01, 0x09, 0x34
| + | | 0 |
− | | + | | Bug Report |
− | === 2012-02-15 ===
| + | | Displayed on connection error screen; included as a comment in the disconnection report. |
− | * 12w07a
| + | |- |
− | * Protocol version is now 27
| + | | 1 |
− | * Updated packets: 0x01, 0x09, 0x33
| + | | Community Guidelines |
| + | | |
| + | |- |
| + | | 2 |
| + | | Support |
| + | | |
| + | |- |
| + | | 3 |
| + | | Status |
| + | | |
| + | |- |
| + | | 4 |
| + | | Feedback |
| + | | |
| + | |- |
| + | | 5 |
| + | | Community |
| + | | |
| + | |- |
| + | | 6 |
| + | | Website |
| + | | |
| + | |- |
| + | | 7 |
| + | | Forums |
| + | | |
| + | |- |
| + | | 8 |
| + | | News |
| + | | |
| + | |- |
| + | | 9 |
| + | | Announcements |
| + | | |
| + | |- |
| + | |} |
| | | |
− | === 2012-02-09 === | + | === Serverbound === |
− | * 12w06a
| |
− | * Protocol version is now 25
| |
− | * New packet: 0x84
| |
| | | |
− | === 2012-01-26 ===
| + | No changes so far. |
− | * 12w04a
| |
− | * Protocol version has not been changed
| |
− | * Handshake Packet by client (0x02) now contains the server host and port
| |
− | * Window Open Packet (0x64): WindowTitle is now longer than accepted by older clients. Contains a keyword such as "container.furnace"
| |
| | | |
− | === 2012-01-19 ===
| + | [[Category:Minecraft Modern]] |
− | * 12w03a
| |
− | * Protocol version is now 24
| |
− | * New packet: 0x23
| |
− | * MobSpawn: new field, 1 byte inserted before metadata.
| |