Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Minecraft:Java Edition protocol/Packets

From SAS Gaming Wiki

Template:See also Template:Exclusive Template:Info

This article presents a dissection of the current Template:JE protocol for 1.21.10, protocol 773.

The changes between versions may be viewed at Protocol History.

Definitions

The Minecraft server accepts connections from TCP clients and communicates with them using packets. A packet is a sequence of bytes sent over the TCP connection. The meaning of a packet depends both on its packet ID and the current state of the connection. The initial state of each connection is Handshaking, and state is switched using the packets Handshake and Login Success.

Data types

Java Edition protocol/Data types

Other definitions

Term Definition
Player When used in the singular, Player always refers to the client connected to the server.
Entity Entity refers to any item, player, mob, minecart or boat etc. See the Minecraft Wiki article for a full list.
EID An EID — or Entity ID — is a 4-byte sequence used to identify a specific entity. An entity's EID is unique on the entire server.
XYZ In this document, the axis names are the same as those shown in the debug screen (F3). Y points upwards, X points east, and Z points south.
Meter The meter is Minecraft's base unit of length, equal to the length of a vertex of a solid block. The term “block” may be used to mean “meter” or “cubic meter”.
Registry A table describing static, gameplay-related objects of some kind, such as the types of entities, blocks or biomes. The entries of a registry are associated with both namespaced textual identifiers (see #Identifier), and signed (positive) 32-bit numeric identifiers. There is also a registry of registries listing all of the registries in the registry system.

Some registries, such as biomes and dimensions, can be customized at runtime by the server (see Minecraft:Java Edition protocol/Registries#Synchronized registries), while others, such as blocks, items and entities, are hardcoded. The contents of the hardcoded registries can be extracted via the built-in Data Generators system.

Block state Each block in Minecraft has 0 or more properties, which in turn may have any number of possible values. These represent, for example, the orientations of blocks, poweredness states of redstone components, and so on. Each of the possible permutations of property values for a block is a distinct block state. The global block state palette assigns a numeric identifier to every block state of every block.

A current list of properties and state ID ranges is found on burger.

Alternatively, the vanilla server now includes an option to export the current block state ID mapping by running java -DbundlerMainClass=net.minecraft.data.Main -jar minecraft_server.jar --reports. See Data Generators for more information.

Vanilla The official implementation of Minecraft as developed and released by Mojang.
Sequence The action number counter for local block changes, incremented by one when clicking a block with a hand, right-clicking an item, or starting or finishing digging a block. Counter handles latency to avoid applying outdated block changes to the local world. It is also used to revert ghost blocks created when placing blocks, using buckets, or breaking blocks.

Packet format

Packets cannot be larger than 221 − 1 or 2097151 bytes (the maximum that can be sent in a 3-byte Template:Type). Moreover, the length field must not be longer than 3 bytes, even if the encoded value is within the limit. Unnecessarily long encodings at 3 bytes or below are still allowed. For compressed packets, this applies to the Packet Length field, i.e. the compressed length.

Without compression

Field Name Field Type Notes
Length Template:Type Length of Packet ID + Data
Packet ID Template:Type Corresponds to protocol_id from the server's packet report
Data Template:Type Depends on the connection state and packet ID, see the sections below

With compression

Once a Set Compression packet (with a non-negative threshold) is sent, zlib compression is enabled for all following packets. The format of a packet changes slightly to include the size of the uncompressed packet.

Present? Compressed? Field Name Field Type Notes
always No Packet Length Template:Type Length of (Data Length) + length of compressed (Packet ID + Data)
if size >= threshold No Data Length Template:Type Length of uncompressed (Packet ID + Data)
Yes Packet ID Template:Type zlib compressed packet ID (see the sections below)
Data Template:Type zlib compressed packet data (see the sections below)
if size < threshold No Data Length Template:Type 0 to indicate uncompressed
Packet ID Template:Type packet ID (see the sections below)
Data Template:Type packet data (see the sections below)

For serverbound packets, the uncompressed length of (Packet ID + Data) must not be greater than 223 or 8388608 bytes. Note that a length equal to 223 is permitted, which differs from the compressed length limit. The vanilla client, on the other hand, has no limit for the uncompressed length of incoming compressed packets.

If the size of the buffer containing the packet data and ID (as a Template:Type) is smaller than the threshold specified in the packet Set Compression. It will be sent as uncompressed. This is done by setting the data length to 0. (Comparable to sending a non-compressed format with an extra 0 between the length and packet data).

If it's larger than or equal to the threshold, then it follows the regular compressed protocol format.

The vanilla server (but not client) rejects compressed packets smaller than the threshold. Uncompressed packets exceeding the threshold, however, are accepted.

Compression can be disabled by sending the packet Set Compression with a negative Threshold, or not sending the Set Compression packet at all.

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 packet causes the server to switch into the target state. It should be sent right after opening the TCP connection to prevent the server from disconnecting.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
intention
Handshaking Server Protocol Version Template:Type See protocol version numbers (currently 775 in Minecraft 26.1).
Server Address Template:Type (255) Hostname or IP, e.g. localhost or 127.0.0.1, that was used to connect. The vanilla server does not use this information. This is the name obtained after SRV record resolution, except in 1.17 (and no older or newer version) and during server list ping (MC-278651), where it is the host portion of the address specified by the user directly. In 1.17.1 and later if a literal IP address is specified by the user, reverse DNS lookup is attempted, and the result is used as the value of this field if successful.
Server Port Template:Type Default is 25565. The vanilla server does not use this information.
Intent Template:Type Template:Type 1 for Status, 2 for Login, 3 for Transfer. Intents 2 and 3 both transition to the Login state, but 3 indicates that the client is connecting due to a Transfer packet received from another server. If the server is not expecting transfers, it may choose to reject the connection by replying with a Disconnect (login) packet.

Legacy Server List Ping

Template:Warning

While not technically part of the current protocol, (legacy) clients may send this packet to initiate Server List Ping, and modern servers should handle it correctly. The format of this packet is a remnant of the pre-Netty age, before the switch to Netty in 1.7 brought the standard format that is recognized now. This packet merely exists to inform legacy clients that they can't join our modern server.

Modern clients (tested with 1.21.5 + 1.21.4) also send this packet when the server does not send any response within a 30 seconds time window or when the connection is immediately closed. Template:Warning

Packet ID State Bound To Field Name Field Type Notes
0xFE Handshaking Server Payload Template:Type always 1 (0x01).

See Minecraft:Java Edition protocol/Server List Ping#1.6 for the details of the protocol that follows this packet.

Status

Template:Main

Clientbound

Status Response

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
status_response
Status Client JSON Response Template:Type (32767) See Minecraft:Java Edition protocol/Server List Ping#Status Response; as with all strings, this is prefixed by its length as a Template:Type.

Pong Response (status)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
pong_response
Status Client Timestamp Template:Type Should match the one sent by the client.

Serverbound

Status Request

The status can only be requested once, immediately after the handshake, before any ping. The server won't respond otherwise.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
status_request
Status Server no fields

Ping Request (status)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
ping_request
Status Server Timestamp Template:Type May be any number, but vanilla clients will always use the timestamp in milliseconds.

Login

The login process is as follows:

  1. C→S: Handshake with intent set to 2 (login) or 3 (transfer)
  2. C→S: Login Start
  3. S→C: Encryption Request
  4. Client auth (if enabled)
  5. C→S: Encryption Response
  6. Server auth (if enabled)
  7. Both enable encryption
  8. S→C: Set Compression (optional)
  9. S→C: Login Success
  10. C→S: Login Acknowledged

Set Compression, if present, must be sent before Login Success. Note that anything sent after Set Compression must use the Post Compression packet format.

Three modes of operation are possible depending on how the packets are sent:

  • Online-mode with encryption
  • Offline-mode with encryption
  • Offline-mode without encryption

For online-mode servers (the ones with authentication enabled), encryption is always mandatory, and the entire process described above needs to be followed.

For offline-mode servers (the ones with authentication disabled), encryption is optional, and part of the process can be skipped. In that case, Login Start is directly followed by Login Success. The vanilla server only uses UUID v3 for offline player UUIDs, deriving it from the string OfflinePlayer:<player's name>. For example, Notch’s offline UUID would be chosen from the string OfflinePlayer:Notch. This is not a requirement however, the UUID can be set to anything.

As of 1.21, the vanilla server never uses encryption in offline mode.

See Minecraft:protocol encryption for details.

Clientbound

Disconnect (login)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
login_disconnect
Login Client Reason Template:Type The reason why the player was disconnected.

Encryption Request

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
hello
Login Client Server ID Template:Type (20) Always empty when sent by the vanilla server.
Public Key Template:Type of Template:Type The server's public key, in bytes.
Verify Token Template:Type of Template:Type A sequence of random bytes generated by the server.
Should authenticate Template:Type Whether the client should attempt to authenticate through mojang servers.

See Minecraft:protocol encryption for details.

Login Success

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x02

resource:
login_finished
Login Client Profile Template:Type

Set Compression

Enables compression. If compression is enabled, all following packets are encoded in the compressed packet format. Negative values will disable compression, meaning the packet format should remain in the uncompressed packet format. However, this packet is entirely optional, and if not sent, compression will also not be enabled (the vanilla server does not send the packet when compression is disabled).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x03

resource:
login_compression
Login Client Threshold Template:Type Maximum size of a packet before it is compressed.

Login Plugin Request

Used to implement a custom handshaking flow together with Login Plugin Response.

Unlike plugin messages in "play" mode, these messages follow a lock-step request/response scheme, where the client is expected to respond to a request indicating whether it understood. The vanilla client always responds that it hasn't understood and sends an empty payload.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x04

resource:
custom_query
Login Client Message ID Template:Type Generated by the server - should be unique to the connection.
Channel Template:Type Name of the plugin channel used to send the data.
Data Varies Any data, depending on the channel. Typically this would be a sequence of fields using standard data types, but some unofficial channels have unusual formats. There is no length prefix that applies to all channel types, but the format specific to the channel may or may not include one or more length prefixes (e.g. for strings). The vanilla client enforces a length limit of 1048576 bytes on this data, but only if the channel type is unrecognized (which is the case for all login plugin messages with a completely vanilla client).

Cookie Request (login)

Requests a cookie that was previously stored.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x05

resource:
cookie_request
Login Client Key Template:Type The identifier of the cookie.

Serverbound

Login Start

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
hello
Login Server Name Template:Type (16) Player's Username.
Player UUID Template:Type The Template:Type of the player logging in. Unused by the vanilla server.

Encryption Response

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
key
Login Server Shared Secret Template:Type of Template:Type Shared Secret value, encrypted with the server's public key.
Verify Token Template:Type of Template:Type Verify Token value, encrypted with the same public key as the shared secret.

See Minecraft:protocol encryption for details.

Login Plugin Response

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x02

resource:
custom_query_answer
Login Server Message ID Template:Type Should match ID from server.
Data Template:Type Varies Any data, depending on the channel. Only present if the client understood the request. Typically this would be a sequence of fields using standard data types, but some unofficial channels have unusual formats. There is no length prefix that applies to all channel types, but the format specific to the channel may or may not include one or more length prefixes (e.g. for strings).

Login Acknowledged

Acknowledgement to the Login Success packet sent by the server.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x03

resource:
login_acknowledged
Login Server no fields

This packet switches the connection state to configuration.

Cookie Response (login)

Response to a Cookie Request (login) from the server. The vanilla server only accepts responses of up to 5 kiB in size.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x04

resource:
cookie_response
Login Server Key Template:Type The identifier of the cookie.
Payload Template:Type Template:Type (5120) of Template:Type The data of the cookie.

Configuration

Clientbound

Cookie Request (configuration)

Requests a cookie that was previously stored.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
cookie_request
Configuration Client Key Template:Type The identifier of the cookie.

Clientbound Plugin Message (configuration)

Template:Main

Mods and plugins can use this to send their data. Minecraft itself uses several plugin channels. These internal channels are in the minecraft namespace.

More information on how it works on Dinnerbone's blog. More documentation about internal and popular registered channels are here.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
custom_payload
Configuration Client Channel Template:Type Name of the plugin channel used to send the data.
Data Varies Any data, depending on the channel. Typically this would be a sequence of fields using standard data types, but some unofficial channels have unusual formats. There is no length prefix that applies to all channel types, but the format specific to the channel may or may not include one or more length prefixes (such as the string length prefix in the standard minecraft:brand channel). The vanilla client enforces a length limit of 1048576 bytes on this data, but only if the channel type is unrecognized.

Disconnect (configuration)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x02

resource:
disconnect
Configuration Client Reason Template:Type The reason why the player was disconnected.

Finish Configuration

Sent by the server to notify the client that the configuration process has finished. The client validates the registry and tag data received from the server, and answers with Acknowledge Finish Configuration whenever it is ready to continue.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x03

resource:
finish_configuration
Configuration Client no fields

This packet switches the connection state to play.

Clientbound Keep Alive (configuration)

The server will frequently send out a keep-alive, each containing a random ID. The client must respond with the same payload (see Serverbound Keep Alive). If the client does not respond to a Keep Alive packet within 15 seconds after it was sent, the server kicks the client. Vice versa, if the server does not send any keep-alives for 20 seconds, the client will disconnect and yield a "Timed out" exception.

The vanilla server uses a system-dependent time in milliseconds to generate the keep alive ID value.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x04

resource:
keep_alive
Configuration Client Keep Alive ID Template:Type

Ping (configuration)

Packet is not used by the vanilla server. When sent to the client, the client responds with a Pong packet with the same ID.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x05

resource:
ping
Configuration Client ID Template:Type

Reset Chat

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x06

resource:
reset_chat
Configuration Client no fields

Registry Data

Sent by the server to inform the client of the contents of synchronized registries, which are sourced from the server's Minecraft:data packs. Each packet contains the contents of a single registry. The client will accumulate the data contained in these packets during the configuration phase, and validate it once Finish Configuration is received from the server.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x07

resource:
registry_data
Configuration Client Registry ID Template:Type Name of the registry, such as minecraft:dimension_type.
Entries Entry ID Template:Type Template:Type Name of the entry, such as minecraft:overworld.
Data Template:Type Template:Type Entry data. If omitted, sourced from the selected known packs.

The ordering of the entries in the Entries array defines the numeric IDs that they will be assigned to, starting from 0 and counting upwards. It is essential to maintain consistency between server and client, since many parts of the protocol reference these entries by their ID. The client will disconnect upon receiving a reference to a non-existing entry.

The NBT data of registry entries has the same structure as their definitions in Minecraft:data packs, but represented in NBT instead of JSON. The format for each registry is defined in Minecraft:Java Edition protocol/Registries#List of synchronized registries.

Remove Resource Pack (configuration)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x08

resource:
resource_pack_pop
Configuration Client UUID Template:Type Template:Type The Template:Type of the resource pack to be removed. If not present, every resource pack will be removed.

Add Resource Pack (configuration)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x09

resource:
resource_pack_push
Configuration Client UUID Template:Type The unique identifier of the resource pack.
URL Template:Type (32767) The URL to the resource pack.
Hash Template:Type (40) A 40 character hexadecimal, case-insensitive SHA-1 hash of the resource pack file.
If it's not a 40-character hexadecimal string, the client will not use it for hash verification and likely waste bandwidth.
Forced Template:Type The vanilla client will be forced to use the resource pack from the server. If they decline, they will be kicked from the server.
Prompt Message Template:Type Template:Type This is shown in the prompt making the client accept or decline the resource pack (only if present).

Store Cookie (configuration)

Stores some arbitrary data on the client, which persists between server transfers. The vanilla client only accepts cookies of up to 5 kiB in size.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0A

resource:
store_cookie
Configuration Client Key Template:Type The identifier of the cookie.
Payload Template:Type (5120) of Template:Type The data of the cookie.

Transfer (configuration)

Notifies the client that it should transfer to the given server.

The client will close its connection to the current server, open a connection to the specified address and send a Handshake with intent set to 3 (Transfer). If the server chooses to accept the transfer, the usual login process will follow.

Cookies previously stored are preserved between server transfers.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0B

resource:
transfer
Configuration Client Host Template:Type (32767) The hostname or IP of the server.
Port Template:Type The port of the server.

Feature Flags

Used to enable and disable features, generally experimental ones, on the client.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0C

resource:
update_enabled_features
Configuration Client Feature Flags Template:Type of Template:Type

There is one special feature flag, which is in most versions:

  • minecraft:vanilla - enables vanilla features

For the other feature flags, which may change between versions, see Minecraft:Experiments#Java Edition.

Update Tags (configuration)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0D

resource:
update_tags
Configuration Client Tagged Registries Registry Template:Type Template:Type Registry identifier, such as minecraft:block.
Tags Template:Type of Tag Array of tags defined for the registry, each containing a sub-array of entries that have the tag (see below).

Each tag looks like:

Field Name Field Type Notes
Tag Name Template:Type Name of the tag without the #-prefix, such as minecraft:climbable.
Entries Template:Type of Template:Type Numeric IDs of the given type (block, item, etc.). This list replaces the previous list of IDs for the given tag.

See Tag for more information, including a list of vanilla tags.

Due to Template:Bug, any tags that were defined in built-in registries in previous game sessions of a client process will be present by default in new sessions, unless overridden by the server. This occurs on a per-tag basis, so defining a specific tag in a registry will not cause any other tags in that registry to be overridden.

If the server sends Finish Configuration without sending any Registry Data packets during the configuration phase, previously specified tags in synchronized registries will also be retained unless respecified on a per-tag basis. The server must have already sent registries during a previous configuration phase. Note that it is also possible to update tags in play state, so entering configuration is not necessary to do this.

If any Registry Data packets are sent during reconfiguration, all previous tags in all synchronized registries are forgotten, as are the registries themselves.

Clientbound Known Packs

Template:Main

Informs the client of which data packs are present on the server. The client is expected to respond with its own Serverbound Known Packs packet containing the subset of packs also known to the client, in the same order as they were listed by the server. The vanilla server does not continue with Configuration until it receives a response.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0E

resource:
select_known_packs
Configuration Client Known Packs Namespace Template:Type Template:Type (32767) Namespace part of the name of the pack, such as minecraft.
ID Template:Type (32767) Pathname part of the name of the pack, such as core.
Version Template:Type (32767) Version of the pack. For minecraft:core this corresponds to Minecraft version numbers, such as 1.21.10. Note that the vanilla data pack can change without a protocol version bump, and even a completely vanilla server talking to a vanilla client may fall back to sending all registry data over the wire, if the two are on different protocol-compatible patch versions.

Custom 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
protocol:
0x0F

resource:
custom_report_details
Configuration Client Details Title Template:Type (32) Template:Type (128)
Description Template:Type (4096)

Server Links (configuration)

This packet contains a list of links that the vanilla 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
protocol:
0x10

resource:
server_links
Configuration Client Links Label Template:Type Template:Type Template:Type Template:Type or Template:Type Enums are used for built-in labels (see below), and text components for custom labels.
URL Template:Type 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

Clear Dialog (configuration)

If we're currently in a dialog screen, then this removes the current screen and switches back to the previous one.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x11

resource:
clear_dialog
Configuration Client no fields

Show Dialog (configuration)

Show a custom dialog screen to the client.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x12

resource:
show_dialog
Configuration Client Dialog Template:Type Inline definition as described at Minecraft:Dialog#Dialog format.

Code of Conduct

Show the client the server Code of Conduct. Server will not continue with the configuration stage until the client has accepted the Code of Conduct via the Accept Code Of Conduct packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x13

resource:
code_of_conduct
Configuration Client Code of Conduct Template:Type Code of Conduct of the server.

Serverbound

Client Information (configuration)

Sent when the player connects, or when settings are changed.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
client_information
Configuration Server Locale Template:Type (16) e.g. en_GB.
View Distance Template:Type Client-side render distance, in chunks.
Chat Mode Template:Type Template:Type 0: enabled, 1: commands only, 2: hidden. See Minecraft:Java Edition protocol/Chat#Client chat mode for more information.
Chat Colors Template:Type “Colors” multiplayer setting. The vanilla server stores this value but does nothing with it (see Template:Bug). Some third-party servers disable all coloring in chat and system messages when it is false.
Displayed Skin Parts Template:Type Bit mask, see below.
Main Hand Template:Type Template:Type 0: Left, 1: Right.
Enable text filtering Template:Type Enables filtering of text on signs and written book titles. The vanilla client sets this according to the profanityFilterPreferences.profanityFilterOn account attribute indicated by the Mojang API endpoint for player attributes. In offline mode, it is always false.
Allow server listings Template:Type Servers usually list online players; this option should let you not show up in that list.
Particle Status Template:Type Template:Type 0: all, 1: decreased, 2: minimal

Displayed Skin Parts flags:

  • Bit 0 (0x01): Cape enabled
  • Bit 1 (0x02): Jacket enabled
  • Bit 2 (0x04): Left Sleeve enabled
  • Bit 3 (0x08): Right Sleeve enabled
  • Bit 4 (0x10): Left Pants Leg enabled
  • Bit 5 (0x20): Right Pants Leg enabled
  • Bit 6 (0x40): Hat enabled

The most significant bit (bit 7, 0x80) appears to be unused.

Cookie Response (configuration)

Response to a Cookie Request (configuration) from the server. The vanilla server only accepts responses of up to 5 kiB in size.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
cookie_response
Configuration Server Key Template:Type The identifier of the cookie.
Payload Template:Type Template:Type (5120) of Template:Type The data of the cookie.

Serverbound Plugin Message (configuration)

Template:Main

Mods and plugins can use this to send their data. Minecraft itself uses some plugin channels. These internal channels are in the minecraft namespace.

More documentation on this: https://dinnerbone.com/blog/2012/01/13/minecraft-plugin-channels-messaging/

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x02

resource:
custom_payload
Configuration Server Channel Template:Type Name of the plugin channel used to send the data.
Data Varies Any data, depending on the channel. Typically this would be a sequence of fields using standard data types, but some unofficial channels have unusual formats. There is no length prefix that applies to all channel types, but the format specific to the channel may or may not include one or more length prefixes (such as the string length prefix in the standard minecraft:brand channel). The vanilla server enforces a length limit of 32767 bytes on this data, but only if the channel type is unrecognized.

Acknowledge Finish Configuration

Sent by the client to notify the server that the configuration process has finished. It is sent in response to the server's Finish Configuration.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x03

resource:
finish_configuration
Configuration Server no fields

This packet switches the connection state to play.

Serverbound Keep Alive (configuration)

The server will frequently send out a keep-alive (see Clientbound Keep Alive), each containing a random ID. The client must respond with the same packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x04

resource:
keep_alive
Configuration Server Keep Alive ID Template:Type

Pong (configuration)

Response to the clientbound packet (Ping) with the same id.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x05

resource:
pong
Configuration Server ID Template:Type

Resource Pack Response (configuration)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x06

resource:
resource_pack
Configuration Server UUID Template:Type The unique identifier of the resource pack received in the Add Resource Pack (configuration) request.
Result Template:Type Template:Type Result ID (see below).

Result can be one of the following values:

ID Result
0 Successfully downloaded
1 Declined
2 Failed to download
3 Accepted
4 Downloaded
5 Invalid URL
6 Failed to reload
7 Discarded

Serverbound Known Packs

Template:Main

Informs the server of which of the data packs it knows are also present on the client. The client sends this in response to Clientbound Known Packs.

If the client specifies a pack in this packet, the server may omit its contained NBT data (but not entry listings) from the Registry Data packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x07

resource:
select_known_packs
Configuration Server Known Packs Namespace Template:Type Template:Type (32767) Namespace part of the name of the pack, such as minecraft.
ID Template:Type (32767) Pathname part of the name of the pack, such as core.
Version Template:Type (32767) Version of the pack. For minecraft:core this corresponds to Minecraft version numbers, such as 1.21.10. Note that the vanilla data pack can change without a protocol version bump, and even a completely vanilla server talking to a vanilla client may fall back to sending all registry data over the wire, if the two are on different protocol-compatible patch versions.

Custom Click Action (configuration)

Sent when the client clicks a Template:Type with the minecraft:custom click action. This is meant as an alternative to running a command, but will not have any effect on vanilla servers.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x08

resource:
custom_click_action
Configuration Server ID Template:Type The identifier for the click action.
Payload Template:Type The data to send with the click action. May be a TAG_END (0).

Accept Code of Conduct

Sent when the client clicks on the "Acknowledge" field in the "Code of Conduct" view. Sent in response to the Code of Conduct packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x09

resource:
accept_code_of_conduct
Configuration Server no fields

Play

Clientbound

Bundle Delimiter

The delimiter for a bundle of packets. When received, the client should store every subsequent packet it receives and wait until another delimiter is received. Once that happens, the client is guaranteed to process every packet in the bundle on the same tick, and the client should stop storing packets.

As of 1.20.6, the vanilla server only uses this to ensure Spawn Entity and associated packets used to configure the entity happen on the same tick. Each entity gets a separate bundle.

The vanilla client doesn't allow more than 4096 packets in the same bundle.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
bundle_delimiter
Play Client no fields

Spawn Entity

Sent by the server to create an entity on the client, normally upon the entity spawning within or entering the player's view range.

The local player entity is automatically created by the client, and must not be created explicitly using this packet. Doing so on the vanilla client will have strange consequences.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
add_entity
Play Client Entity ID Template:Type A unique integer ID mostly used in the protocol to identify the entity. If an entity with the same ID already exists on the client, it is automatically deleted and replaced by the new entity. On the vanilla server entity IDs are globally unique across all dimensions and never reused while the server is running, but not preserved across server restarts.
Entity UUID Template:Type A unique identifier that is mostly used in persistence and places where the uniqueness matters more. It is possible to create multiple entities with the same UUID on the vanilla client, but a warning will be logged, and functionality dependent on UUIDs may ignore the entity or otherwise misbehave.
Type Template:Type ID in the minecraft:entity_type registry (see "type" field in Minecraft:Java Edition protocol/Entity metadata#Entities).
X Template:Type
Y Template:Type
Z Template:Type
Velocity Template:Type
Pitch Template:Type
Yaw Template:Type
Head Yaw Template:Type Only used by living entities, where the head of the entity may differ from the general body rotation.
Data Template:Type Meaning dependent on the value of the Type field, see Minecraft:Java Edition protocol/Object data for details.

Template:Warning When in online mode, the UUIDs must be valid and have valid skin blobs. In offline mode, the vanilla server uses UUID v3 and chooses the player's UUID by using the String OfflinePlayer:<player name>, encoding it in UTF-8 (and case-sensitive), then processes it with UUID.nameUUIDFromBytes.

For NPCs UUID v2 should be used. Note:

<+Grum> i will never confirm this as a feature you know that :)

In an example UUID, xxxxxxxx-xxxx-Yxxx-xxxx-xxxxxxxxxxxx, the UUID version is specified by Y. So, for UUID v3, Y will always be 3, and for UUID v2, Y will always be 2.

Entity Animation

Sent whenever an entity should change animation.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x02

resource:
animate
Play Client Entity ID Template:Type Player ID.
Animation Template:Type Animation ID (see below).

Animation can be one of the following values:

ID Animation
0 Swing main arm
2 Leave bed
3 Swing offhand
4 Critical effect
5 Magic critical effect

Award Statistics

Sent as a response to Client Status (id 1). Will only send the changed values if previously requested.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x03

resource:
award_stats
Play Client Statistics Category ID Template:Type Template:Type ID in the minecraft:stat_type registry; see below.
Statistic ID Template:Type See below.
Value Template:Type The amount to set it to.

Categories (defined in the minecraft:stat_type registry).

Name ID Registry
minecraft:mined 0 minecraft:block
minecraft:crafted 1 minecraft:item
minecraft:used 2 minecraft:item
minecraft:broken 3 minecraft:item
minecraft:picked_up 4 minecraft:item
minecraft:dropped 5 minecraft:item
minecraft:killed 6 minecraft:entity_type
minecraft:killed_by 7 minecraft:entity_type
minecraft:custom 8 minecraft:custom_stat

Blocks, Items, and Entities use block (not block state), item, and entity ids.

Custom uses IDs in the minecraft:custom_stat registry:

Name ID Unit
minecraft:leave_game 0 None
minecraft:play_time 1 Time
minecraft:total_world_time 2 Time
minecraft:time_since_death 3 Time
minecraft:time_since_rest 4 Time
minecraft:sneak_time 5 Time
minecraft:walk_one_cm 6 Distance
minecraft:crouch_one_cm 7 Distance
minecraft:sprint_one_cm 8 Distance
minecraft:walk_on_water_one_cm 9 Distance
minecraft:fall_one_cm 10 Distance
minecraft:climb_one_cm 11 Distance
minecraft:fly_one_cm 12 Distance
minecraft:walk_under_water_one_cm 13 Distance
minecraft:minecart_one_cm 14 Distance
minecraft:boat_one_cm 15 Distance
minecraft:pig_one_cm 16 Distance
minecraft:happy_ghast_one_cm 17 Distance
minecraft:horse_one_cm 18 Distance
minecraft:aviate_one_cm 19 Distance
minecraft:swim_one_cm 20 Distance
minecraft:strider_one_cm 21 Distance
minecraft:jump 22 None
minecraft:drop 23 None
minecraft:damage_dealt 24 Damage
minecraft:damage_dealt_absorbed 25 Damage
minecraft:damage_dealt_resisted 26 Damage
minecraft:damage_taken 27 Damage
minecraft:damage_blocked_by_shield 28 Damage
minecraft:damage_absorbed 29 Damage
minecraft:damage_resisted 30 Damage
minecraft:deaths 31 None
minecraft:mob_kills 32 None
minecraft:animals_bred 33 None
minecraft:player_kills 34 None
minecraft:fish_caught 35 None
minecraft:talked_to_villager 36 None
minecraft:traded_with_villager 37 None
minecraft:eat_cake_slice 38 None
minecraft:fill_cauldron 39 None
minecraft:use_cauldron 40 None
minecraft:clean_armor 41 None
minecraft:clean_banner 42 None
minecraft:clean_shulker_box 43 None
minecraft:interact_with_brewingstand 44 None
minecraft:interact_with_beacon 45 None
minecraft:inspect_dropper 46 None
minecraft:inspect_hopper 47 None
minecraft:inspect_dispenser 48 None
minecraft:play_noteblock 49 None
minecraft:tune_noteblock 50 None
minecraft:pot_flower 51 None
minecraft:trigger_trapped_chest 52 None
minecraft:open_enderchest 53 None
minecraft:enchant_item 54 None
minecraft:play_record 55 None
minecraft:interact_with_furnace 56 None
minecraft:interact_with_crafting_table 57 None
minecraft:open_chest 58 None
minecraft:sleep_in_bed 59 None
minecraft:open_shulker_box 60 None
minecraft:open_barrel 61 None
minecraft:interact_with_blast_furnace 62 None
minecraft:interact_with_smoker 63 None
minecraft:interact_with_lectern 64 None
minecraft:interact_with_campfire 65 None
minecraft:interact_with_cartography_table 66 None
minecraft:interact_with_loom 67 None
minecraft:interact_with_stonecutter 68 None
minecraft:bell_ring 69 None
minecraft:raid_trigger 70 None
minecraft:raid_win 71 None
minecraft:interact_with_anvil 72 None
minecraft:interact_with_grindstone 73 None
minecraft:target_hit 74 None
minecraft:interact_with_smithing_table 75 None

Units:

  • None: just a normal number (formatted with 0 decimal places)
  • Damage: value is 10 times the normal amount
  • Distance: a distance in centimeters (hundredths of blocks)
  • Time: a time span in ticks

Acknowledge Block Change

Acknowledges a user-initiated block change. After receiving this packet, the client will display the block state sent by the server instead of the one predicted by the client.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x04

resource:
block_changed_ack
Play Client Sequence ID Template:Type Represents the sequence to acknowledge; this is used for properly syncing block changes to the client after interactions.

Set Block Destroy Stage

0–9 are the displayable destroy stages and each other number means that there is no animation on this coordinate.

Block break animations can still be applied on air; the animation will remain visible, although there is no block being broken. However, if this is applied to a transparent block, odd graphical effects may happen, including water losing its transparency. (An effect similar to this can be seen in normal gameplay when breaking ice blocks)

If you need to display several break animations at the same time, you have to give each of them a unique Entity ID. The entity ID does not need to correspond to an actual entity on the client. It is valid to use a randomly generated number.

When removing the break animation, you must use the ID of the entity that set it.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x05

resource:
block_destruction
Play Client Entity ID Template:Type The ID of the entity breaking the block.
Location Template:Type Block Position.
Destroy Stage Template:Type 0–9 to set it, any other value to remove it.

Block Entity Data

Sets the block entity associated with the block at the given location.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x06

resource:
block_entity_data
Play Client Location Template:Type
Type Template:Type ID in the minecraft:block_entity_type registry
NBT Data Template:Type Data to set.

Block Action

This packet is used for a number of actions and animations performed by blocks, usually non-persistent. The client ignores the provided block type and instead uses the block state in their world.

See Minecraft:Java Edition protocol/Block actions for a list of values.

Template:Warning

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x07

resource:
block_event
Play Client Location Template:Type Block coordinates.
Action ID (Byte 1) Template:Type Varies depending on block — see Minecraft:Java Edition protocol/Block actions.
Action Parameter (Byte 2) Template:Type Varies depending on block — see Minecraft:Java Edition protocol/Block actions.
Block Type Template:Type ID in the minecraft:block registry. This value is unused by the vanilla client, as it will infer the type of block based on the given position.

Block Update

Fired whenever a block is changed within the render distance.

Template:Warning

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x08

resource:
block_update
Play Client Location Template:Type Block Coordinates.
Block ID Template:Type The new block state ID for the block as given in the global block state palette.

Boss Bar

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x09

resource:
boss_event
Play Client UUID Template:Type Unique ID for this bar.
Action Template:Type Template:Type Determines the layout of the remaining packet.
Action Field Name
0: add Title Template:Type
Health Template:Type From 0 to 1. Values greater than 1 do not crash a vanilla client, and start rendering part of a second health bar at around 1.5.
Color Template:Type Template:Type Color ID (see below).
Division Template:Type Template:Type Type of division (see below).
Flags Template:Type Bit mask. 0x01: should darken sky, 0x02: is dragon bar (used to play end music), 0x04: create fog (previously was also controlled by 0x02).
1: remove no fields no fields Removes this boss bar.
2: update health Health Template:Type as above
3: update title Title Template:Type
4: update style Color Template:Type Template:Type Color ID (see below).
Dividers Template:Type Template:Type as above
5: update flags Flags Template:Type as above
ID Color
0 Pink
1 Blue
2 Red
3 Green
4 Yellow
5 Purple
6 White
ID Type of division
0 No division
1 6 notches
2 10 notches
3 12 notches
4 20 notches

Change Difficulty

Changes the difficulty setting in the client's option menu

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0A

resource:
change_difficulty
Play Client Difficulty Template:Type Template:Type 0: peaceful, 1: easy, 2: normal, 3: hard.
Difficulty locked? Template:Type

Chunk Batch Finished

Marks the end of a chunk batch. The vanilla client marks the time it receives this packet and calculates the elapsed duration since the beginning of the chunk batch. The client uses this duration and the batch size received in this packet to estimate the number of milliseconds elapsed per chunk received. This value is then used to calculate the desired number of chunks per tick through the formula 25 / millisPerChunk, which is reported to the server through Chunk Batch Received. This likely uses 25 instead of the normal tick duration of 50 so chunk processing will only use half of the client's and network's bandwidth.

The vanilla client uses the samples from the latest 15 batches to estimate the milliseconds per chunk number.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0B

resource:
chunk_batch_finished
Play Client Batch size Template:Type Number of chunks.

Chunk Batch Start

Marks the start of a chunk batch. The vanilla client marks and stores the time it receives this packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0C

resource:
chunk_batch_start
Play Client no fields

Chunk Biomes

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0D

resource:
chunks_biomes
Play Client Chunk biome data Chunk Z Template:Type Template:Type Chunk coordinate (block coordinate divided by 16, rounded down)
Chunk X Template:Type Chunk coordinate (block coordinate divided by 16, rounded down)
Data Template:Type of Template:Type Chunk data structure, with sections containing only the Biomes field

Note: The order of X and Z is inverted, because the client reads them as one big-endian Template:Type, with Z being the upper 32 bits.

Clear Titles

Clear the client's current title information, with the option to also reset it.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0E

resource:
clear_titles
Play Client Reset Template:Type

Command Suggestions Response

The server responds with a list of auto-completions of the last word sent to it. In the case of regular chat, this is a player username. Command names and parameters are also supported. The client sorts these alphabetically before listing them.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0F

resource:
command_suggestions
Play Client ID Template:Type Transaction ID.
Start Template:Type Start of the text to replace.
Length Template:Type Length of the text to replace.
Matches Match Template:Type Template:Type (32767) One eligible value to insert, note that each command is sent separately instead of in a single string, hence the need for Count.
Tooltip Template:Type Template:Type Tooltip to display.

Commands

Lists all of the commands on the server, and how they are parsed.

This is a directed graph, with one root node. Each redirect or child node must refer only to nodes that have already been declared.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x10

resource:
commands
Play Client Nodes Template:Type of Node An array of nodes.
Root index Template:Type Index of the root node in the previous array.

For more information on this packet, see the Minecraft:Java Edition protocol/Command data article.

Close Container

This packet is sent from the server to the client when a window is forcibly closed, such as when a chest is destroyed while it's open. The vanilla client disregards the provided window ID and closes any active window.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x11

resource:
container_close
Play Client Window ID Template:Type This is the ID of the window that was closed. 0 for inventory.

Set Container Content

File:Inventory-slots.png
The inventory slots

Replaces the contents of a container window. Sent by the server upon initialization of a container window or the player's inventory, and in response to state ID mismatches (see #Click Container).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x12

resource:
container_set_content
Play Client Window ID Template:Type The ID of window which items are being sent for. 0 for player inventory. The client ignores any packets targeting a Window ID other than the current one. However, an exception is made for the player inventory, which may be targeted at any time. (The vanilla server does not appear to utilize this special case.)
State ID Template:Type A server-managed sequence number used to avoid desynchronization; see #Click Container.
Slot Data Template:Type of Template:Type
Carried Item Template:Type Item being dragged with the mouse.

See inventory windows for further information about how slots are indexed. Use Open Screen to open the container on the client.

Set Container Property

This packet is used to inform the client that part of a GUI window should be updated.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x13

resource:
container_set_data
Play Client Window ID Template:Type
Property Template:Type The property to be updated, see below.
Value Template:Type The new value for the property, see below.

The meaning of the Property field depends on the type of the window. The following table shows the known combinations of window type and property, and how the value is to be interpreted.

Window type Property Value
Furnace 0: Fire icon (fuel left) counting from fuel burn time down to 0 (in-game ticks)
1: Maximum fuel burn time fuel burn time or 0 (in-game ticks)
2: Progress arrow counting from 0 to maximum progress (in-game ticks)
3: Maximum progress always 200 on the vanilla server
Enchantment Table 0: Level requirement for top enchantment slot The enchantment's xp level requirement
1: Level requirement for middle enchantment slot
2: Level requirement for bottom enchantment slot
3: The enchantment seed Used for drawing the enchantment names (in SGA) clientside. The same seed is used to calculate enchantments, but some of the data isn't sent to the client to prevent easily guessing the entire list (the seed value here is the regular seed bitwise and 0xFFFFFFF0).
4: Enchantment ID shown on mouse hover over top enchantment slot The enchantment ID (set to -1 to hide it), see below for values
5: Enchantment ID shown on mouse hover over middle enchantment slot
6: Enchantment ID shown on mouse hover over bottom enchantment slot
7: Enchantment level shown on mouse hover over the top slot The enchantment level (1 = I, 2 = II, 6 = VI, etc.), or -1 if no enchant
8: Enchantment level shown on mouse hover over the middle slot
9: Enchantment level shown on mouse hover over the bottom slot
Beacon 0: Power level 0-4, controls what effect buttons are enabled
1: First potion effect Potion effect ID for the first effect, or -1 if no effect
2: Second potion effect Potion effect ID for the second effect, or -1 if no effect
Anvil 0: Repair cost The repair's cost in XP levels
Brewing Stand 0: Brew time 0 – 400, with 400 making the arrow empty, and 0 making the arrow full
1: Fuel time 0 - 20, with 0 making the arrow empty, and 20 making the arrow full
Stonecutter 0: Selected recipe The index of the selected recipe. -1 means none is selected.
Loom 0: Selected pattern The index of the selected pattern. 0 means none is selected, 0 is also the internal ID of the "base" pattern.
Lectern 0: Page number The current page number, starting from 0.
Smithing Table 0: Has recipe error True if greater than zero.
Crafter 0-9: Slot Disabled 0 If the slot is enabled, 1 if the slot is disabled

For an enchanting table, the following numerical IDs are used:

Numerical ID Enchantment ID Enchantment Name
0 minecraft:protection Protection
1 minecraft:fire_protection Fire Protection
2 minecraft:feather_falling Feather Falling
3 minecraft:blast_protection Blast Protection
4 minecraft:projectile_protection Projectile Protection
5 minecraft:respiration Respiration
6 minecraft:aqua_affinity Aqua Affinity
7 minecraft:thorns Thorns
8 minecraft:depth_strider Depth Strider
9 minecraft:frost_walker Frost Walker
10 minecraft:binding_curse Curse of Binding
11 minecraft:soul_speed Soul Speed
12 minecraft:swift_sneak Swift Sneak
13 minecraft:sharpness Sharpness
14 minecraft:smite Smite
15 minecraft:bane_of_arthropods Bane of Arthropods
16 minecraft:knockback Knockback
17 minecraft:fire_aspect Fire Aspect
18 minecraft:looting Looting
19 minecraft:sweeping_edge Sweeping Edge
20 minecraft:efficiency Efficiency
21 minecraft:silk_touch Silk Touch
22 minecraft:unbreaking Unbreaking
23 minecraft:fortune Fortune
24 minecraft:power Power
25 minecraft:punch Punch
26 minecraft:flame Flame
27 minecraft:infinity Infinity
28 minecraft:luck_of_the_sea Luck of the Sea
29 minecraft:lure Lure
30 minecraft:loyalty Loyalty
31 minecraft:impaling Impaling
32 minecraft:riptide Riptide
33 minecraft:channeling Channeling
34 minecraft:multishot Multishot
35 minecraft:quick_charge Quick Charge
36 minecraft:piercing Piercing
37 minecraft:density Density
38 minecraft:breach Breach
39 minecraft:wind_burst Wind Burst
40 minecraft:mending Mending
41 minecraft:vanishing_curse Curse of Vanishing

Set Container Slot

Sent by the server when an item in a slot (in a window) is added/removed.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x14

resource:
container_set_slot
Play Client Window ID Template:Type The window that is being updated. 0 for player inventory. The client ignores any packets targeting a Window ID other than the current one; see below for exceptions.
State ID Template:Type A server-managed sequence number used to avoid desynchronization; see #Click Container.
Slot Template:Type The slot that should be updated.
Slot Data Template:Type

If Window ID is 0, the hotbar and offhand slots (slots 36 through 45) may be updated even when a different container window is open. (The vanilla server does not appear to utilize this special case.) Updates are also restricted to those slots when the player is looking at a creative inventory tab other than the survival inventory. (The vanilla server does not handle this restriction in any way, leading to MC-242392.)

When a container window is open, the server never sends updates targeting Window ID 0—all of the window types include slots for the player inventory. The client must automatically apply changes targeting the inventory portion of a container window to the main inventory; the server does not resend them for ID 0 when the window is closed. However, since the armor and offhand slots are only present on ID 0, updates to those slots occurring while a window is open must be deferred by the server until the window's closure.

Cookie Request (play)

Requests a cookie that was previously stored.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x15

resource:
cookie_request
Play Client Key Template:Type The identifier of the cookie.

Set Cooldown

Applies a cooldown period to all items with the given type. Used by the vanilla server with enderpearls. This packet should be sent when the cooldown starts and also when the cooldown ends (to compensate for lag), although the client will end the cooldown automatically. Can be applied to any item, note that interactions still get sent to the server with the item, but the client does not play the animation nor attempt to predict results (i.e, block placing).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x16

resource:
cooldown
Play Client Cooldown Group Template:Type Identifier of the item (minecraft:stone) or the cooldown group ("use_cooldown" item component)
Cooldown Ticks Template:Type Number of ticks to apply a cooldown for, or 0 to clear the cooldown.

Chat Suggestions

Unused by the vanilla server. Likely provided for custom servers to send chat message completions to clients.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x17

resource:
custom_chat_completions
Play Client Action Template:Type Template:Type 0: Add, 1: Remove, 2: Set
Entries Template:Type of Template:Type (32767)

Clientbound Plugin Message (play)

Template:Main

Mods and plugins can use this to send their data. Minecraft itself uses several plugin channels. These internal channels are in the minecraft namespace.

More information on how it works on Dinnerbone's blog. More documentation about internal and popular registered channels is here.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x18

resource:
custom_payload
Play Client Channel Template:Type Name of the plugin channel used to send the data.
Data Template:Type (1048576) Any data, depending on the channel. Typically this would be a sequence of fields using standard data types, but some unofficial channels have unusual formats. There is no length prefix that applies to all channel types, but the format specific to the channel may or may not include one or more length prefixes (such as the string length prefix in the standard minecraft:brand channel). The vanilla client enforces a length limit of 1048576 bytes on this data, but only if the channel type is unrecognized.

Damage Event

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x19

resource:
damage_event
Play Client
Entity ID Template:Type The ID of the entity taking damage
Source Type ID Template:Type The type of damage in the minecraft:damage_type registry, defined by the Registry Data packet.
Source Cause ID Template:Type The ID + 1 of the entity responsible for the damage, if present. If not present, the value is 0
Source Direct ID Template:Type The ID + 1 of the entity that directly dealt the damage, if present. If not present, the value is 0. If this field is present:
  • and damage was dealt indirectly, such as by the use of a projectile, this field will contain the ID of such projectile;
  • and damage was dealt directly, such as by manually attacking, this field will contain the same value as Source Cause ID.
Source Position X Template:Type Template:Type The vanilla server sends the Source Position when the damage was dealt by the /damage command and a position was specified
Y Template:Type
Z Template:Type

Debug Block Value

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1A

resource:
debug_block_value
Play Client Location Template:Type
Update Template:Type

Debug Chunk Value

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1B

resource:
debug_chunk_value
Play Client Chunk Z Template:Type
Chunk X Template:Type
Update Template:Type

Note: The order of X and Z is inverted, because the client reads them as one big-endian Template:Type, with Z being the upper 32 bits.

Debug Entity Value

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1C

resource:
debug_entity_value
Play Client Entity ID Template:Type
Update Template:Type

Debug Event

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1D

resource:
debug_event
Play Client Event Template:Type

Debug Sample

Sample data that is sent periodically after the client has subscribed with Debug Sample Subscription.

The vanilla server only sends debug samples to players who are server operators.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1E

resource:
debug_sample
Play Client Sample Template:Type of Template:Type Array of type-dependent samples.
Sample Type Template:Type Template:Type See below.

Types:

Id Name Description
0 Tick time Four different tick-related metrics, each one represented by one long on the array.

They are measured in nano-seconds, and are as follows:

  • 0: Full tick time: Aggregate of the three times below;
  • 1: Server tick time: Main server tick logic;
  • 2: Tasks time: Tasks scheduled to execute after the main logic;
  • 3: Idle time: Time idling to complete the full 50ms tick cycle.

Note that the vanilla client calculates the timings used for min/max/average display by subtracting the idle time from the full tick time. This can cause the displayed values to go negative if the idle time is (nonsensically) greater than the full tick time.

Delete Message

Removes a message from the client's chat. This only works for messages with signatures; system messages cannot be deleted with this packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1F

resource:
delete_chat
Play Client Message ID Template:Type The message ID + 1, used for validating message signature. The next field is present only when value of this field is equal to 0.
Signature Template:Type Template:Type (256) The previous message's signature. Always 256 bytes and not length-prefixed.

Disconnect (play)

Sent by the server before it disconnects a client. The client assumes that the server has already closed the connection by the time the packet arrives.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x20

resource:
disconnect
Play Client Reason Template:Type Displayed to the client when the connection terminates.

Disguised Chat Message

Template:Main

Sends the client a chat message, but without any message signing information.

The vanilla server uses this packet when the console is communicating with players through commands, such as /say, /tell, /me, among others.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x21

resource:
disguised_chat
Play Client Message Template:Type This is used as the content parameter when formatting the message on the client.
Chat Type Template:Type Template:Type Either the type of chat in the minecraft:chat_type registry, defined by the Registry Data packet, or an inline definition.
Sender Name Template:Type The name of the one sending the message, usually the sender's display name.

This is used as the sender parameter when formatting the message on the client.

Target Name Template:Type Template:Type The name of the one receiving the message, usually the receiver's display name.

This is used as the target parameter when formatting the message on the client.

Entity Event

Entity statuses generally trigger an animation for an entity. The available statuses vary by the entity's type (and are available to subclasses of that type as well).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x22

resource:
entity_event
Play Client Entity ID Template:Type
Entity Status Template:Type Template:Type See Minecraft:Java Edition protocol/Entity statuses for a list of which statuses are valid for each type of entity.

Teleport Entity

Template:Warning

This packet is sent by the server when an entity moves more than 8 blocks.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x23

resource:
entity_position_sync
Play Client Entity ID Template:Type
X Template:Type
Y Template:Type
Z Template:Type
Velocity X Template:Type
Velocity Y Template:Type
Velocity Z Template:Type
Yaw Template:Type Rotation on the X axis, in degrees.
Pitch Template:Type Rotation on the Y axis, in degrees.
On Ground Template:Type

Explosion

Sent when an explosion occurs (creepers, TNT, and ghast fireballs).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x24

resource:
explode
Play Client X Template:Type
Y Template:Type
Z Template:Type
Radius Template:Type
Block Count Template:Type
Player Delta Velocity X Template:Type Template:Type Velocity difference of the player being pushed by the explosion.
Y Template:Type
Z Template:Type
Explosion Particle ID Template:Type ID in the minecraft:particle_type registry.
Explosion Particle Data Varies Particle data as specified in Minecraft:Java Edition protocol/Particles.
Explosion Sound Template:Type Template:Type ID in the minecraft:sound_event registry, or an inline definition.
Block Particle Alternatives Particle ID Template:Type Template:Type
Particle Data Varies Particle data as specified in Minecraft:Java Edition protocol/Particles.
Scaling Template:Type
Speed Template:Type
Weight Template:Type

Unload Chunk

Tells the client to unload a chunk column.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x25

resource:
forget_level_chunk
Play Client Chunk Z Template:Type Block coordinate divided by 16, rounded down.
Chunk X Template:Type Block coordinate divided by 16, rounded down.

Note: The order is inverted, because the client reads this packet as one big-endian Template:Type, with Z being the upper 32 bits.

It is legal to send this packet even if the given chunk is not currently loaded.

Game Event

Used for a wide variety of game events, such as weather, respawn availability (from Minecraft:bed and Minecraft:respawn anchor), game mode, some game rules, and Minecraft:demo messages.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x26

resource:
game_event
Play Client Event Template:Type See below.
Value Template:Type Depends on Event.

Events:

Event Effect Value
0 No respawn block available Note: Displays message 'block.minecraft.spawn.not_valid' (You have no home bed or charged respawn anchor, or it was obstructed) to the player.
1 Begin raining
2 End raining
3 Change game mode 0: Survival, 1: Creative, 2: Adventure, 3: Spectator.
4 Win game 0: Just respawn player.
1: Roll the credits and respawn player.
Note that 1 is only sent by vanilla server when player has not yet achieved advancement "The end?", else 0 is sent.
5 Demo event 0: Show welcome to demo screen.
101: Tell movement controls.
102: Tell jump control.
103: Tell inventory control.
104: Tell that the demo is over and print a message about how to take a screenshot.
6 Arrow hit player Note: Sent when any player is struck by an arrow.
7 Rain level change Note: Seems to change both sky color and lighting.
Rain level ranging from 0 to 1.
8 Thunder level change Note: Seems to change both sky color and lighting (same as Rain level change, but doesn't start rain). It also requires rain to render by vanilla client.
Thunder level ranging from 0 to 1.
9 Play pufferfish sting sound
10 Play elder guardian mob appearance (effect and sound)
11 Enable respawn screen 0: Enable respawn screen.
1: Immediately respawn (sent when the doImmediateRespawn gamerule changes).
12 Limited crafting 0: Disable limited crafting.
1: Enable limited crafting (sent when the doLimitedCrafting gamerule changes).
13 Start waiting for level chunks Instructs the client to begin the waiting process for the level chunks.
Sent by the server after the level is cleared on the client and is being re-sent (either during the first, or subsequent reconfigurations).

Game Test Highlight Position

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x27

resource:
game_test_highlight_pos
Play Client Absolute Location Template:Type
Relative Location Template:Type

Open Horse Screen

This packet is used exclusively for opening the horse GUI. Open Screen is used for all other GUIs. The client will not open the inventory if the Entity ID does not point to a horse-like animal.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x28

resource:
horse_screen_open
Play Client Window ID Template:Type Same as the field of Open Screen.
Inventory columns count Template:Type How many columns of horse inventory slots exist in the GUI, 3 slots per column.
Entity ID Template:Type The "owner" entity of the GUI. The client should close the GUI if the owner entity dies or is cleared.

Hurt Animation

Plays a bobbing animation for the entity receiving damage.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x29

resource:
hurt_animation
Play Client Entity ID Template:Type The ID of the entity taking damage
Yaw Template:Type The direction the damage is coming from in relation to the entity

Initialize World Border

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2A

resource:
initialize_border
Play Client X Template:Type
Z Template:Type
Old Diameter Template:Type Current length of a single side of the world border, in meters.
New Diameter Template:Type Target length of a single side of the world border, in meters.
Speed Template:Type Number of real-time milliseconds until New Diameter is reached. It appears that vanilla server does not sync world border speed to game ticks, so it gets out of sync with server lag. If the world border is not moving, this is set to 0.
Portal Teleport Boundary Template:Type Resulting coordinates from a portal teleport are limited to ±value. Usually 29999984.
Warning Blocks Template:Type In meters.
Warning Time Template:Type In seconds as set by /worldborder warning time.

The vanilla client determines how solid to display the warning by comparing to whichever is higher, the warning distance or whichever is lower, the distance from the current diameter to the target diameter or the place the border will be after warningTime seconds. In pseudocode:

<syntaxhighlight lang="java"> distance = max(min(resizeSpeed * 1000 * warningTime, abs(targetDiameter - currentDiameter)), warningDistance); if (playerDistance < distance) {

   warning = 1.0 - playerDistance / distance;

} else {

   warning = 0.0;

} </syntaxhighlight>

Clientbound Keep Alive (play)

The server will frequently send out a keep-alive, each containing a random ID. The client must respond with the same payload (see Serverbound Keep Alive). If the client does not respond to a Keep Alive packet within 15 seconds after it was sent, the server kicks the client. Vice versa, if the server does not send any keep-alives for 20 seconds, the client will disconnect and yield a "Timed out" exception.

The vanilla server uses a system-dependent time in milliseconds to generate the keep alive ID value.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2B

resource:
keep_alive
Play Client Keep Alive ID Template:Type

Chunk Data and Update Light

Template:Main Template:See also

Sent when a chunk comes into the client's view distance, specifying its terrain, lighting and block entities.

The chunk must be within the view area previously specified with Set Center Chunk; see that packet for details.

It is not strictly necessary to send all block entities in this packet; it is still legal to send them with Block Entity Data later.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2C

resource:
level_chunk_with_light
Play Client Chunk X Template:Type Chunk coordinate (block coordinate divided by 16, rounded down)
Chunk Z Template:Type Chunk coordinate (block coordinate divided by 16, rounded down)
Heightmaps Template:Type of Heightmap See Chunk Format#Heightmap structure
Data Template:Type of Template:Type See Chunk Format#Data structure
Block Entities Packed XZ Template:Type Template:Type The packed section coordinates are relative to the chunk they are in. Values 0-15 are valid.
packed_xz = ((blockX & 15) << 4) | (blockZ & 15) // encode
x = packed_xz >> 4, z = packed_xz & 15 // decode
Y Template:Type The height relative to the world
Type Template:Type The type of block entity
Data NBT The block entity's data, without the X, Y, and Z values
Light Template:Type

Unlike the Update Light packet, which uses the same format, setting the bit corresponding to a section to 0 in both of the block light or sky light masks does not appear to be useful, and the results in testing have been highly inconsistent.

World Event

Sent when a client is to play a sound or particle effect.

By default, the Minecraft client adjusts the volume of sound effects based on distance. The final boolean field is used to disable this, and instead, the effect is played from 2 blocks away in the correct direction. Currently, this is only used for effect 1023 (wither spawn), effect 1028 (enderdragon death), and effect 1038 (end portal opening); it is ignored on other effects.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2D

resource:
level_event
Play Client Event Template:Type The event, see below.
Location Template:Type The location of the event.
Data Template:Type Extra data for certain events, see below.
Disable Relative Volume Template:Type See above.

Events:

ID Name Data
Sound
1000 Dispenser dispenses
1001 Dispenser fails to dispense
1002 Dispenser shoots
1004 Firework shot
1009 Fire extinguished
1010 Play record An ID in the minecraft:item registry, corresponding to a record item. If the ID doesn't correspond to a record, the packet is ignored. Any record already being played at the given location is overwritten. See Data Generators for information on item IDs.
1011 Stop record
1015 Ghast warns
1016 Ghast shoots
1017 Ender dragon shoots
1018 Blaze shoots
1019 Zombie attacks wooden door
1020 Zombie attacks iron door
1021 Zombie breaks wooden door
1022 Wither breaks block
1023 Wither spawned
1024 Wither shoots
1025 Bat takes off
1026 Zombie infects
1027 Zombie villager converted
1028 Ender dragon dies
1029 Anvil destroyed
1030 Anvil used
1031 Anvil lands
1032 Portal travel
1033 Chorus flower grows
1034 Chorus flower dies
1035 Brewing stand brews
1038 End portal created
1039 Phantom bites
1040 Zombie converts to drowned
1041 Husk converts to zombie by drowning
1042 Grindstone used
1043 Book page turned
1044 Smithing table used
1045 Pointed dripstone landing
1046 Lava dripping on cauldron from dripstone
1047 Water dripping on cauldron from dripstone
1048 Skeleton converts to stray
1049 Crafter successfully crafts item
1050 Crafter fails to craft item
Particle
1500 Composter composts
1501 Lava converts block (either water to stone, or removes existing blocks such as torches)
1502 Redstone torch burns out
1503 Ender eye placed in end portal frame
1504 Fluid drips from dripstone
1505 Bone meal particles and sound How many particles to spawn.
2000 Dispenser activation smoke Direction, see below.
2001 Block break + block break sound Block state ID from the global block state palette.
2002 Splash potion. Particle effect + glass break sound. RGB color as an integer (e.g. 8364543 for #7FA1FF).
2003 Eye of ender entity break animation — particles and sound
2004 Spawner spawns mob: smoke + flames
2006 Dragon breath
2007 Instant splash potion. Particle effect + glass break sound. RGB color as an integer (e.g. 8364543 for #7FA1FF).
2008 Ender dragon destroys block
2009 Wet sponge vaporizes
2010 Crafter activation smoke Direction, see below.
2011 Bee fertilizes plant How many particles to spawn.
2012 Turtle egg placed How many particles to spawn.
2013 Smash attack (mace) How many particles to spawn.
3000 End gateway spawns
3001 Ender dragon resurrected
3002 Electric spark
3003 Copper apply wax
3004 Copper remove wax
3005 Copper scrape oxidation
3006 Sculk charge
3007 Sculk shrieker shriek
3008 Block finished brushing Block state ID from the global block state palette.
3009 Sniffer egg cracks If 1, 3-6, if any other number, 1-3 particles will be spawned.
3011 Trial spawner spawns mob (at spawner)
3012 Trial spawner spawns mob (at spawn location)
3013 Trial spawner detects player Number of players nearby
3014 Trial spawner ejects item
3015 Vault activates
3016 Vault deactivates
3017 Vault ejects item
3018 Cobweb weaved
3019 Ominous trial spawner detects player Number of players nearby
3020 Trial spawner turns ominous If 0, the sound will be played at 0.3 volume. Otherwise, it is played at full volume.
3021 Ominous item spawner spawns item

Smoke directions:

ID Direction
0 Down
1 Up
2 North
3 South
4 West
5 East

Particle

Displays the named particle

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2E

resource:
level_particles
Play Client Long Distance Template:Type If true, particle distance increases from 256 to 65536.
Always Visible Template:Type Whether this particle should always be visible.
X Template:Type X position of the particle.
Y Template:Type Y position of the particle.
Z Template:Type Z position of the particle.
Offset X Template:Type This is added to the X position after being multiplied by random.nextGaussian().
Offset Y Template:Type This is added to the Y position after being multiplied by random.nextGaussian().
Offset Z Template:Type This is added to the Z position after being multiplied by random.nextGaussian().
Max Speed Template:Type
Particle Count Template:Type The number of particles to create.
Particle ID Template:Type ID in the minecraft:particle_type registry.
Data Varies Particle data as specified in Minecraft:Java Edition protocol/Particles.

Update Light

Updates light levels for a chunk. See Minecraft:Light for information on how lighting works in Minecraft.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2F

resource:
light_update
Play Client Chunk X Template:Type Chunk coordinate (block coordinate divided by 16, rounded down)
Chunk Z Template:Type Chunk coordinate (block coordinate divided by 16, rounded down)
Data Template:Type

A bit will never be set in both the block light mask and the empty block light mask, though it may be present in neither of them (if the block light does not need to be updated for the corresponding chunk section). The same applies to the sky light mask and the empty sky light mask.

Login (play)

See Minecraft:protocol encryption for information on logging in.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x30

resource:
login
Play Client Entity ID Template:Type The player's Entity ID (EID).
Is hardcore Template:Type
Dimension Names Template:Type of Template:Type Identifiers for all dimensions on the server.
Max Players Template:Type Was once used by the client to draw the tab list, but now it is ignored.
View Distance Template:Type Render distance (2-32).
Simulation Distance Template:Type The distance that the client will process specific things, such as entities.
Reduced Debug Info Template:Type If true, a vanilla client shows reduced information on the Minecraft:debug screen. For servers in development, this should almost always be false.
Enable respawn screen Template:Type Set to false when the doImmediateRespawn gamerule is true.
Do limited crafting Template:Type Whether players can only craft recipes they have already unlocked. Currently unused by the client.
Dimension Type Template:Type The ID of the type of dimension in the minecraft:dimension_type registry, defined by the Registry Data packet.
Dimension Name Template:Type Name of the dimension being spawned into.
Hashed seed Template:Type First 8 bytes of the SHA-256 hash of the world's seed. Used client-side for biome noise
Game mode Template:Type 0: Survival, 1: Creative, 2: Adventure, 3: Spectator.
Previous Game mode Template:Type -1: Undefined (null), 0: Survival, 1: Creative, 2: Adventure, 3: Spectator. The previous game mode. Vanilla client uses this for the debug (F3 + N & F3 + F4) game mode switch. (More information needed)
Is Debug Template:Type True if the world is a Minecraft:debug mode world; debug mode worlds cannot be modified and have predefined blocks.
Is Flat Template:Type True if the world is a Minecraft:superflat world; flat worlds have different void fog and a horizon at y=0 instead of y=63.
Has death location Template:Type If true, then the next two fields are present.
Death dimension name Template:Type Template:Type Name of the dimension the player died in.
Death location Template:Type Template:Type The location that the player died at.
Portal cooldown Template:Type The number of ticks until the player can use the last used portal again. Looks like it's an attempt to fix MC-180.
Sea level Template:Type
Enforces Secure Chat Template:Type

Map Data

Updates a rectangular area on a Minecraft:map item.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x31

resource:
map_item_data
Play Client Map ID Template:Type Map ID of the map being modified
Scale Template:Type From 0 for a fully zoomed-in map (1 block per pixel) to 4 for a fully zoomed-out map (16 blocks per pixel)
Locked Template:Type True if the map has been locked in a cartography table
Icons Type Template:Type Template:Type Template:Type Template:Type See below
X Template:Type Map coordinates: -128 for furthest left, +127 for furthest right
Z Template:Type Map coordinates: -128 for highest, +127 for lowest
Direction Template:Type 0-15
Display Name Template:Type Template:Type
Color Patch Columns Template:Type Number of columns updated
Rows Template:Type Template:Type Only if Columns is more than 0; number of rows updated
X Template:Type Template:Type Only if Columns is more than 0; x offset of the westernmost column
Z Template:Type Template:Type Only if Columns is more than 0; z offset of the northernmost row
Data Template:Type Template:Type of Template:Type Only if Columns is more than 0; see Minecraft: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 Monument
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
27 Desert Village
28 Plains Village
29 Savanna Village
30 Snowy Village
31 Taiga Village
32 Jungle Temple
33 Swamp Hut
34 Trial Chambers

Merchant Offers

The list of trades a villager NPC is offering.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x32

resource:
merchant_offers
Play Client Window ID Template:Type The ID of the window that is open; this is an int rather than a byte.
Trades Input item 1 Template:Type Trade Item See below. The first item the player has to supply for this villager trade. The count of the item stack is the default "price" of this trade.
Output item Template:Type The item the player will receive from this villager trade.
Input item 2 Template:Type Trade Item The second item the player has to supply for this villager trade.
Trade disabled Template:Type True if the trade is disabled; false if the trade is enabled.
Number of trade uses Template:Type Number of times the trade has been used so far. If equal to the maximum number of trades, the client will display a red X.
Maximum number of trade uses Template:Type Number of times this trade can be used before it's exhausted.
XP Template:Type Amount of XP the villager will earn each time the trade is used.
Special Price Template:Type Can be zero or negative. The number is added to the price when an item is discounted due to player reputation or other effects.
Price Multiplier Template:Type Can be low (0.05) or high (0.2). Determines how much demand, player reputation, and temporary effects will adjust the price.
Demand Template:Type If positive, causes the price to increase. Negative values seem to be treated the same as zero.
Villager level Template:Type Appears on the trade GUI; meaning comes from the translation key merchant.level. + level.

1: Novice, 2: Apprentice, 3: Journeyman, 4: Expert, 5: Master.

Experience Template:Type Total experience for this villager (always 0 for the wandering trader).
Is regular villager Template:Type True if this is a regular villager; false for the wandering trader. When false, hides the villager level and some other GUI elements.
Can restock Template:Type True for regular villagers and false for the wandering trader. If true, the "Villagers restock up to two times per day." message is displayed when hovering over disabled trades.

Trade Item:

Field Name Field Type Meaning
Item ID Template:Type The item ID. Item IDs are distinct from block IDs; see Data Generators for more information.
Item Count Template:Type The item count.
Components Component type Template:Type Template:Type Template:Type The type of component. See Structured components for more detail.
Component data Varies The component-dependent data. See Structured components for more detail.

Modifiers can increase or decrease the number of items for the first input slot. The second input slot and the output slot never change the number of items. The number of items may never be less than 1, and never more than the stack size. If special price and demand are both zero, only the default price is displayed. If either is non-zero, then the adjusted price is displayed next to the crossed-out default price. The adjusted prices is calculated as follows:

Adjusted price = default price + floor(default price x multiplier x demand) + special price

File:1.14-merchant-slots.png
The merchant UI, for reference


Update Entity Position

This packet is sent by the server when an entity moves a small distance. The change in position is represented as a fixed-point number with 12 fraction bits and 4 integer bits. As such, the maximum movement distance along each axis is 8 blocks in the negative direction, or 7.999755859375 blocks in the positive direction. If the movement exceeds these limits, Teleport Entity should be sent instead.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x33

resource:
move_entity_pos
Play Client Entity ID Template:Type
Delta X Template:Type Change in X position as currentX * 4096 - prevX * 4096.
Delta Y Template:Type Change in Y position as currentY * 4096 - prevY * 4096.
Delta Z Template:Type Change in Z position as currentZ * 4096 - prevZ * 4096.
On Ground Template:Type

Update Entity Position and Rotation

This packet is sent by the server when an entity rotates and moves. See #Update Entity Position for how the position is encoded.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x34

resource:
move_entity_pos_rot
Play Client Entity ID Template:Type
Delta X Template:Type Change in X position as currentX * 4096 - prevX * 4096.
Delta Y Template:Type Change in Y position as currentY * 4096 - prevY * 4096.
Delta Z Template:Type Change in Z position as currentZ * 4096 - prevZ * 4096.
Yaw Template:Type New angle, not a delta.
Pitch Template:Type New angle, not a delta.
On Ground Template:Type

Move Minecart Along Track

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x35

resource:
move_minecart_along_track
Play Client Entity ID Template:Type
Steps X Template:Type Template:Type
Y Template:Type
Z Template:Type
Velocity X Template:Type
Velocity Y Template:Type
Velocity Z Template:Type
Yaw Template:Type
Pitch Template:Type
Weight Template:Type

Update Entity Rotation

This packet is sent by the server when an entity rotates.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x36

resource:
move_entity_rot
Play Client Entity ID Template:Type
Yaw Template:Type New angle, not a delta.
Pitch Template:Type New angle, not a delta.
On Ground Template:Type

Move Vehicle (clientbound)

If the player is riding a client-side-controlled vehicle, teleports the vehicle to the specified position. Sent by the vanilla server in response to serverbound Move Vehicle packets that fail the movement speed check. Note that all fields use absolute positioning and do not allow for relative positioning.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x37

resource:
move_vehicle
Play Client X Template:Type Absolute position (X coordinate).
Y Template:Type Absolute position (Y coordinate).
Z Template:Type Absolute position (Z coordinate).
Yaw Template:Type Absolute rotation on the vertical axis, in degrees.
Pitch Template:Type Absolute rotation on the horizontal axis, in degrees.

Open Book

Sent when a player right-clicks with a signed book. This tells the client to open the book GUI.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x38

resource:
open_book
Play Client Hand Template:Type Template:Type 0: Main hand, 1: Off hand .

Open Screen

This is sent to the client when it should open an inventory, such as a chest, workbench, furnace, or other container. Resending this packet with the already existing window ID, will update the window title and window type without closing the window.

This message is not sent to clients opening their own inventory, nor do clients inform the server in any way when doing so. From the server's perspective, the inventory is always "open" whenever no other windows are.

For horses, use Open Horse Screen.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x39

resource:
open_screen
Play Client Window ID Template:Type An identifier for the window to be displayed. The vanilla server implementation is a counter, starting at 1. There can only be one window at a time; this is only used to ignore outdated packets targeting already-closed windows. Note also that the Window ID field in most other packets is only a single byte, and indeed, the vanilla server wraps around after 100.
Window Type Template:Type The window type to use for display. Contained in the minecraft:menu registry; see Minecraft:Java Edition protocol/Inventory for the different values.
Window Title Template:Type The title of the window.

Open Sign Editor

Sent when the client has placed a sign and is allowed to send Update Sign. There must already be a sign at the given location (which the client does not do automatically) - send a Block Update first.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3A

resource:
open_sign_editor
Play Client Location Template:Type
Is Front Text Template:Type Whether the opened editor is for the front or on the back of the sign

Ping (play)

Packet is not used by the vanilla server. When sent to the client, client responds with a Pong packet with the same ID.

Unlike Keep Alive this packet is handled synchronously with game logic on the vanilla client, and can thus be used to reliably detect which serverbound packets were sent after the ping and all preceding clientbound packets were received and handled.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3B

resource:
ping
Play Client ID Template:Type

Ping Response (play)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3C

resource:
pong_response
Play Client Payload Template:Type Should be the same as sent by the client.

Place Ghost Recipe

Response to the serverbound packet (Place Recipe), with the same recipe ID. Appears to be used to notify the UI.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3D

resource:
place_ghost_recipe
Play Client Window ID Template:Type
Recipe Display Template:Type

Player Abilities (clientbound)

The latter 2 floats are used to indicate the flying speed and field of view respectively, while the first byte is used to determine the value of 4 booleans.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3E

resource:
player_abilities
Play Client Flags Template:Type Bit field, see below.
Flying Speed Template:Type 0.05 by default.
Field of View Modifier Template:Type Modifies the field of view, like a speed potion. A vanilla server will use the same value as the movement speed sent in the Update Attributes packet, which defaults to 0.1 for players.

About the flags:

Field Bit
Invulnerable 0x01
Flying 0x02
Allow Flying 0x04
Creative Mode (Instant Break) 0x08

If Flying is set but Allow Flying is unset, the player is unable to stop flying.

Player Chat Message

Template:Main

Sends the client a chat message from a player.

Currently, a lot is unknown about this packet, blank descriptions are for those that are unknown

Packet ID State Bound To Sector Field Name Field Type Notes
protocol:
0x3F

resource:
player_chat
Play Client Header Global Index Template:Type A counter that starts at zero and gets increased by one for each chat message sent to the client. Each client has its own counter.
Sender Template:Type Used by the vanilla client for the disableChat launch option. Setting both longs to 0 will always display the message regardless of the setting.
Index Template:Type
Message Signature bytes Template:Type Template:Type (256) Cryptography, the signature consists of the Sender UUID, Session UUID from the Player Session packet, Index, Salt, Timestamp in epoch seconds, the length of the original chat content, the original content itself, the length of Previous Messages, and all of the Previous message signatures. These values are hashed with Template:Wikipedia and signed using the Template:Wikipedia cryptosystem. Modifying any of these values in the packet will cause this signature to fail. This buffer is always 256 bytes long and it is not length-prefixed.
Body Message Template:Type (256) Raw (optionally) signed sent message content.

This is used as the content parameter when formatting the message on the client.

Timestamp Template:Type Represents the time the message was signed as milliseconds since the Template:Wikipedia, used to check if the message was received within 2 minutes of it being sent.
Salt Template:Type Cryptography, used for validating the message signature.
Template:Type (20) Message ID Template:Type The message ID + 1, used for validating message signature. The next field is present only when value of this field is equal to 0.
Signature Template:Type Template:Type (256) The previous message's signature. Contains the same type of data as Message Signature bytes (256 bytes) above. Not length-prefixed.
Other Unsigned Content Template:Type Template:Type
Filter Type Template:Type Template:Type If the message has been filtered
Filter Type Bits Template:Type Template:Type Only present if the Filter Type is Partially Filtered. Specifies the indices at which characters in the original message string should be replaced with the # symbol (i.e., filtered) by the vanilla client
Chat Formatting Chat Type Template:Type Template:Type Either the type of chat in the minecraft:chat_type registry, defined by the Registry Data packet, or an inline definition.
Sender Name Template:Type The name of the one sending the message, usually the sender's display name.

This is used as the sender parameter when formatting the message on the client.

Target Name Template:Type Template:Type The name of the one receiving the message, usually the receiver's display name.

This is used as the target parameter when formatting the message on the client.

File:MinecraftChat.drawio4.png
Player Chat Handling Logic

Filter Types:

The filter type mask should NOT be specified unless partially filtered is selected

ID Name Description
0 PASS_THROUGH Message is not filtered at all
1 FULLY_FILTERED Message is fully filtered
2 PARTIALLY_FILTERED Only some characters in the message are filtered

End Combat

Unused by the vanilla client. This data was once used for twitch.tv metadata circa 1.8.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x40

resource:
player_combat_end
Play Client Duration Template:Type Length of the combat in ticks.

Enter Combat

Unused by the vanilla client. This data was once used for twitch.tv metadata circa 1.8.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x41

resource:
player_combat_enter
Play Client no fields

Combat Death

Used to send a respawn screen.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x42

resource:
player_combat_kill
Play Client Player ID Template:Type Entity ID of the player that died (should match the client's entity ID).
Message Template:Type The death message.

Player Info Remove

Sent by the server to remove players from the client's player list.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x43

resource:
player_info_remove
Play Client UUIDs Template:Type of Template:Type UUIDs of players to remove.

Player Info Update

Sent by the server to add or update players on the client's player list. The player list determines which player names can be tab-completed, player skins (player profiles), player display names and who shows up on the tab list (<tab> in the client).

Template:Warning

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x44

resource:
player_info_update
Play Client Actions Template:Type Determines what actions are present.
Players UUID Template:Type Template:Type The player UUID
Player Actions Template:Type of Player Actions The length of this array is determined by the number of Player Actions that give a non-zero value when applying its mask to the actions flag. For example, given the decimal number 5, binary 00000101. The masks 0x01 and 0x04 would return a non-zero value, meaning the Player Actions array would include two actions: Add Player and Update Game Mode.


Player Actions
Action Mask Field Name Type Notes
Add Player 0x01 Name Template:Type (16)
Game profile properties Name Template:Type (16) Template:Type (64)
Value Template:Type (32767)
Signature Template:Type Template:Type (1024)
Initialize Chat 0x02 Data Chat session ID Template:Type Template:Type
Public key expiry time Template:Type Key expiry time, as a UNIX timestamp in milliseconds. Only sent if Has Signature Data is true.
Encoded public key Template:Type (512) of Template:Type The player's public key, in bytes. Only sent if Has Signature Data is true.
Public key signature Template:Type (4096) of Template:Type The public key's digital signature. Only sent if Has Signature Data is true.
Update Game Mode 0x04 Game Mode Template:Type
Update Listed 0x08 Listed Template:Type Whether the player should be listed on the tab list.
Update Latency 0x10 Ping Template:Type Measured in milliseconds.
Update Display Name 0x20 Display Name Template:Type Template:Type Only sent if Has Display Name is true.
Update List Priority 0x40 Priority Template:Type See below.
Update Hat 0x80 Visible Template:Type Whether the player's hat skin layer is shown.

The properties included in this packet are the same as in Login Success, for the current player.

Ping values correspond with icons in the following way:

  • A ping that is negative (i.e., not known to the server yet) will result in the no connection icon.
  • A ping under 150 milliseconds will result in 5 bars
  • A ping under 300 milliseconds will result in 4 bars
  • A ping under 600 milliseconds will result in 3 bars
  • A ping under 1000 milliseconds (1 second) will result in 2 bars
  • A ping greater than or equal to 1 second will result in 1 bar.

The order of players on the tab list is determined as follows:

  • Players with higher priorities are sorted before those with lower priorities.
  • Among players of equal priorities, spectators are sorted after non-spectators.
  • Within each of those groups, players are sorted into teams. The teams are ordered case-sensitively by team name in ascending order. Players with no team are listed first.
  • The players of each team (and non-team) are sorted case-insensitively by name in ascending order.

Look At

Used to rotate the client player to face the given location or entity (for /teleport [<targets>] <x> <y> <z> facing).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x45

resource:
player_look_at
Play Client
Feet/eyes Template:Type Template:Type Values are feet=0, eyes=1. If set to eyes, aims using the head position; otherwise, aims using the feet position.
Target x Template:Type x coordinate of the point to face towards.
Target y Template:Type y coordinate of the point to face towards.
Target z Template:Type z coordinate of the point to face towards.
Is entity Template:Type If true, additional information about an entity is provided.
Entity ID Template:Type Template:Type Only if is entity is true — the entity to face towards.
Entity feet/eyes Template:Type Template:Type Template:Type Whether to look at the entity's eyes or feet. Same values and meanings as before, just for the entity's head/feet.

If the entity given by entity ID cannot be found, this packet should be treated as if is entity was false.

Synchronize Player Position

Teleports the client, e.g., during login, when using an ender pearl, in response to invalid move packets, etc.

Due to latency, the server may receive outdated movement packets sent before the client was aware of the teleport. To account for this, the server ignores all movement packets from the client until a Confirm Teleportation packet with an ID matching the one sent in the teleport packet is received. The vanilla client will also send a Set Player Position and Rotation packet after the Confirm Teleportation packet with the position and rotation received from this packet, and horizontal collision and on ground set to false.

Yaw is measured in degrees and does not follow classical trigonometry rules. The unit circle of yaw on the XZ-plane starts at (0, 1) and turns counterclockwise, with 90 at (-1, 0), 180 at (0, -1) and 270 at (1, 0). Additionally, yaw is not clamped to between 0 and 360 degrees; any number is valid, including negative numbers and numbers greater than 360 (see MC-90097).

Pitch is measured in degrees, where 0 is looking straight ahead, -90 is looking straight up, and 90 is looking straight down.

If the player is riding a vehicle, this packet has no effect, but both the Confirm Teleportation and Set Player Position and Rotation packets are still sent.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x46

resource:
player_position
Play Client Teleport ID Template:Type Client should confirm this packet with Confirm Teleportation containing the same Teleport ID.
X Template:Type Absolute or relative position, depending on Flags.
Y Template:Type Absolute or relative position, depending on Flags.
Z Template:Type Absolute or relative position, depending on Flags.
Velocity X Template:Type
Velocity Y Template:Type
Velocity Z Template:Type
Yaw Template:Type Absolute or relative rotation on the X axis, in degrees.
Pitch Template:Type Absolute or relative rotation on the Y axis, in degrees.
Flags Template:Type

Player Rotation

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x47

resource:
player_rotation
Play Client Yaw Template:Type Rotation on the X axis, in degrees.
Relative Yaw Template:Type
Pitch Template:Type Rotation on the Y axis, in degrees.
Relative Pitch Template:Type

Recipe Book Add

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x48

resource:
recipe_book_add
Play Client Recipes Recipe ID Template:Type Template:Type ID to assign to the recipe.
Display Template:Type
Group ID Template:Type
Category ID Template:Type ID in the minecraft:recipe_book_category registry.
Ingredients Template:Type Template:Type of Template:Type IDs in the minecraft:item registry, or an inline definition.
Flags Template:Type 0x01: show notification; 0x02: highlight as new
Replace Template:Type Replace or Add to known recipes

Recipe Book Remove

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x49

resource:
recipe_book_remove
Play Client Recipes Template:Type of Template:Type IDs of recipes to remove.

Recipe Book Settings

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x4A

resource:
recipe_book_settings
Play Client Crafting Recipe Book Open Template:Type If true, then the crafting recipe book will be open when the player opens its inventory.
Crafting Recipe Book Filter Active Template:Type If true, then the filtering option is active when the player opens its inventory.
Smelting Recipe Book Open Template:Type If true, then the smelting recipe book will be open when the player opens its inventory.
Smelting Recipe Book Filter Active Template:Type If true, then the filtering option is active when the player opens its inventory.
Blast Furnace Recipe Book Open Template:Type If true, then the blast furnace recipe book will be open when the player opens its inventory.
Blast Furnace Recipe Book Filter Active Template:Type If true, then the filtering option is active when the player opens its inventory.
Smoker Recipe Book Open Template:Type If true, then the smoker recipe book will be open when the player opens its inventory.
Smoker Recipe Book Filter Active Template:Type If true, then the filtering option is active when the player opens its inventory.

Remove Entities

Sent by the server when an entity is to be destroyed on the client.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x4B

resource:
remove_entities
Play Client Entity IDs Template:Type of Template:Type The list of entities to destroy.

Remove Entity Effect

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x4C

resource:
remove_mob_effect
Play Client Entity ID Template:Type
Effect ID Template:Type See this table.

Reset Score

This is sent to the client when it should remove a scoreboard item.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x4D

resource:
reset_score
Play Client Entity Name Template:Type (32767) The entity whose score this is. For players, this is their username; for other entities, it is their UUID.
Objective Name Template:Type Template:Type (32767) The name of the objective the score belongs to.

Remove Resource Pack (play)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x4E

resource:
resource_pack_pop
Play Client UUID Template:Type Template:Type The UUID of the resource pack to be removed.

Add Resource Pack (play)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x4F

resource:
resource_pack_push
Play Client UUID Template:Type The unique identifier of the resource pack.
URL Template:Type (32767) The URL to the resource pack.
Hash Template:Type (40) A 40 character hexadecimal, case-insensitive SHA-1 hash of the resource pack file.
If it's not a 40-character hexadecimal string, the client will not use it for hash verification and likely waste bandwidth.
Forced Template:Type The vanilla client will be forced to use the resource pack from the server. If they decline, they will be kicked from the server.
Prompt Message Template:Type Template:Type This is shown in the prompt making the client accept or decline the resource pack.

Respawn

Template:Missing info

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.

The background of the loading screen is determined based on the Dimension Name specified in this packet and the one specified in the previous Login or Respawn packet. If either the current or the previous dimension is minecraft:nether, the Nether portal background is used. Otherwise, if the current or the previous dimension is minecraft:the_end, the End portal background is used. If the player is dead (health is 0), the default background is always used.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x50

resource:
respawn
Play Client Dimension Type Template:Type The ID of type of dimension in the minecraft:dimension_type registry, defined by the Registry Data packet.
Dimension Name Template:Type Name of the dimension being spawned into.
Hashed seed Template:Type First 8 bytes of the SHA-256 hash of the world's seed. Used client-side for biome noise
Game mode Template:Type 0: Survival, 1: Creative, 2: Adventure, 3: Spectator.
Previous Game mode Template:Type -1: Undefined (null), 0: Survival, 1: Creative, 2: Adventure, 3: Spectator. The previous game mode. Vanilla client uses this for the debug (F3 + N & F3 + F4) game mode switch. (More information needed)
Is Debug Template:Type True if the world is a Minecraft:debug mode world; debug mode worlds cannot be modified and have predefined blocks.
Is Flat Template:Type True if the world is a Minecraft:superflat world; flat worlds have different void fog and a horizon at y=0 instead of y=63.
Has death location Template:Type If true, then the next two fields are present.
Death dimension Name Template:Type Template:Type Name of the dimension the player died in.
Death location Template:Type Template:Type The location that the player died at.
Portal cooldown Template:Type The number of ticks until the player can use the portal again.
Sea level Template:Type
Data kept Template:Type Bit mask. 0x01: Keep attributes, 0x02: Keep metadata. Tells which data should be kept on the client side once the player has respawned.

In the vanilla implementation, this is context-dependent:

  • normal respawns (after death) keep no data;
  • exiting the end poem/credits keeps the attributes;
  • other dimension changes (portals or teleports) keep all data.

Template:Warning

Set Head Rotation

Changes the direction an entity's head is facing.

While sending the Entity Look packet changes the vertical rotation of the head, sending this packet appears to be necessary to rotate the head horizontally.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x51

resource:
rotate_head
Play Client Entity ID Template:Type
Head Yaw Template:Type New angle, not a delta.

Update Section Blocks

Fired whenever 2 or more blocks are changed within the same chunk on the same tick.

Template:Warning

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x52

resource:
section_blocks_update
Play Client Chunk section position Template:Type Chunk section coordinate (encoded chunk x and z with each 22 bits, and section y with 20 bits, from left to right).
Blocks Template:Type of Template:Type Each entry is composed of the block state id, shifted left by 12, and the relative block position in the chunk section (4 bits for x, z, and y, from left to right).

Chunk section position is encoded: <syntaxhighlight lang="java"> ((sectionX & 0x3FFFFF) << 42) | (sectionY & 0xFFFFF) | ((sectionZ & 0x3FFFFF) << 20); </syntaxhighlight> and decoded: <syntaxhighlight lang="java"> sectionX = long >> 42; sectionY = long << 44 >> 44; sectionZ = long << 22 >> 42; </syntaxhighlight>

Blocks are encoded: <syntaxhighlight lang="java"> blockStateId << 12 | (blockLocalX << 8 | blockLocalZ << 4 | blockLocalY) //Uses the local position of the given block position relative to its respective chunk section </syntaxhighlight> and decoded: <syntaxhighlight lang="java"> blockStateId = long >> 12; blockLocalX = (long >> 8) & 0xF; blockLocalY = long & 0xF; blockLocalZ = (long >> 4) & 0xF; </syntaxhighlight>

Select Advancements Tab

Sent by the server to indicate that the client should switch advancement tab. Sent either when the client switches tab in the GUI or when an advancement is made in another tab.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x53

resource:
select_advancements_tab
Play Client Identifier Template:Type Template:Type See below.

The Template:Type must be one of the following if no custom data pack is loaded:

Identifier
minecraft:story/root
minecraft:nether/root
minecraft:end/root
minecraft:adventure/root
minecraft:husbandry/root

If no or an invalid identifier is sent, the client will switch to the first tab in the GUI.

Server Data

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x54

resource:
server_data
Play Client MOTD Template:Type
Icon Template:Type Template:Type of Template:Type Icon bytes in the PNG format.

Set Action Bar Text

Displays a message above the hotbar. Equivalent to System Chat Message with Overlay set to true, except that chat message blocking isn't performed. Used by the vanilla server only to implement the /title command.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x55

resource:
set_action_bar_text
Play Client Action bar text Template:Type

Set Border Center

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x56

resource:
set_border_center
Play Client X Template:Type
Z Template:Type

Set Border Lerp Size

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x57

resource:
set_border_lerp_size
Play Client Old Diameter Template:Type Current length of a single side of the world border, in meters.
New Diameter Template:Type Target length of a single side of the world border, in meters.
Speed Template:Type Number of real-time milliseconds until New Diameter is reached. It appears that vanilla server does not sync world border speed to game ticks, so it gets out of sync with server lag. If the world border is not moving, this is set to 0.

Set Border Size

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x58

resource:
set_border_size
Play Client Diameter Template:Type Length of a single side of the world border, in meters.

Set Border Warning Delay

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x59

resource:
set_border_warning_delay
Play Client Warning Time Template:Type In seconds as set by /worldborder warning time.

Set Border Warning Distance

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x5A

resource:
set_border_warning_distance
Play Client Warning Blocks Template:Type In meters.

Set Camera

Sets the entity that the player renders from. This is normally used when the player left-clicks an entity while in spectator mode.

The player's camera will move with the entity and look where it is looking. The entity is often another player, but can be any type of entity. The player is unable to move this entity (move packets will act as if they are coming from the other entity).

If the given entity is not loaded by the player, this packet is ignored. To return control to the player, send this packet with their entity ID.

The vanilla server resets this (sends it back to the default entity) whenever the spectated entity is killed or the player sneaks, but only if they were spectating an entity. It also sends this packet whenever the player switches out of spectator mode (even if they weren't spectating an entity).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x5B

resource:
set_camera
Play Client Camera ID Template:Type ID of the entity to set the client's camera to.

The vanilla client also loads certain shaders for given entities:

  • Creeper → shaders/post/creeper.json
  • Spider (and cave spider) → shaders/post/spider.json
  • Enderman → shaders/post/invert.json
  • Anything else → the current shader is unloaded

Set Center Chunk

Sets the center position of the client's chunk loading area. The area is square-shaped, spanning 2 × server view distance + 7 chunks on both axes (width, not radius!). Since the area's width is always an odd number, there is no ambiguity as to which chunk is the center.

The vanilla client never renders or simulates chunks located outside the loading area, but keeps them in memory (unless explicitly unloaded by the server while still in range), and only automatically unloads a chunk when another chunk is loaded at coordinates congruent to the old chunk's coordinates modulo (2 × server view distance + 7). This means that a chunk may reappear after leaving and later re-entering the loading area through successive uses of this packet, unless it is replaced in the meantime by a different chunk in the same "slot".

The vanilla client ignores attempts to load or unload chunks located outside the loading area. This applies even to unloads targeting chunks that are still loaded, but currently located outside the loading area (per the previous paragraph).

The vanilla server does not rely on any specific behavior for chunks leaving the loading area, and custom clients need not replicate the above exactly. A client may instead choose to immediately unload any chunks outside the loading area, to use a different modulus, or to ignore the loading area completely and keep chunks loaded regardless of their location until the server requests to unload them. Servers aiming for maximal interoperability should always explicitly unload any loaded chunks before they go outside the loading area.

The center chunk is normally the chunk the player is in, but apart from the implications on chunk loading, the (vanilla) client takes no issue with this not being the case. Indeed, as long as chunks are sent only within the default loading area centered on the world origin, it is not necessary to send this packet at all. This may be useful for servers with small bounded worlds, such as minigames, since it ensures chunks never need to be resent after the client has joined, saving on bandwidth.

The vanilla server sends this packet whenever the player moves across a chunk border horizontally, and also (according to testing) for any integer change in the vertical axis, even if it doesn't go across a chunk section border.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x5C

resource:
set_chunk_cache_center
Play Client Chunk X Template:Type Chunk X coordinate of the loading area center.
Chunk Z Template:Type Chunk Z coordinate of the loading area center.

Set Render Distance

Sent by the integrated singleplayer server when changing render distance. This packet is sent by the server when the client reappears in the overworld after leaving the end.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x5D

resource:
set_chunk_cache_radius
Play Client View Distance Template:Type Render distance (2-32).

Set Cursor Item

Replaces or sets the inventory item that's being dragged with the mouse.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x5E

resource:
set_cursor_item
Play Client Carried item Template:Type

Set Default Spawn Position

Sent by the server after login to specify the coordinates of the spawn point (the point at which players spawn at, and which the compass points to). It can be sent at any time to update the point compasses point at.

Before receiving this packet, the client uses the default position 8, 64, 8, and angle 0.0.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x5F

resource:
set_default_spawn_position
Play Client Dimension Name Template:Type Name of spawn dimension.
Location Template:Type Spawn location.
Yaw Template:Type Yaw after respawning.
Pitch Template:Type Pitch after respawning.

Display Objective

This is sent to the client when it should display a scoreboard.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x60

resource:
set_display_objective
Play Client Position Template:Type The position of the scoreboard. 0: list, 1: sidebar, 2: below name, 3 - 18: team-specific sidebar, indexed as 3 + team color.
Score Name Template:Type (32767) The unique name for the scoreboard to be displayed.

Set Entity Metadata

Updates one or more metadata properties for an existing entity. Any properties not included in the Metadata field are left unchanged.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x61

resource:
set_entity_data
Play Client Entity ID Template:Type
Metadata Entity Metadata

Link Entities

This packet is sent when an entity has been leashed to another entity.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x62

resource:
set_entity_link
Play Client Attached Entity ID Template:Type Attached entity's EID.
Holding Entity ID Template:Type ID of the entity holding the lead. Set to -1 to detach.

Set Entity Velocity

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x63

resource:
set_entity_motion
Play Client Entity ID Template:Type
Velocity Template:Type

Set Equipment

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x64

resource:
set_equipment
Play Client Entity ID Template:Type Entity's ID.
Equipment Slot Template:Type Template:Type Template:Type The length of the array is not known beforehand and has to be determined by reading all entries, as the most significant bit of the slot indicates if there is a next entry. Equipment slot (see below). Also has the top bit set if another entry follows, and otherwise unset if this is the last item in the array.
Item Template:Type

Equipment slot can be one of the following:

ID Equipment slot
0 Main hand
1 Off hand
2 Boots
3 Leggings
4 Chestplate
5 Helmet
6 Body
7 Saddle

Set Experience

Sent by the server when the client should change experience levels.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x65

resource:
set_experience
Play Client Experience bar Template:Type Between 0 and 1.
Level Template:Type
Total Experience Template:Type See Minecraft:Experience#Leveling up on the Minecraft Wiki for Total Experience to Level conversion.

Set Health

Sent by the server to set the health of the player it is sent to.

Food saturation acts as a food “overcharge”. Food values will not decrease while the saturation is over zero. New players logging in or respawning automatically get a saturation of 5.0. Eating food increases the saturation as well as the food bar.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x66

resource:
set_health
Play Client Health Template:Type 0 or less = dead, 20 = full HP.
Food Template:Type 0–20.
Food Saturation Template:Type Seems to vary from 0.0 to 5.0 in integer increments.

Set Held Item (clientbound)

Sent to change the player's slot selection.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x67

resource:
set_held_slot
Play Client Slot Template:Type The slot which the player has selected (0–8).

Update Objectives

This is sent to the client when it should create a new Minecraft:scoreboard objective or remove one.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x68

resource:
set_objective
Play Client Objective Name Template:Type (32767) A unique name for the objective.
Mode Template:Type 0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text.
Objective Value Template:Type Template:Type Only if mode is 0 or 2.The text to be displayed for the score.
Type Template:Type Template:Type Template:Type Only if mode is 0 or 2. 0 = "integer", 1 = "hearts".
Has Number Format Template:Type Template:Type Only if mode is 0 or 2. Whether this objective has a set number format for the scores.
Number Format Template:Type Template:Type Template:Type Only if mode is 0 or 2 and the previous boolean is true. Determines how the score number should be formatted.
Number Format Field Name
0: blank no fields Show nothing.
1: styled Styling Compound Tag The styling to be used when formatting the score number. Contains the text component formatting fields ("color", "bold", etc., but not "text", "extra", etc.).
2: fixed Content Template:Type The text to be used as placeholder.

Set Passengers

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x69

resource:
set_passengers
Play Client Entity ID Template:Type Vehicle's EID.
Passengers Template:Type of Template:Type EIDs of entity's passengers.

Set Player Inventory Slot

Sets the contents of a player inventory slot directly, bypassing the usual container window mechanism. This packet is used by the vanilla server only when placing items in temporary slots back into the inventory upon closing a container window, and likely exists to work around implementation issues specific to vanilla. It is prone to race conditions because it doesn't include a State ID, and there is generally no reason not to use Set Container Content or Set Container Slot instead.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x6A

resource:
set_player_inventory
Play Client Slot Template:Type Index of the slot to be modified in the player inventory. Not a container window slot index, to the survival inventory or any other window—there is no crafting grid, and the slot order is different.
Slot Data Template:Type

Update Teams

Creates and updates teams.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x6B

resource:
set_player_team
Play Client Team Name Template:Type (32767) A unique name for the team. (Shared with scoreboard).
Method Template:Type Determines the layout of the remaining packet.
0: create team Team Display Name Template:Type
Friendly Flags Template:Type Bit mask. 0x01: Allow friendly fire, 0x02: can see invisible players on the same team.
Name Tag Visibility Template:Type Template:Type 0 = ALWAYS, 1 = NEVER, 2 = HIDE_FOR_OTHER_TEAMS, 3 = HIDE_FOR_OWN_TEAMS
Collision Rule Template:Type Template:Type 0 = ALWAYS, 1 = NEVER, 2 = PUSH_OTHER_TEAMS, 3 = PUSH_OWN_TEAM
Team Color Template:Type Template:Type Used to color the names of players on the team; see below.
Team Prefix Template:Type Displayed before the names of players that are part of this team.
Team Suffix Template:Type Displayed after the names of players that are part of this team.
Entities Template:Type of Template:Type (32767) Identifiers for the entities in this team. For players, this is their username; for other entities, it is their UUID.
1: remove team no fields no fields
2: update team info Team Display Name Template:Type
Friendly Flags Template:Type Bit mask. 0x01: Allow friendly fire, 0x02: can see invisible entities on the same team.
Name Tag Visibility Template:Type Template:Type 0 = ALWAYS, 1 = NEVER, 2 = HIDE_FOR_OTHER_TEAMS, 3 = HIDE_FOR_OWN_TEAMS
Collision Rule Template:Type Template:Type 0 = ALWAYS, 1 = NEVER, 2 = PUSH_OTHER_TEAMS, 3 = PUSH_OWN_TEAM
Team Color Template:Type Template:Type Used to color the names of players on the team; see below.
Team Prefix Template:Type Displayed before the names of players that are part of this team.
Team Suffix Template:Type Displayed after the names of players that are part of this team.
3: add entities to team Entities Template:Type of Template:Type (32767) Identifiers for the added entities. For players, this is their username; for other entities, it is their UUID.
4: remove entities from team Entities Template:Type of Template:Type (32767) Identifiers for the removed entities. For players, this is their username; for other entities, it is their UUID.

Team Color: The color of a team defines how the names of the team members are visualized; any formatting code can be used. The following table lists all the possible values.

ID Formatting
0-15 Color formatting, same values as in Minecraft:Formatting codes#Color codes.
16 Obfuscated
17 Bold
18 Strikethrough
19 Underlined
20 Italic
21 Reset

Update Score

This is sent to the client when it should update a scoreboard item.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x6C

resource:
set_score
Play Client Entity Name Template:Type (32767) The entity whose score this is. For players, this is their username; for other entities, it is their UUID.
Objective Name Template:Type (32767) The name of the objective the score belongs to.
Value Template:Type The score to be displayed next to the entry.
Display Name Template:Type Template:Type The custom display name.
Number Format Template:Type Template:Type Template:Type Determines how the score number should be formatted.
Number Format Field Name
0: blank no fields Show nothing.
1: styled Styling Compound Tag The styling to be used when formatting the score number. Contains the text component formatting fields ("color", "bold", etc., but not "text", "extra", etc.).
2: fixed Content Template:Type The text to be used as placeholder.

Set Simulation Distance

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x6D

resource:
set_simulation_distance
Play Client Simulation Distance Template:Type The distance that the client will process specific things, such as entities.

Set Subtitle Text

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x6E

resource:
set_subtitle_text
Play Client Subtitle Text Template:Type

Update Time

Time is based on ticks, where 20 ticks happen every second. There are 24000 ticks in a day, making Minecraft days exactly 20 minutes long.

The time of day is based on the timestamp modulo 24000. 0 is sunrise, 6000 is noon, 12000 is sunset, and 18000 is midnight.

The default SMP server increments the time by 20 every second.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x6F

resource:
set_time
Play Client World Age Template:Type In ticks; not changed by server commands.
Time of day Template:Type The world (or region) time, in ticks.
Time of day increasing Template:Type If true, the client should automatically advance the time of day according to its ticking rate.

Set Title Text

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x70

resource:
set_title_text
Play Client Title Text Template:Type

Set Title Animation Times

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x71

resource:
set_titles_animation
Play Client Fade In Template:Type Ticks to spend fading in.
Stay Template:Type Ticks to keep the title displayed.
Fade Out Template:Type Ticks to spend fading out, not when to start fading out.

Entity Sound Effect

Plays a sound effect from an entity, either by hardcoded ID or Identifier. Sound IDs and names can be found here.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x72

resource:
sound_entity
Play Client Sound Event Template:Type Template:Type ID in the minecraft:sound_event registry, or an inline definition.
Sound Category Template:Type Template:Type The category that this sound will be played from (current categories).
Entity ID Template:Type
Volume Template:Type 1.0 is 100%, capped between 0.0 and 1.0 by vanilla clients.
Pitch Template:Type Float between 0.5 and 2.0 by vanilla clients.
Seed Template:Type Seed used to pick sound variant.

Sound Effect

Plays a sound effect at the given location, either by hardcoded ID or Identifier. Sound IDs and names can be found here.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x73

resource:
sound
Play Client Sound Event Template:Type Template:Type ID in the minecraft:sound_event registry, or an inline definition.
Sound Category Template:Type Template:Type The category that this sound will be played from (current categories).
Effect Position X Template:Type Effect X multiplied by 8 (fixed-point number with only 3 bits dedicated to the fractional part).
Effect Position Y Template:Type Effect Y multiplied by 8 (fixed-point number with only 3 bits dedicated to the fractional part).
Effect Position Z Template:Type Effect Z multiplied by 8 (fixed-point number with only 3 bits dedicated to the fractional part).
Volume Template:Type 1.0 is 100%, capped between 0.0 and 1.0 by vanilla clients.
Pitch Template:Type Float between 0.5 and 2.0 by vanilla clients.
Seed Template:Type Seed used to pick sound variant.

Start Configuration

Sent during gameplay in order to redo the configuration process. The client must respond with Acknowledge Configuration for the process to start.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x74

resource:
start_configuration
Play Client no fields

This packet switches the connection state to configuration.

Stop Sound

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x75

resource:
stop_sound
Play Client Flags Template:Type Controls which fields are present.
Source Template:Type Template:Type Template:Type Only if flags is 3 or 1 (bit mask 0x1). See below. If not present, then sounds from all sources are cleared.
Sound Template:Type Template:Type Only if flags is 2 or 3 (bit mask 0x2). A sound effect name, see Custom Sound Effect. If not present, then all sounds are cleared.

Categories:

Name Value
master 0
music 1
record 2
weather 3
block 4
hostile 5
neutral 6
player 7
ambient 8
voice 9

Store Cookie (play)

Stores some arbitrary data on the client, which persists between server transfers. The vanilla client only accepts cookies of up to 5 kiB in size.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x76

resource:
store_cookie
Play Client Key Template:Type The identifier of the cookie.
Payload Template:Type (5120) of Template:Type The data of the cookie.

System Chat Message

Template:Main

Sends the client a raw system message.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x77

resource:
system_chat
Play Client Content Template:Type Limited to 262144 bytes.
Overlay Template:Type Whether the message is an actionbar or chat message. See also #Set Action Bar Text.

Set Tab List Header And Footer

This packet may be used by custom servers to display additional information above/below the tab list. It is never sent by the vanilla server.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x78

resource:
tab_list
Play Client Header Template:Type To remove the header, send an empty text component: {"text":""}.
Footer Template:Type To remove the footer, send an empty text component: {"text":""}.

Tag Query Response

Sent in response to Query Block Entity Tag or Query Entity Tag.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x79

resource:
tag_query
Play Client Transaction ID Template:Type Can be compared to the one sent in the original query packet.
NBT Template:Type The NBT of the block or entity. May be a TAG_END (0), in which case no NBT is present.

Pickup Item

Sent by the server when someone picks up an item lying on the ground — its sole purpose appears to be the animation of the item flying towards you. It doesn't destroy the entity in the client memory, and it doesn't add it to your inventory. The server only checks for items to be picked up after each Set Player Position (and Set Player Position And Rotation) packet sent by the client. The collector entity can be any entity; it does not have to be a player. The collected entity can also be any entity, but the vanilla server only uses this for items, experience orbs, the different varieties of arrows and tridents.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x7A

resource:
take_item_entity
Play Client Collected Entity ID Template:Type
Collector Entity ID Template:Type
Pickup Item Count Template:Type Seems to be 1 for XP orbs, otherwise the number of items in the stack.

Synchronize Vehicle Position

Teleports the entity on the client without changing the reference point of movement deltas in future Update Entity Position packets. Seems to be used to make relative adjustments to vehicle positions; more information needed.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x7B

resource:
teleport_entity
Play Client Entity ID Template:Type
X Template:Type
Y Template:Type
Z Template:Type
Velocity X Template:Type
Velocity Y Template:Type
Velocity Z Template:Type
Yaw Template:Type Rotation on the Y axis, in degrees.
Pitch Template:Type Rotation on the Y axis, in degrees.
Flags Template:Type
On Ground Template:Type

Test Instance Block Status

Updates the status of the currently open Minecraft:Test Instance Block screen, if any.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x7C

resource:
test_instance_block_status
Play Client Status Template:Type
Has Size Template:Type
Size X Template:Type Template:Type Only present if Has Size is true.
Size Y Template:Type Template:Type Only present if Has Size is true.
Size Z Template:Type Template:Type Only present if Has Size is true.

Set Ticking State

Used to adjust the ticking rate of the client, and whether it's frozen.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x7D

resource:
ticking_state
Play Client Tick rate Template:Type
Is frozen Template:Type

Step Tick

Advances the client processing by the specified number of ticks. Has no effect unless client ticking is frozen.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x7E

resource:
ticking_step
Play Client Tick steps Template:Type

Transfer (play)

Notifies the client that it should transfer to the given server.

The client will close its connection to the current server, open a connection to the specified address and send a Handshake with intent set to 3 (Transfer). If the server chooses to accept the transfer, the usual login process will follow.

Cookies previously stored are preserved between server transfers.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x7F

resource:
transfer
Play Client Host Template:Type The hostname or IP of the server.
Port Template:Type The port of the server.

Update Advancements

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x80

resource:
update_advancements
Play Client Reset/Clear Template:Type Whether to reset/clear the current advancements.
Advancement mapping Key Template:Type Template:Type The identifier of the advancement.
Value Advancement See below
Identifiers Template:Type of Template:Type The identifiers of the advancements that should be removed.
Progress mapping Key Template:Type Template:Type The identifier of the advancement.
Value Advancement progress See below.
Show advancements Template:Type

Advancement structure:

Field Name Field Type Notes
Parent id Template:Type Template:Type The identifier of the parent advancement.
Display data Template:Type Advancement display See below.
Nested requirements Template:Type Template:Type of Template:Type (32767) Array with a sub-array of criteria. To check if the requirements are met, each sub-array must be tested and mapped with the OR operator, resulting in a boolean array.

These booleans must be mapped with the AND operator to get the result.

Sends telemetry data Template:Type Whether the client should include this achievement in the telemetry data when it's completed.

The vanilla client only sends data for advancements on the minecraft namespace.

Advancement display:

Field Name Field Type Notes
Title Template:Type
Description Template:Type
Icon Template:Type
Frame type Template:Type Template:Type 0 = task, 1 = challenge, 2 = goal.
Flags Template:Type 0x01: has background texture; 0x02: show_toast; 0x04: hidden.
Background texture Template:Type Template:Type Background texture location. Only if flags indicates it.
X coord Template:Type
Y coord Template:Type

Advancement progress:

Field Name Field Type Notes
Criteria Criterion identifier Template:Type Template:Type The identifier of the criterion.
Date of achieving Template:Type Template:Type Present if achieved. As returned by Date.getTime.

Update Attributes

Sets attributes on the given entity.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x81

resource:
update_attributes
Play Client Entity ID Template:Type
Property Id Template:Type Template:Type ID in the minecraft:attribute registry. See also Minecraft:Attribute#Attributes.
Value Template:Type See below.
Modifiers Template:Type of Modifier Data See Minecraft:Attribute#Modifiers. Modifier Data defined below.

Modifier Data structure:

Field Name Field Type Notes
Id Template:Type
Amount Template:Type May be positive or negative.
Operation Template:Type 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.

Entity Effect

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x82

resource:
update_mob_effect
Play Client Entity ID Template:Type
Effect ID Template:Type See this table.
Amplifier Template:Type Vanilla client displays effect level as Amplifier + 1.
Duration Template:Type Duration in ticks. (-1 for infinite)
Flags Template:Type Bit field, see below.

Template:Missing info

Within flags:

  • 0x01: Is ambient - was the effect spawned from a beacon? All beacon-generated effects are ambient. Ambient effects use a different icon in the HUD (blue border rather than gray). If all effects on an entity are ambient, the "Is potion effect ambient" living metadata field should be set to true. Usually should not be enabled.
  • 0x02: Show particles - should all particles from this effect be hidden? Effects with particles hidden are not included in the calculation of the effect color, and are not rendered on the HUD (but are still rendered within the inventory). Usually should be enabled.
  • 0x04: Show icon - should the icon be displayed on the client? Usually should be enabled.
  • 0x08: Blend - should the effect's hard-coded blending be applied? Currently only used in the DARKNESS effect to apply extra void fog and adjust the gamma value for lighting.

Update Recipes

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x83

resource:
update_recipes
Play Client Property Sets Property Set ID Template:Type Template:Type
Items Template:Type of Template:Type IDs in the minecraft:item registry.
Stonecutter Recipes Ingredients Template:Type Template:Type
Slot Display Template:Type

Update Tags (play)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0D

resource:
update_tags
Configuration Client Tagged Registries Registry Template:Type Template:Type Registry identifier, such as minecraft:block.
Tags Template:Type of Tag Array of tags defined for the registry, each containing a sub-array of entries that have the tag (see below).

Each tag looks like:

Field Name Field Type Notes
Tag Name Template:Type Name of the tag without the #-prefix, such as minecraft:climbable.
Entries Template:Type of Template:Type Numeric IDs of the given type (block, item, etc.). This list replaces the previous list of IDs for the given tag.

See Tag for more information, including a list of vanilla tags.

When used in play state, this packet always only replaces the tags mentioned in the packet. Other tags, including ones belonging to the registries mentioned in the packet, are unaffected.

Projectile Power

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x85

resource:
projectile_power
Play Client Entity ID Template:Type
Power Template:Type

Custom Report Details

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
protocol:
0x86

resource:
custom_report_details
Play Client Details Title Template:Type (32) Template:Type (128)
Description Template:Type (4096)

Server Links

This packet contains a list of links that the vanilla 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
protocol:
0x87

resource:
server_links
Play Client Links Is built-in Template:Type Template:Type Determines if the following label is built-in (from enum) or custom (text component).
Label Template:Type Template:Type / Template:Type See below.
URL Template:Type 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

Waypoint

Adds, removes, or updates an entry that will be tracked on the player locator bar.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x88

resource:
waypoint
Play Client Operation Template:Type Template:Type 0: track, 1: untrack, 2: update.
Identifier Template:Type Template:Type or Template:Type Something that uniquely identifies this specific waypoint.
Icon style Template:Type Path to the waypoint style JSON: assets/<namespace>/waypoint_style/<value>.json.
Color
Red Template:Type Template:Type The color of the waypoint icon.
Green Template:Type
Blue Template:Type
Waypoint type Template:Type Template:Type Defines how the following field is read.
Waypoint data Varies
Type Field Name Field Data Notes
0: Empty no fields
1: Vec3i X Template:Type The position that the waypoint will point to.
Y Template:Type
Z Template:Type
2: Chunk X Template:Type The chunk coordinates that the waypoint will point to.
Z Template:Type
3: Azimuth Angle Template:Type The angle that will be pointed to, in radians.

Clear Dialog (play)

If we're currently in a dialog screen, then this removes the current screen and switches back to the previous one.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x89

resource:
clear_dialog
Play Client no fields

Show Dialog (play)

Show a custom dialog screen to the client.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x8A

resource:
show_dialog
Play Client Dialog Template:Type Template:Type ID in the minecraft:dialog registry, or an inline definition as described at Minecraft:Dialog#Dialog format.

Serverbound

Confirm Teleportation

Sent by client as confirmation of Synchronize Player Position.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x00

resource:
accept_teleportation
Play Server Teleport ID Template:Type The ID given by the Synchronize Player Position packet.

Query Block Entity Tag

Used when F3+I is pressed while looking at a block.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x01

resource:
block_entity_tag_query
Play Server Transaction ID Template:Type An incremental ID so that the client can verify that the response matches.
Location Template:Type The location of the block to check.

Bundle Item Selected

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x02

resource:
bundle_item_selected
Play Server Slot of Bundle Template:Type
Slot in Bundle Template:Type

Change Difficulty

Must have at least op level 2 to use. Appears to only be used on singleplayer; the difficulty buttons are still disabled in multiplayer.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x03

resource:
change_difficulty
Play Server New difficulty Template:Type Template:Type 0: peaceful, 1: easy, 2: normal, 3: hard.

Change Game Mode

Requests for the server to update our game mode. Has no effect on vanilla servers if the client doesn't have the required permissions.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x04

resource:
change_game_mode
Play Server Game mode Template:Type Template:Type 0: survival, 1: creative, 2: adventure, 3: spectator.

Acknowledge Message

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x05

resource:
chat_ack
Play Server Message Count Template:Type

Chat Command

Template:Main

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x06

resource:
chat_command
Play Server Command Template:Type (32767) The command typed by the client excluding the /.

Signed Chat Command

Template:Main

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x07

resource:
chat_command_signed
Play Server Command Template:Type (32767) The command typed by the client excluding the /.
Timestamp Template:Type The timestamp that the command was executed.
Salt Template:Type The salt for the following argument signatures.
Array of argument signatures Argument name Template:Type (8) Template:Type (16) The name of the argument that is signed by the following signature.
Signature Template:Type (256) The signature that verifies the argument. Always 256 bytes and is not length-prefixed.
Message Count Template:Type
Acknowledged Template:Type (20)
Checksum Template:Type

Chat Message

Template:Main

Used to send a chat message to the server. The message may not be longer than 256 characters or else the server will kick the client.

The server will broadcast a Player Chat Message packet with Chat Type minecraft:chat to all players that haven't disabled chat (including the player that sent the message). See Minecraft:Java Edition protocol/Chat#Processing chat for more information.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x08

resource:
chat
Play Server Message Template:Type (256) Content of the message
Timestamp Template:Type Number of milliseconds since the epoch (1 Jan 1970, midnight, UTC)
Salt Template:Type The salt used to verify the signature hash. Randomly generated by the client
Signature Template:Type Template:Type (256) The signature used to verify the chat message's authentication. When present, always 256 bytes and not length-prefixed.

This is a SHA256 with RSA digital signature computed over the following:

  • The number 1 as a 4-byte int. Always 00 00 00 01.
  • The player's 16-byte UUID.
  • The chat session (a 16-byte UUID randomly generated by the client).
  • The index of the message within this chat session as a 4-byte int. First message is 0, next message is 1, etc. Incremented each time the client sends a chat message.
  • The salt (from above) as an 8-byte long.
  • The timestamp (from above) converted from milliseconds to seconds, so divide by 1000, as an 8-byte long.
  • The length of the message in bytes (from above) as a 4-byte int.
  • The message bytes.
  • The number of messages in the last seen set, as a 4-byte int. Always in the range [0,20].
  • For each message in the last seen set, from oldest to newest, the 256-byte signature of that message.


The client's chat private key is used for the message signature.

Message Count Template:Type Number of signed clientbound chat messages the client has seen from the server since the last serverbound chat message from this client. The server will use this to update its last seen list for the client.
Acknowledged Template:Type (20) Bitmask of which message signatures from the last seen set were used to sign this message. The most recent is the highest bit. If there are fewer than 20 messages in the last seen set, the lower bits will be zeros.
Checksum Template:Type Checksum is computed over all the message signature checksums in the last seen set, from oldest to newest. Both the packet checksum and signature checksums use the same logic as Java's Arrays.hashCode(byte[]) implementation. The packet checksum additionally casts the resulting int to a byte, and if that byte is 0 returns 1, otherwise returns said byte

Player Session

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x09

resource:
chat_session_update
Play Server Session Id Template:Type
Public Key Expires At Template:Type The time the play session key expires in Template:Wikipedia milliseconds.
Public Key Template:Type (512) of Template:Type A byte array of an X.509-encoded public key.
Key Signature Template:Type (4096) of Template:Type The signature consists of the player UUID, the key expiration timestamp, and the public key data. These values are hashed using Template:Wikipedia and signed using Mojang's private Template:Wikipedia key.

Chunk Batch Received

Notifies the server that the chunk batch has been received by the client. The server uses the value sent in this packet to adjust the number of chunks to be sent in a batch.

The vanilla server will stop sending further chunk data until the client acknowledges the sent chunk batch. After the first acknowledgement, the server adjusts this number to allow up to 10 unacknowledged batches.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0A

resource:
chunk_batch_received
Play Server Chunks per tick Template:Type Desired chunks per tick.

Client Status

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0B

resource:
client_command
Play Server Action ID Template:Type Template:Type See below

Action ID values:

Action ID Action Notes
0 Perform respawn Sent when the client is ready to respawn after death.
1 Request stats Sent when the client opens the Statistics menu.

Client Tick End

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0C

resource:
client_tick_end
Play Server no fields

Client Information (play)

Sent when the player connects, or when settings are changed.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0D

resource:
client_information
Play Server Locale Template:Type (16) e.g. en_GB.
View Distance Template:Type Client-side render distance, in chunks.
Chat Mode Template:Type Template:Type 0: enabled, 1: commands only, 2: hidden. See Minecraft:Java Edition protocol/Chat#Client chat mode for more information.
Chat Colors Template:Type “Colors” multiplayer setting. The vanilla server stores this value but does nothing with it (see Template:Bug). Some third-party servers disable all coloring in chat and system messages when it is false.
Displayed Skin Parts Template:Type Bit mask, see below.
Main Hand Template:Type Template:Type 0: Left, 1: Right.
Enable text filtering Template:Type Enables filtering of text on signs and written book titles. The vanilla client sets this according to the profanityFilterPreferences.profanityFilterOn account attribute indicated by the Mojang API endpoint for player attributes. In offline mode, it is always false.
Allow server listings Template:Type Servers usually list online players; this option should let you not show up in that list.
Particle Status Template:Type Template:Type 0: all, 1: decreased, 2: minimal

Displayed Skin Parts flags:

  • Bit 0 (0x01): Cape enabled
  • Bit 1 (0x02): Jacket enabled
  • Bit 2 (0x04): Left Sleeve enabled
  • Bit 3 (0x08): Right Sleeve enabled
  • Bit 4 (0x10): Left Pants Leg enabled
  • Bit 5 (0x20): Right Pants Leg enabled
  • Bit 6 (0x40): Hat enabled

The most significant bit (bit 7, 0x80) appears to be unused.

Command Suggestions Request

Sent when the client needs to tab-complete a minecraft:ask_server suggestion type.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0E

resource:
command_suggestion
Play Server Transaction Id Template:Type The ID of the transaction that the server will send back to the client in the response of this packet. Client generates this and increments it each time it sends another tab completion that doesn't get a response.
Text Template:Type (32500) All the text behind the cursor including the / (e.g. to the left of the cursor in left-to-right languages like English).

Acknowledge Configuration

Sent by the client upon receiving a Start Configuration packet from the server.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x0F

resource:
configuration_acknowledged
Play Server no fields

This packet switches the connection state to configuration.

Click Container Button

Used when clicking on window buttons. Until 1.14, this was only used by enchantment tables.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x10

resource:
container_button_click
Play Server Window ID Template:Type The ID of the window sent by Open Screen.
Button ID Template:Type Meaning depends on window type; see below.
Window type ID Meaning
Enchantment Table 0 Topmost enchantment.
1 Middle enchantment.
2 Bottom enchantment.
Lectern 1 Previous page (which does give a redstone output).
2 Next page.
3 Take Book.
100+page Opened page number - 100 + number.
Stonecutter Recipe button number - 4*row + col. Depends on the item.
Loom Recipe button number - 4*row + col. Depends on the item.

Click Container

This packet is sent by the client when the player clicks on a slot in a window.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x11

resource:
container_click
Play Server Window ID Template:Type The ID of the window that was clicked. 0 for player inventory. The server ignores any packets targeting a Window ID other than the current one, including ignoring 0 when any other window is open.
State ID Template:Type The last received State ID from either a Set Container Slot or a Set Container Content packet.
Slot Template:Type The clicked slot number, see below.
Button Template:Type The button used in the click, see below.
Mode Template:Type Template:Type Inventory operation mode, see below.
Array of changed slots Slot number Template:Type (128) Template:Type
Slot data Template:Type New data for this slot, in the client's opinion; see below.
Carried item Template:Type Item carried by the cursor.

See Minecraft:Java Edition protocol/Inventory for further information about how slots are indexed.

After performing the action, the server compares the results to the slot change information included in the packet, as applied on top of the server's view of the container's state prior to the action. For any slots that do not match, it sends Set Container Slot packets containing the correct results. If State ID does not match the last ID sent by the server, it will instead send a full Set Container Content to resynchronize the client.

When right-clicking on a stack of items, half the stack will be picked up and half left in the slot. If the stack is an odd number, the half left in the slot will be the smaller of the amounts.

The distinct type of click performed by the client is determined by the combination of the Mode and Button fields.

Mode Button Slot Trigger
0 0 Normal Left mouse click
1 Normal Right mouse click
0 -999 Left click outside inventory (drop cursor stack)
1 -999 Right click outside inventory (drop cursor single item)
1 0 Normal Shift + left mouse click
1 Normal Shift + right mouse click (identical behavior)
2 0 Normal Number key 1
1 Normal Number key 2
2 Normal Number key 3
8 Normal Number key 9
Used to allow swapping with arbitrary inventory slots. Ignored since 1.20.3.
40 Normal Offhand swap key F
3 2 Normal Middle click, only defined for creative players in non-player inventories.
4 0 Normal Drop key (Q)
1 Normal Control + Drop key (Q)
5 0 -999 Starting left mouse drag
4 -999 Starting right mouse drag
8 -999 Starting middle mouse drag, only defined for creative players in non-player inventories.
1 Normal Add slot for left-mouse drag
5 Normal Add slot for right-mouse drag
9 Normal Add slot for middle-mouse drag, only defined for creative players in non-player inventories.
2 -999 Ending left mouse drag
6 -999 Ending right mouse drag
10 -999 Ending middle mouse drag, only defined for creative players in non-player inventories.
6 0 Normal Double click
1 Normal Pickup all but check items in reverse order (impossible in vanilla clients)

Starting from version 1.5, “painting mode” is available for use in inventory windows. It is done by picking up a stack of something (more than 1 item), then holding the mouse button (left, right, or middle) and dragging the held stack over empty (or same type in case of right button) slots. In that case client sends the following to the server after the mouse button release (omitting the first pickup packet, which is sent as usual):

  1. packet with mode 5, slot -999, button (0 for left | 4 for right);
  2. packet for every slot painted on, mode is still 5, button (1 | 5);
  3. packet with mode 5, slot -999, button (2 | 6);

If any of the painting packets other than the “progress” ones are sent out of order (for example, a start, some slots, then another start; or a left-click in the middle) the painting status will be reset.

Close Container

This packet is sent by the client when closing a window.

vanilla clients send a Close Window packet with Window ID 0 to close their inventory, even though there is never an Open Screen packet for the inventory.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x12

resource:
container_close
Play Server Window ID Template:Type This is the ID of the window that was closed. 0 for player inventory.

Change Container Slot State

This packet is sent by the client when toggling the state of a Crafter.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x13

resource:
container_slot_state_changed
Play Server Slot ID Template:Type This is the ID of the slot that was changed.
Window ID Template:Type This is the ID of the window that was changed.
State Template:Type The new state of the slot. True for enabled, false for disabled.

Cookie Response (play)

Response to a Cookie Request (play) from the server. The vanilla server only accepts responses of up to 5 kiB in size.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x14

resource:
cookie_response
Play Server Key Template:Type The identifier of the cookie.
Payload Template:Type Template:Type (5120) of Template:Type The data of the cookie.

Serverbound Plugin Message (play)

Template:Main

Mods and plugins can use this to send their data. Minecraft itself uses some plugin channels. These internal channels are in the minecraft namespace.

More documentation on this: "Minecraft Plugin Channels + Messaging" on Dinnerbone's former blog, archived from the original.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x15

resource:
custom_payload
Play Server Channel Template:Type Name of the plugin channel used to send the data.
Data Template:Type (32767) Any data, depending on the channel. Typically this would be a sequence of fields using standard data types, but some unofficial channels have unusual formats. There is no length prefix that applies to all channel types, but the format specific to the channel may or may not include one or more length prefixes (such as the string length prefix in the standard minecraft:brand channel). The vanilla server enforces a length limit of 32767 bytes on this data, but only if the channel type is unrecognized.

Debug Subscription Request

Sent by the client whenever debug subscriptions, used by Minecraft:debug graphs and renderers, are activated or deactivated. The list in the packet replaces the previous set of active subscriptions. Subscriptions not in the list are deactivated.

If the client does not have permission to receive the requested debug information, the subscriptions are nonetheless retained by the server, and it is not necessary to send this packet again if the permissions change.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x16

resource:
debug_subscription_request
Play Server Subscriptions Template:Type of Template:Type List of active debug subscriptions. IDs in the minecraft:debug_subscription registry.

Edit Book

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x17

resource:
edit_book
Play Server Slot Template:Type The hotbar slot where the written book is located
Entries Template:Type (100) of Template:Type (1024) Text from each page. Maximum string length is 1024 chars.
Title Template:Type Template:Type (32) Title of book. Present if book is being signed, not present if book is being edited.

Query Entity Tag

Used when F3+I is pressed while looking at an entity.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x18

resource:
entity_tag_query
Play Server Transaction ID Template:Type An incremental ID so that the client can verify that the response matches.
Entity ID Template:Type The ID of the entity to query.

Interact

This packet is sent from the client to the server when the client attacks or right-clicks another entity (a player, minecart, etc).

A vanilla server only accepts this packet if the entity being attacked/used is visible without obstruction and within a 4-unit radius of the player's position.

The target X, Y, and Z fields represent the difference between the vector location of the cursor at the time of the packet and the entity's position.

Note that middle-click in creative mode is interpreted by the client and sent as a Set Creative Mode Slot packet instead.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x19

resource:
interact
Play Server Entity ID Template:Type The ID of the entity to interact. Note the special case described below.
Type Template:Type Template:Type 0: interact, 1: attack, 2: interact at.
Target X Template:Type Template:Type Only if Type is interact at.
Target Y Template:Type Template:Type Only if Type is interact at.
Target Z Template:Type Template:Type Only if Type is interact at.
Hand Template:Type Template:Type Template:Type Only if Type is interact or interact at; 0: main hand, 1: off hand.
Sneak Key Pressed Template:Type If the client is pressing the sneak key. Has the same effect as a Player Command Press/Release sneak key preceding the interaction, and the state is permanently changed.

Interaction with the ender dragon is an odd special case characteristic of release deadline–driven design. 8 consecutive entity IDs following the dragon's ID (id + 1, id + 2, ..., id + 8) are reserved for the 8 hitboxes that make up the dragon:

ID offset Description
0 The dragon itself (never used in this packet)
1 Head
2 Neck
3 Body
4 Tail 1
5 Tail 2
6 Tail 3
7 Wing 1
8 Wing 2

Jigsaw Generate

Sent when Generate is pressed on the Minecraft:Jigsaw Block interface.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1A

resource:
jigsaw_generate
Play Server Location Template:Type Block entity location.
Levels Template:Type Value of the levels slider/max depth to generate.
Keep Jigsaws Template:Type

Serverbound Keep Alive (play)

The server will frequently send out a keep-alive (see Clientbound Keep Alive), each containing a random ID. The client must respond with the same packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1B

resource:
keep_alive
Play Server Keep Alive ID Template:Type

Lock Difficulty

Must have at least op level 2 to use. Appears to only be used on singleplayer; the difficulty buttons are still disabled in multiplayer.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1C

resource:
lock_difficulty
Play Server Locked Template:Type

Set Player Position

Updates the player's XYZ position on the server.

If the player is in a vehicle, the position is ignored (but in case of Set Player Position and Rotation, the rotation is still used as normal). No validation steps other than value range clamping are performed in this case.

If the player is sleeping, the position (or rotation) is not changed, and a Synchronize Player Position is sent if the received position deviated from the server's view by more than a meter.

The vanilla server silently clamps the x and z coordinates between -30,000,000 and 30,000,000, and the y coordinate between -20,000,000 and 20,000,000. A similar condition has historically caused a kick for "Illegal position"; this is no longer the case. However, infinite or NaN coordinates (or angles) still result in a kick for multiplayer.disconnect.invalid_player_movement.

As of 1.20.6, checking for moving too fast is achieved like this (sic):

  • Each server tick, the player's current position is stored.
  • When the player moves, the offset from the stored position to the requested position is computed (Δx, Δy, Δz).
  • The requested movement distance squared is computed as Δx² + Δy² + Δz².
  • The baseline expected movement distance squared is computed based on the player's server-side velocity as Vx² + Vy² + Vz². The player's server-side velocity is a somewhat ill-defined quantity that includes, among other things, gravity, jump velocity and knockback, but not regular horizontal movement. A proper description would bring much of Minecraft's physics engine with it. It is accessible as the Motion NBT tag on the player entity.
  • The maximum permitted movement distance squared is computed as 100 (300 if the player is using an elytra), multiplied by the number of movement packets received since the last tick, including this one, unless that value is greater than 5, in which case no multiplier is applied.
  • If the requested movement distance squared minus the baseline distance squared is more than the maximum squared, the player is moving too fast.

If the player is moving too fast, it is logged that "<player> moved too quickly! " followed by the change in x, y, and z, and the player is teleported back to their current (before this packet) server-side position.

Checking for block collisions is achieved like this:

  • A temporary collision-checked move of the player is attempted from its current position to the requested one.
  • The offset from the resulting position to the requested position is computed. If the absolute value of the offset on the y axis is less than 0.5, it (only the y component) is rounded down to 0.
  • If the magnitude of the offset is greater than 0.25 and the player isn't in creative or spectator mode, it is logged that "<player> moved wrongly!", and the player is teleported back to their current (before this packet) server-side position.
  • In addition, if the player's hitbox, stationary at the requested position, would intersect with a block, and they aren't in spectator mode, they are teleported back without a log message.

Checking for illegal flight is achieved like this:

  • When a movement packet is received, a flag indicating whether or not the player is floating mid-air is updated. The flag is set if the move test described above detected no collision below the player and the y component of the offset from the player's current position to the requested one is greater than -0.5, unless any of various conditions permitting flight (creative mode, elytra, levitation effect, etc., but not jumping) are met.
  • Each server tick, it is checked if the flag has been set for more than 80 consecutive ticks. If so, and the player isn't currently sleeping, dead or riding a vehicle, they are kicked for multiplayer.disconnect.flying.
Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1D

resource:
move_player_pos
Play Server X Template:Type Absolute position.
Feet Y Template:Type Absolute feet position, normally Head Y - 1.62.
Z Template:Type Absolute position.
Flags Template:Type Bit field: 0x01: on ground, 0x02: pushing against wall.

Set Player Position and Rotation

A combination of Move Player Rotation and Move Player Position.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1E

resource:
move_player_pos_rot
Play Server X Template:Type Absolute position.
Feet Y Template:Type Absolute feet position, normally Head Y - 1.62.
Z Template:Type Absolute position.
Yaw Template:Type Absolute rotation on the X Axis, in degrees.
Pitch Template:Type Absolute rotation on the Y Axis, in degrees.
Flags Template:Type Bit field: 0x01: on ground, 0x02: pushing against wall.

Set Player Rotation

File:Minecraft-trig-yaw.png
The unit circle for yaw
File:Yaw.png
The unit circle of yaw, redrawn

Updates the direction the player is looking in.

Yaw is measured in degrees and does not follow classical trigonometry rules. The unit circle of yaw on the XZ-plane starts at (0, 1) and turns counterclockwise, with 90 at (-1, 0), 180 at (0,-1) and 270 at (1, 0). Additionally, yaw is not clamped to between 0 and 360 degrees; any number is valid, including negative numbers and numbers greater than 360.

Pitch is measured in degrees, where 0 is looking straight ahead, -90 is looking straight up, and 90 is looking straight down.

The yaw and pitch of the player (in degrees), standing at point (x0, y0, z0) and looking towards point (x, y, z) can be calculated with:

dx = x-x0
dy = y-y0
dz = z-z0
r = sqrt( dx*dx + dy*dy + dz*dz )
yaw = -atan2(dx,dz)/PI*180
if yaw < 0 then
    yaw = 360 + yaw
pitch = -arcsin(dy/r)/PI*180

You can get a unit vector from a given yaw/pitch via:

x = -cos(pitch) * sin(yaw)
y = -sin(pitch)
z =  cos(pitch) * cos(yaw)
Packet ID State Bound To Field Name Field Type Notes
protocol:
0x1F

resource:
move_player_rot
Play Server Yaw Template:Type Absolute rotation on the X Axis, in degrees.
Pitch Template:Type Absolute rotation on the Y Axis, in degrees.
Flags Template:Type Bit field: 0x01: on ground, 0x02: pushing against wall.

Set Player Movement Flags

This packet, as well as Set Player Position, Set Player Rotation, and Set Player Position and Rotation are called the “serverbound movement packets”. Vanilla clients will send Move Player Position once every 20 ticks, even for a stationary player.

This packet is used to indicate whether the player is on ground (walking/swimming) or airborne (jumping/falling).

When dropping from a sufficient height, fall damage is applied when this state goes from false to true. The amount of damage applied is based on the point where it last changed from true to false. Note that there are several movement related packets containing this state.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x20

resource:
move_player_status_only
Play Server Flags Template:Type Bit field: 0x01: on ground, 0x02: pushing against wall.

Move Vehicle (serverbound)

Sent when a player moves in a client-side-controlled vehicle. Fields are the same as in Set Player Position and Rotation. Note that all fields use absolute positioning and do not allow for relative positioning.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x21

resource:
move_vehicle
Play Server X Template:Type Absolute position (X coordinate).
Y Template:Type Absolute position (Y coordinate).
Z Template:Type Absolute position (Z coordinate).
Yaw Template:Type Absolute rotation on the vertical axis, in degrees.
Pitch Template:Type Absolute rotation on the horizontal axis, in degrees.
On Ground Template:Type (This value does not seem to exist)

Paddle Boat

Used to visually update whether boat paddles are turning. The server will update the Boat entity metadata to match the values here.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x22

resource:
paddle_boat
Play Server Left paddle turning Template:Type
Right paddle turning Template:Type

Right paddle turning is set to true when the left button or forward button is held, left paddle turning is set to true when the right button or forward button is held.

Pick Item From Block

Used for pick block functionality (middle click) on blocks to retrieve items from the inventory in survival or creative mode or create them in creative mode. See Minecraft:Controls#Pick Block for more information.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x23

resource:
pick_item_from_block
Play Server Location Template:Type The location of the block.
Include Data Template:Type Used to tell the server to include block data in the new stack, works only if in creative mode.

Pick Item From Entity

Used for pick block functionality (middle click) on entities to retrieve items from the inventory in survival or creative mode or create them in creative mode. See Minecraft:Controls#Pick Block for more information.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x24

resource:
pick_item_from_entity
Play Server Entity ID Template:Type The ID of the entity to pick.
Include Data Template:Type Unused by the vanilla server.

Ping Request (play)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x25

resource:
ping_request
Play Server Payload Template:Type May be any number. vanilla clients use a system-dependent time value, which is counted in milliseconds.

Place Recipe

This packet is sent when a player clicks a recipe in the crafting book that is craftable (white border).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x26

resource:
place_recipe
Play Server Window ID Template:Type
Recipe ID Template:Type ID of recipe previously defined in Recipe Book Add.
Make all Template:Type Affects the amount of items processed; true if shift is down when clicked.

Player Abilities (serverbound)

The vanilla client sends this packet when the player starts/stops flying with the Flags parameter changed accordingly.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x27

resource:
player_abilities
Play Server Flags Template:Type Bit mask. 0x02: is flying.

Player Action

Sent when the player mines a block. A vanilla server only accepts digging packets with coordinates within a 6-unit radius between the center of the block and the player's eyes.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x28

resource:
player_action
Play Server Status Template:Type Template:Type The action the player is taking against the block (see below).
Location Template:Type Block position.
Face Template:Type Template:Type The face being hit (see below).
Sequence Template:Type Block change sequence number (see #Acknowledge Block Change).

Status can be one of seven values:

Value Meaning Notes
0 Started digging Sent when the player starts digging a block. If the block was instamined or the player is in creative mode, the client will not send Status = Finished digging, and will assume the server completed the destruction. To detect this, it is necessary to calculate the block destruction speed server-side.
1 Cancelled digging Sent when the player lets go of the Mine Block key (default: left click). Face is always set to -Y.
2 Finished digging Sent when the client thinks it is finished.
3 Drop item stack Triggered by using the Drop Item key (default: Q) with the modifier to drop the entire selected stack (default: Control or Command, depending on OS). Location is always set to 0/0/0, Face is always set to -Y. Sequence is always set to 0.
4 Drop item Triggered by using the Drop Item key (default: Q). Location is always set to 0/0/0, Face is always set to -Y. Sequence is always set to 0.
5 Shoot arrow / finish eating Indicates that the currently held item should have its state updated, such as eating food, pulling back bows, using buckets, etc. Location is always set to 0/0/0, Face is always set to -Y. Sequence is always set to 0.
6 Swap item in hand Used to swap or assign an item to the second hand. Location is always set to 0/0/0, Face is always set to -Y. Sequence is always set to 0.

The Face field can be one of the following values, representing the face being hit:

Value Offset Face
0 -Y Bottom
1 +Y Top
2 -Z North
3 +Z South
4 -X West
5 +X East

Player Command

Sent by the client to indicate that it has performed certain actions: sprinting, exiting a bed, jumping with a horse, and opening a horse's inventory while riding it.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x29

resource:
player_command
Play Server Entity ID Template:Type Player ID (ignored by the vanilla server)
Action ID Template:Type Template:Type The ID of the action, see below.
Jump Boost Template:Type Only used by the “start jump with horse” action, in which case it ranges from 0 to 100. In all other cases it is 0.

Action ID can be one of the following values:

ID Action
0 Leave bed
1 Start sprinting
2 Stop sprinting
3 Start jump with horse
4 Stop jump with horse
5 Open vehicle inventory
6 Start flying with elytra

Leave bed is only sent when the “Leave Bed” button is clicked on the sleep GUI, not when waking up in the morning.

Open vehicle inventory is only sent when pressing the inventory key (default: E) while on a horse or chest boat — all other methods of opening such an inventory (involving right-clicking or shift-right-clicking it) do not use this packet.

Player Input

Sent whenever the player presses or releases certain keys. The flags correspond directly to the states of their corresponding keys—the Sprint flag does not depend on whether the player is actually able to sprint at the moment, etc.

Used by the vanilla server for minecart controls, player inputs in the entity_properties Minecraft:predicate, and sneaking (sprinting is still controlled by Player Command).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2A

resource:
player_input
Play Server Flags Template:Type Bit mask; see below

The flags are as follows:

Hex Mask Field
0x01 Forward
0x02 Backward
0x04 Left
0x08 Right
0x10 Jump
0x20 Sneak
0x40 Sprint

Player Loaded

Sent by the client to indicate that it is ready to start simulating the player. The vanilla client sends this when the "Loading terrain..." screen is closed. (But see the caveat below.)

The vanilla client skips ticking the player entity until the tick on which this packet is sent (the first tick will happen between this packet and the next Client Tick End). Other entities and objects will still be ticked.

Once 60 ticks have elapsed since the last Login or Respawn packet, the vanilla client will start ticking the player and skip sending this packet completely, even after the usual conditions for it have been met. This can happen even before the "Start waiting for level chunks" Game Event is received. The loading screen is not affected in any way by this timer (except indirectly by the player falling into the void after ticking has started). Likewise, the vanilla server will assume that the client has loaded if it takes longer than 60 server ticks to send this packet. A more robust way to detect this condition is to count the number of Client Tick End packets sent by the client. The first player tick will occur after 60 Client Tick End packets have been sent. To determine when this counter should be restarted following a respawn, the Respawn packet can be sent in a bundle together with a Ping packet.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2B

resource:
player_loaded
Play Server no fields

Pong (play)

Response to the clientbound packet (Ping) with the same ID.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2C

resource:
pong
Play Server ID Template:Type id is the same as the ping packet

Change Recipe Book Settings

Replaces Recipe Book Data, type 1.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2D

resource:
recipe_book_change_settings
Play Server Book ID Template:Type Template:Type 0: crafting, 1: furnace, 2: blast furnace, 3: smoker.
Book Open Template:Type
Filter Active Template:Type

Set Seen Recipe

Sent when recipe is first seen in recipe book. Replaces Recipe Book Data, type 0.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2E

resource:
recipe_book_seen_recipe
Play Server Recipe ID Template:Type ID of recipe previously defined in Recipe Book Add.

Rename Item

Sent as a player is renaming an item in an anvil (each keypress in the anvil UI sends a new Rename Item packet). If the new name is empty, then the item loses its custom name (this is different from setting the custom name to the normal name of the item). The item name may be no longer than 50 characters, and if it is longer than that, then the rename is silently ignored.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x2F

resource:
rename_item
Play Server Item name Template:Type (32767) The new name of the item.

Resource Pack Response (play)

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x30

resource:
resource_pack
Play Server UUID Template:Type The unique identifier of the resource pack received in the Add Resource Pack (play) request.
Result Template:Type Template:Type Result ID (see below).

Result can be one of the following values:


ID Result
0 Successfully downloaded
1 Declined
2 Failed to download
3 Accepted
4 Downloaded
5 Invalid URL
6 Failed to reload
7 Discarded

Seen Advancements

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x31

resource:
seen_advancements
Play Server Action Template:Type Template:Type 0: Opened tab, 1: Closed screen.
Tab ID Template:Type Template:Type Only present if action is Opened tab.

Select Trade

When a player selects a specific trade offered by a villager NPC.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x32

resource:
select_trade
Play Server Selected slot Template:Type The selected slot in the player's current (trading) inventory.

Set Beacon Effect

Changes the effect of the current beacon.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x33

resource:
set_beacon
Play Server Primary Effect Template:Type Template:Type A Potion ID.
Secondary Effect Template:Type Template:Type A Potion ID.

Set Held Item (serverbound)

Sent when the player changes the slot selection.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x34

resource:
set_carried_item
Play Server Slot Template:Type The slot which the player has selected (0–8).

Program Command Block

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x35

resource:
set_command_block
Play Server Location Template:Type
Command Template:Type (32767)
Mode Template:Type Template:Type 0: chain, 1: repeating, 2: impulse.
Flags Template:Type 0x01: Track Output (if false, the output of the previous command will not be stored within the command block); 0x02: Is conditional; 0x04: Automatic.

Program Command Block Minecart

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x36

resource:
set_command_minecart
Play Server Entity ID Template:Type
Command Template:Type (32767)
Track Output Template:Type If false, the output of the previous command will not be stored within the command block.

Set Creative Mode Slot

While the user is in the standard inventory (i.e., not a crafting bench) in Creative mode, the player will send this packet.

Clicking in the creative inventory menu is quite different from non-creative inventory management. Picking up an item with the mouse actually deletes the item from the server, and placing an item into a slot or dropping it out of the inventory actually tells the server to create the item from scratch. (This can be verified by clicking an item that you don't mind deleting, then severing the connection to the server; the item will be nowhere to be found when you log back in.) As a result of this implementation strategy, the "Destroy Item" slot is just a client-side implementation detail that means "I don't intend to recreate this item.". Additionally, the long listings of items (by category, etc.) are a client-side interface for choosing which item to create. Picking up an item from such listings sends no packets to the server; only when you put it somewhere does it tell the server to create the item in that location.

This action can be described as "set inventory slot". Picking up an item sets the slot to item ID -1. Placing an item into an inventory slot sets the slot to the specified item. Dropping an item (by clicking outside the window) effectively sets slot -1 to the specified item, which causes the server to spawn the item entity, etc.. All other inventory slots are numbered the same as the non-creative inventory (including slots for the 2x2 crafting menu, even though they aren't visible in the vanilla client).

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x37

resource:
set_creative_mode_slot
Play Server Slot Template:Type Inventory slot.
Clicked Item Template:Type

Program Jigsaw Block

Sent when Done is pressed on the Minecraft:Jigsaw Block interface.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x38

resource:
set_jigsaw_block
Play Server Location Template:Type Block entity location
Name Template:Type
Target Template:Type
Pool Template:Type
Final state Template:Type (32767) "Turns into" on the GUI, final_state in NBT.
Joint type Template:Type (32767) rollable if the attached piece can be rotated, else aligned.
Selection priority Template:Type
Placement priority Template:Type

Program Structure Block

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x39

resource:
set_structure_block
Play Server
Location Template:Type Block entity location.
Action Template:Type Template:Type An additional action to perform beyond simply saving the given data; see below.
Mode Template:Type Template:Type One of SAVE (0), LOAD (1), CORNER (2), DATA (3).
Name Template:Type (32767)
Offset X Template:Type Between -48 and 48.
Offset Y Template:Type Between -48 and 48.
Offset Z Template:Type Between -48 and 48.
Size X Template:Type Between 0 and 48.
Size Y Template:Type Between 0 and 48.
Size Z Template:Type Between 0 and 48.
Mirror Template:Type Template:Type One of NONE (0), LEFT_RIGHT (1), FRONT_BACK (2).
Rotation Template:Type Template:Type One of NONE (0), CLOCKWISE_90 (1), CLOCKWISE_180 (2), COUNTERCLOCKWISE_90 (3).
Metadata Template:Type (128)
Integrity Template:Type Between 0 and 1.
Seed Template:Type
Flags Template:Type 0x01: Ignore entities; 0x02: Show air; 0x04: Show bounding box; 0x08: Strict placement.

Possible actions:

  • 0 - Update data
  • 1 - Save the structure
  • 2 - Load the structure
  • 3 - Detect size

The vanilla client uses update data to indicate no special action should be taken (i.e. the done button).

Set Test Block

Updates the value of the Minecraft:Test Block at the given position.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3A

resource:
set_test_block
Play Server Position Template:Type
Mode Template:Type Template:Type 0: start, 1: log, 2: fail, 3: accept
Message Template:Type

Update Sign

This message is sent from the client to the server when the “Done” button is pushed after placing a sign.

The server only accepts this packet after Open Sign Editor, otherwise this packet is silently ignored.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3B

resource:
sign_update
Play Server Location Template:Type Block Coordinates.
Is Front Text Template:Type Whether the updated text is in front or on the back of the sign
Line 1 Template:Type (384) First line of text in the sign.
Line 2 Template:Type (384) Second line of text in the sign.
Line 3 Template:Type (384) Third line of text in the sign.
Line 4 Template:Type (384) Fourth line of text in the sign.

Swing Arm

Sent when the player's arm swings.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3C

resource:
swing
Play Server Hand Template:Type Template:Type Hand used for the animation. 0: main hand, 1: off hand.

Teleport To Entity

Teleports the player to the given entity. The player must be in spectator mode.

The vanilla client only uses this to teleport to players, but it appears to accept any type of entity. The entity does not need to be in the same dimension as the player; if necessary, the player will be respawned in the right world. If the given entity cannot be found (or isn't loaded), this packet will be ignored.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3D

resource:
teleport_to_entity
Play Server Target Player Template:Type UUID of the player to teleport to (can also be an entity UUID).

Test Instance Block Action

Tries to perform an action the Minecraft:Test Instance Block at the given position.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3E

resource:
test_instance_block_action
Play Server Position Template:Type
Action Template:Type Template:Type 0: init, 1: query, 2: set, 3: reset, 4: save, 5: export, 6: run.
Test Template:Type Template:Type ID in the minecraft:test_instance registry.
Size X Template:Type
Size Y Template:Type
Size Z Template:Type
Rotation Template:Type Template:Type 0: none, 1: clockwise 90°, 2: clockwise 180°, 3: counter-clockwise 90°.
Ignore Entities Template:Type
Status Template:Type Template:Type 0: cleared, 1: running, 2: finished.
Error Message Template:Type Template:Type

Use Item On

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x3F

resource:
use_item_on
Play Server Hand Template:Type Template:Type The hand from which the block is placed; 0: main hand, 1: off hand.
Location Template:Type Block position.
Face Template:Type Template:Type The face on which the block is placed (as documented at Player Action).
Cursor Position X Template:Type The position of the crosshair on the block, from 0 to 1 increasing from west to east.
Cursor Position Y Template:Type The position of the crosshair on the block, from 0 to 1 increasing from bottom to top.
Cursor Position Z Template:Type The position of the crosshair on the block, from 0 to 1 increasing from north to south.
Inside block Template:Type True when the player's head is inside of a block.
World Border Hit Template:Type Seems to always be false, even when interacting with blocks around or outside the world border, or while the player is outside the border.
Sequence Template:Type Block change sequence number (see #Acknowledge Block Change).

Upon placing a block, this packet is sent once.

The Cursor Position X/Y/Z fields (also known as in-block coordinates) are calculated using raytracing. The unit corresponds to sixteen pixels in the default resource pack. For example, let's say a slab is being placed against the south face of a full block. The Cursor Position X will be higher if the player was pointing near the right (east) edge of the face, lower if pointing near the left. The Cursor Position Y will be used to determine whether it will appear as a bottom slab (values 0.0–0.5) or as a top slab (values 0.5-1.0). The Cursor Position Z should be 1.0 since the player was looking at the southernmost part of the block.

Inside block is true when a player's head (specifically eyes) are inside of a block's collision. In 1.13 and later versions, collision is rather complicated and individual blocks can have multiple collision boxes. For instance, a ring of vines has a non-colliding hole in the middle. This value is only true when the player is directly in the box. In practice, though, this value is only used by scaffolding to place in front of the player when sneaking inside of it (other blocks will place behind when you intersect with them -- try with glass for instance).

Use Item

Sent when pressing the Use Item key (default: right click) with an item in hand.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x40

resource:
use_item
Play Server Hand Template:Type Template:Type Hand used for the animation. 0: main hand, 1: off hand.
Sequence Template:Type Block change sequence number (see #Acknowledge Block Change).
Yaw Template:Type Player head rotation around the Y-Axis.
Pitch Template:Type Player head rotation around the X-Axis.

The player's rotation is permanently updated according to the Yaw and Pitch fields before performing the action, unless there is no item in the specified hand.

Custom Click Action (play)

Sent when the client clicks a Template:Type with the minecraft:custom click action. This is meant as an alternative to running a command, but will not have any effect on vanilla servers.

Packet ID State Bound To Field Name Field Type Notes
protocol:
0x41

resource:
custom_click_action
Play Server ID Template:Type The identifier for the click action.
Payload Template:Type The data to send with the click action. May be a TAG_END (0).

Navigation

Template:Navbox Java Edition technical Template:License wiki.vg

Minecraft:de:Minecraft-Server-Protokoll/Pakete

Contents