Field Name | Field Type | Notes | ||||||||||||||||||||||||
BehaviourPackInfos length | li16 | |||||||||||||||||||||||||
BehaviourPackInfos array |
|
Field Name | Field Type | Notes | |||||||||||||||||||||||||||
TexturePackInfos length | li16 | ||||||||||||||||||||||||||||
TexturePackInfos array |
|
Field Name | Field Type | Notes | |||||||||
ResourcePackIdVersions length | varint | ||||||||||
ResourcePackIdVersions array |
|
Field Name | Field Type | Notes |
name | string | |
enabled | bool |
Field Name | Field Type | Notes | |||||||||||||||||||||
GameMode | zigzag32 enum
|
Field Name | Field Type | Notes | |||||||||
name | string | ||||||||||
editable | bool | ||||||||||
type | varint enum
| ||||||||||
value if type |
|
CacheBlob represents a blob as used in the client side blob cache protocol. It holds a hash of its data and the full data of it.
Field Name | Field Type | Notes |
hash | lu64 | Hash is the hash of the blob. The hash is computed using xxHash, and must be deterministic for the same chunk data. |
payload | ByteArray | Payload is the data of the blob. When sent, the client will associate the Hash of the blob with the Payload in it. |
Field Name | Field Type | Notes | ||||||
BlockProperties length | varint | |||||||
BlockProperties array |
|
Field Name | Field Type | Notes | |||||||||
Itemstates length | varint | ||||||||||
Itemstates array |
|
Field Name | Field Type | Notes | ||||||||||||
has nbt | lu16 enum
| |||||||||||||
nbt if has nbt |
| |||||||||||||
can place on length | li32 | |||||||||||||
can place on array | ShortString | |||||||||||||
can destroy length | li32 | |||||||||||||
can destroy array | ShortString | |||||||||||||
blocking tick | li64 |
Field Name | Field Type | Notes | ||||||||||||
has nbt | lu16 enum
| |||||||||||||
nbt if has nbt |
| |||||||||||||
can place on length | li32 | |||||||||||||
can place on array | ShortString | |||||||||||||
can destroy length | li32 | |||||||||||||
can destroy array | ShortString |
Same as below but without a "networkStackID" boolean
Field Name | Field Type | Notes | ||||||||||||||||||||||||
network id | zigzag32 | |||||||||||||||||||||||||
🔁 if network id |
|
An "ItemStack" here represents an Item instance. You can think about it like a pointer
to an item class. The data for the class gets updated with the data in the item
field
As of 1.16.220, now functionally the same as Item
just without an extra boolean when
server auth inventories is disabled.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||
network id | zigzag32 | |||||||||||||||||||||||||||||||||||||
🔁 if network id |
|
Field Name | Field Type | Notes |
x | zigzag32 | |
y | zigzag32 | |
z | zigzag32 |
Field Name | Field Type | Notes |
x | li32 | |
y | li32 | |
z | li32 |
Field Name | Field Type | Notes |
x | varint | |
y | varint | |
z | varint |
Field Name | Field Type | Notes |
x | lf32 | |
y | lf32 | |
z | lf32 |
Field Name | Field Type | Notes |
x | lf32 | |
z | lf32 |
Field Name | Field Type | Notes |
x optional | lf32 | |
y optional | lf32 | |
z optional | lf32 |
Field Name | Field Type | Notes |
x optional | lf32 | |
y optional | lf32 |
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MetadataDictionary length | varint | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MetadataDictionary array |
|
Field Name | Field Type | Notes |
ridden entity id | zigzag64 | |
rider entity id | zigzag64 | |
type | u8 | |
immediate | bool | |
rider initiated | bool | |
angular velocity | lf32 | angular velocity of the vehicle that the rider is riding. |
Field Name | Field Type | Notes | ||||||||||||
EntityAttributes length | varint | |||||||||||||
EntityAttributes array |
|
Field Name | Field Type | Notes | ||||||
ints length | varint | |||||||
ints array |
| |||||||
floats length | varint | |||||||
floats array |
|
Field Name | Field Type | Notes |
yaw | byterot | |
pitch | byterot | |
head yaw | byterot |
Field Name | Field Type | Notes |
x | zigzag32 | |
y | varint | |
z | zigzag32 |
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||
PlayerAttributes length | varint | ||||||||||||||||||||||||||||||||||||||||
PlayerAttributes array |
|
UseItemTransactionData represents an inventory transaction data object sent when the client uses an item on a block. Also used in PlayerAuthoritativeInput packet
Field Name | Field Type | Notes | |||||||||
action type | varint enum
| ||||||||||
trigger type | varint enum
| ||||||||||
block position | BlockCoordinates | BlockPosition is the position of the block that was interacted with. This is only really a correct block position if ActionType is not UseItemActionClickAir. | |||||||||
face | zigzag32 | BlockFace is the face of the block that was interacted with. When clicking the block, it is the face clicked. When breaking the block, it is the face that was last being hit until the block broke. | |||||||||
hotbar slot | zigzag32 | HotBarSlot is the hot bar slot that the player was holding while clicking the block. It should be used to ensure that the hot bar slot and held item are correctly synchronised with the server. | |||||||||
held item | Item | HeldItem is the item that was held to interact with the block. The server should check if this item is actually present in the HotBarSlot. | |||||||||
player pos | vec3f | Position is the position of the player at the time of interaction. For clicking a block, this is the position at that time, whereas for breaking the block it is the position at the time of breaking. | |||||||||
click pos | vec3f | ClickedPosition is the position that was clicked relative to the block's base coordinate. It can be used to find out exactly where a player clicked the block. | |||||||||
block runtime id | varint | BlockRuntimeID is the runtime ID of the block that was clicked. It may be used by the server to verify that the player's world client-side is synchronised with the server's. | |||||||||
client prediction | varint enum
|
Actions is a list of actions that took place, that form the inventory transaction together. Each of these actions hold one slot in which one item was changed to another. In general, the combination of all of these actions results in a balanced inventory transaction. This should be checked to ensure that no items are cheated into the inventory.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
TransactionActions length | varint | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
TransactionActions array |
|
The Minecraft bedrock inventory system was refactored, but not all inventory actions use the new packet. This data structure holds actions that have not been updated to the new system.
Field Name | Field Type | Notes | |||||||||||||||||||||
legacy request id | zigzag32 | LegacyRequestID is an ID that is only non-zero at times when sent by the client. The server should always send 0 for this. When this field is not 0, the LegacySetItemSlots slice below will have values in it. LegacyRequestID ties in with the ItemStackResponse packet. If this field is non-0, the server should respond with an ItemStackResponse packet. Some inventory actions such as dropping an item out of the hotbar are still one using this packet, and the ItemStackResponse packet needs to tie in with it. | |||||||||||||||||||||
legacy transactions if legacy request id |
|
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
legacy | TransactionLegacy | Old transaction system data | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
transaction type | varint enum
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions | TransactionActions | The list of inventory internal actions in this packet, e.g. inventory GUI actions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
transaction data if transaction type |
|
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||
type | u8 enum
| ||||||||||||||||||||||||||||||||||||||||||||||
🔁 if type |
| ||||||||||||||||||||||||||||||||||||||||||||||
count | zigzag32 |
Field Name | Field Type | Notes | ||||||||||||||||||
PotionTypeRecipes length | varint | |||||||||||||||||||
PotionTypeRecipes array |
|
Field Name | Field Type | Notes | |||||||||
PotionContainerChangeRecipes length | varint | ||||||||||
PotionContainerChangeRecipes array |
|
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Recipes length | varint | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Recipes array |
|
Field Name | Field Type | Notes | ||||||||||||
context | u8 enum
| |||||||||||||
ingredients if context |
|
Field Name | Field Type | Notes |
width | li32 | |
height | li32 | |
data | ByteArray |
Field Name | Field Type | Notes | |||||||||||||||
skin id | string | ||||||||||||||||
play fab id | string | ||||||||||||||||
skin resource pack | string | ||||||||||||||||
skin data | SkinImage | ||||||||||||||||
animations length | li32 | ||||||||||||||||
animations array |
| ||||||||||||||||
cape data | SkinImage | ||||||||||||||||
geometry data | string | ||||||||||||||||
geometry data version | string | ||||||||||||||||
animation data | string | ||||||||||||||||
cape id | string | ||||||||||||||||
full skin id | string | ||||||||||||||||
arm size | string | ||||||||||||||||
skin color | string | ||||||||||||||||
personal pieces length | li32 | ||||||||||||||||
personal pieces array |
| ||||||||||||||||
piece tint colors length | li32 | ||||||||||||||||
piece tint colors array |
| ||||||||||||||||
premium | bool | ||||||||||||||||
persona | bool | ||||||||||||||||
cape on classic | bool | PersonaCapeOnClassicSkin specifies if the skin had a Persona cape (in-game skin creator cape) equipped on a classic skin. | |||||||||||||||
primary user | bool | ||||||||||||||||
overriding player appearance | bool |
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||
type | u8 enum
| |||||||||||||||||||||||||||||||||||||||||||
records count | varint | |||||||||||||||||||||||||||||||||||||||||||
Length for records below is records count from above | ||||||||||||||||||||||||||||||||||||||||||||
records array |
| |||||||||||||||||||||||||||||||||||||||||||
verified if type |
|
Field Name | Field Type | Notes |
id | u8 | |
level | u8 |
Field Name | Field Type | Notes |
cost | varint | |
slot flags | li32 | |
equip enchants length | varint | |
equip enchants array | Enchant | |
held enchants length | varint | |
held enchants array | Enchant | |
self enchants length | varint | |
self enchants array | Enchant | |
name | string | |
option id | zigzag32 |
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Action | zigzag32 enum
|
Source and Destination point to the source slot from which Count of the item stack were taken and the destination slot to which this item was moved.
Field Name | Field Type | Notes |
slot type | FullContainerName | ContainerID is the ID of the container that the slot was in. |
slot | u8 | Slot is the index of the slot within the container with the ContainerID above. |
stack id | zigzag32 | StackNetworkID is the unique stack ID that the client assumes to be present in this slot. The server must check if these IDs match. If they do not match, servers should reject the stack request that the action holding this info was in. |
ItemStackRequest is sent by the client to change item stacks in an inventory. It is essentially a replacement of the InventoryTransaction packet added in 1.16 for inventory specific actions, such as moving items around or crafting. The InventoryTransaction packet is still used for actions such as placing blocks and interacting with entities.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
request id | zigzag32 | RequestID is a unique ID for the request. This ID is used by the server to send a response for this specific request in the ItemStackResponse packet. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions length | varint | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions array |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
custom names length | varint | CustomNames is a list of custom names involved in the request. This is typically filled with one string when an anvil is used.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
custom names array | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cause | li32 enum
|
ItemStackResponse is a response to an individual ItemStackRequest.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||
ItemStackResponses length | varint | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ItemStackResponses array |
|
Field Name | Field Type | Notes | ||||||
ItemComponentList length | varint | |||||||
ItemComponentList array |
|
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||
type | varint enum
| |||||||||||||||||||||||||||||||||||||||||||||||||
uuid | uuid | UUID is the UUID of the command called. This UUID is a bit odd as it is not specified by the server. It is not clear what exactly this UUID is meant to identify, but it is unique for each command called. | ||||||||||||||||||||||||||||||||||||||||||||||||
request id | string | RequestID is an ID that identifies the request of the client. The server should send a CommandOrigin with the same request ID to ensure it can be matched with the request by the caller of the command. This is especially important for websocket servers and it seems that this field is only non-empty for these websocket servers. | ||||||||||||||||||||||||||||||||||||||||||||||||
player entity id if type |
|
MapTrackedObject is an object on a map that is 'tracked' by the client, such as an entity or a block. This object may move, which is handled client-side.
Field Name | Field Type | Notes | ||||||
type | li32 enum
| |||||||
entity unique id if type |
| |||||||
block position if type |
|
MapDecoration is a fixed decoration on a map: Its position or other properties do not change automatically client-side.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type | u8 enum
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rotation | u8 | Rotation is the rotation of the map decoration. It is byte due to the 16 fixed directions that the map decoration may face. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
x | u8 | X is the offset on the X axis in pixels of the decoration. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
y | u8 | Y is the offset on the Y axis in pixels of the decoration. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
label | string | Label is the name of the map decoration. This name may be of any value. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
color abgr | varint | Colour is the colour of the map decoration. Some map decoration types have a specific colour set automatically, whereas others may be changed. |
Field Name | Field Type | Notes | ||||||||||||
palette name | string | PaletteName is the name of the palette used in the structure. Currently, it seems that this field is always 'default'. | ||||||||||||
ignore entities | bool | IgnoreEntities specifies if the structure should ignore entities or include them. If set to false, entities will also show up in the exported structure. | ||||||||||||
ignore blocks | bool | IgnoreBlocks specifies if the structure should ignore blocks or include them. If set to false, blocks will show up in the exported structure. | ||||||||||||
non ticking players and ticking areas | bool | |||||||||||||
size | BlockCoordinates | Size is the size of the area that is about to be exported. The area exported will start at the Position + Offset, and will extend as far as Size specifies. | ||||||||||||
structure offset | BlockCoordinates | Offset is the offset position that was set in the structure block. The area exported is offset by this position. TODO: This will be renamed to offset soon | ||||||||||||
last editing player unique id | zigzag64 | LastEditingPlayerUniqueID is the unique ID of the player that last edited the structure block that these settings concern. | ||||||||||||
rotation | u8 enum
| |||||||||||||
mirror | u8 enum
| |||||||||||||
animation mode | u8 enum
| |||||||||||||
animation duration | lf32 | How long the duration for this animation is | ||||||||||||
integrity | lf32 | Integrity is usually 1, but may be set to a number between 0 and 1 to omit blocks randomly, using the Seed that follows. | ||||||||||||
seed | lu32 | Seed is the seed used to omit blocks if Integrity is not equal to one. If the Seed is 0, a random seed is selected to omit blocks. | ||||||||||||
pivot | vec3f | Pivot is the pivot around which the structure may be rotated. |
EducationSharedResourceURI is an education edition feature that is used for transmitting education resource settings to clients. It contains a button name and a link URL.
Field Name | Field Type | Notes |
button name | string | ButtonName is the button name of the resource URI. |
link uri | string | LinkURI is the link URI for the resource URI. |
Field Name | Field Type | Notes |
url | string | URL is the external link URL. |
display name | string | DisplayName is the display name in game. |
Field Name | Field Type | Notes |
position | BlockCoordinates | |
runtime id | varint | |
flags | varint | |
entity unique id | zigzag64 | EntityUniqueID is the unique ID of the falling block entity that the block transitions to or that the entity transitions from. Note that for both possible values for TransitionType, the EntityUniqueID should point to the falling block entity involved. |
transition type | varint enum |
TransitionType is the type of the transition that happened. It is either BlockToEntityTransition, when a block placed becomes a falling entity, or EntityToBlockTransition, when a falling entity hits the ground and becomes a solid block again.
Field Name | Field Type | Notes | |||||||||
TransitionType | enum
|
Field Name | Field Type | Notes | ||||||
mix | zigzag32 | |||||||
items |
|
The permission level of a player, for example whether they are an Server Operator or not.
Field Name | Field Type | Notes | ||||||||||||
PermissionLevel | u8 enum
|
The command permission level, for example if being run by a Player, an Op, or a Command Block.
Field Name | Field Type | Notes | ||||||||||||||||||
CommandPermissionLevel | u8 enum
|
The command permission level, for example if being run by a Player, an Op, or a Command Block.
Field Name | Field Type | Notes | ||||||||||||||||||
CommandPermissionLevelVarint | u8 enum
|
List of Window IDs. When a new container is opened (container_open), a new sequential Window ID is created.
Below window IDs are hard-coded and created when the game starts and the server does not
send a container_open
for them.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WindowID | i8 enum
|
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WindowIDVarint | varint enum
|
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WindowType | i8 enum
|
Used in inventory transactions.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ContainerSlotType | u8 enum
|
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SoundType | varint enum
|
TODO: remove?
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LegacyEntityType | li32 enum
|
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||
DeviceOS | li32 enum
|
AbilityLayer represents the abilities of a specific layer, such as the base layer or the spectator layer.
Field Name | Field Type | Notes | ||||||||||||||||||
type | lu16 enum
| |||||||||||||||||||
allowed | AbilitySet | The abilities that can be toggled between | ||||||||||||||||||
enabled | AbilitySet | The abilities that are currently active | ||||||||||||||||||
fly speed | lf32 | FlySpeed is the default fly speed of the layer. | ||||||||||||||||||
walk speed | lf32 | WalkSpeed is the default walk speed of the layer. |
Field Name | Field Type | Notes |
name | string | Name is the name of the preset. Each preset must have their own unique name. |
parent | string | Parent is the name of the preset that this preset extends upon. This can be left empty. |
position | Vec3fopts | |
rotation | Vec2fopts | |
offset optional | vec2f | ViewOffset is only used in a follow_orbit camera and controls an offset based on a pivot point to the player, causing it to be shifted in a certain direction. |
radius optional | lf32 | Radius is only used in a follow_orbit camera and controls how far away from the player the camera should be rendered. |
audio listener optional | u8 | |
player effects optional | bool |
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DisconnectFailReason | zigzag32 enum
|
Field Name | Field Type | Notes |
container id | ContainerSlotType | |
dynamic container id | u32 |
The login process is as follows:
Field Name | Field Type | Notes |
protocol version | i32 | Protocol version (Big Endian!) |
tokens | ["encapsulated", { "lengthType": "varint", "type": "LoginTokens" }] |
Field Name | Field Type | Notes |
identity | LittleString | JSON array of JWT data: contains the display name, UUID and XUID It should be signed by the Mojang public key |
client | LittleString | Skin related data |
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||
status | i32 enum
|
Field Name | Field Type | Notes |
token | string | Contains the salt to complete the Diffie-Hellman key exchange |
Sent by the client in response to a Server To Client Handshake packet sent by the server. It is the first encrypted packet in the login handshake and serves as a confirmation that encryption is correctly initialized client side. It has no fields.
Field Name | Field Type | Notes |
Sent by the server to disconnect a client.
Field Name | Field Type | Notes | ||||||||||||
reason | DisconnectFailReason | Reason is the reason for the disconnection. It seems as if this field has no use other than for telemetry reasons as it does not affect the message that gets displayed on the disconnect screen. | ||||||||||||
hide disconnect reason | bool | Specifies if the disconnection screen should be hidden when the client is disconnected, meaning it will be sent directly to the main menu. | ||||||||||||
🔁 if hide disconnect reason |
|
Field Name | Field Type | Notes | ||||||
must accept | bool | If the resource pack requires the client accept it. | ||||||
has addons | bool | HasAddons specifies if any of the resource packs contain addons in them. If set to true, only clients that support addons will be able to download them. | ||||||
has scripts | bool | If scripting is enabled. | ||||||
force server packs | bool | ForcingServerPacks is currently an unclear field. | ||||||
behaviour packs | BehaviourPackInfos | A list of behaviour packs that the client needs to download before joining the server. All of these behaviour packs will be applied together. | ||||||
texture packs | TexturePackInfos | A list of resource packs that the client needs to download before joining the server. The order of these resource packs is not relevant in this packet. It is however important in the Resource Pack Stack packet. | ||||||
resource pack links length | varint | Resource Pack Links contains a list of URLs where the client can download required resource packs, as opposed to the current Minecraft sever sending the data over | ||||||
resource pack links array |
|
Field Name | Field Type | Notes |
must accept | bool | If the resource pack must be accepted for the player to join the server. |
behavior packs | ResourcePackIdVersions | [inline] |
resource packs | ResourcePackIdVersions | [inline] |
game version | string | |
experiments | Experiments | |
experiments previously used | bool | |
has editor packs | bool |
Field Name | Field Type | Notes | |||||||||||||||
response status | u8 enum
| ||||||||||||||||
resourcepackids | ResourcePackIds | All of the pack IDs. |
Sent by the client to the server to send chat messages, and by the server to the client to forward or send messages, which may be chat, popups, tips etc.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||
type | u8 enum
| |||||||||||||||||||||||||||||||||||||
needs translation | bool | NeedsTranslation specifies if any of the messages need to be translated. It seems that where % is found in translatable text types, these are translated regardless of this bool. Translatable text types include TextTypeTip, TextTypePopup and TextTypeJukeboxPopup. | ||||||||||||||||||||||||||||||||||||
🔁 if type |
| |||||||||||||||||||||||||||||||||||||
xuid | string | The XUID of the player who sent this message. | ||||||||||||||||||||||||||||||||||||
platform chat id | string | PlatformChatID is an identifier only set for particular platforms when chatting (presumably only for Nintendo Switch). It is otherwise an empty string, and is used to decide which players are able to chat with each other. | ||||||||||||||||||||||||||||||||||||
filtered message | string |
For additional information and examples of all the chat types above, see here: https://imgur.com/a/KhcFscg Sent by the server to update the current time client-side. The client actually advances time client-side by itself, so this packet does not need to be sent each tick. It is merely a means of synchronizing time between server and client.
Field Name | Field Type | Notes |
time | zigzag32 | Time is the current time. The time is not limited to 24000 (time of day), but continues progressing after that. |
Sent by the server to send information about the world the player will be spawned in.
Field Name | Field Type | Notes | |||||||||
entity id | zigzag64 | The unique ID of the player. The unique ID is a value that remains consistent across different sessions of the same world, but most unofficial servers simply fill the runtime ID of the entity out for this field. | |||||||||
runtime entity id | varint64 | The runtime ID of the player. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. | |||||||||
player gamemode | GameMode | PlayerGameMode is the game mode the player currently has. It is a value from 0-4, with 0 being survival mode, 1 being creative mode, 2 being adventure mode, 3 being survival spectator and 4 being creative spectator. This field may be set to 5 to make the client fall back to the game mode set in the WorldGameMode field. | |||||||||
player position | vec3f | The spawn position of the player in the world. In servers this is often the same as the world's spawn position found below. | |||||||||
rotation | vec2f | The pitch and yaw of the player | |||||||||
seed | lu64 | The seed used to generate the world. | |||||||||
biome type | li16 | ||||||||||
biome name | string | ||||||||||
dimension | zigzag32 enum
| ||||||||||
generator | zigzag32 | Generator is the generator used for the world. It is a value from 0-4, with 0 being old limited worlds, 1 being infinite worlds, 2 being flat worlds, 3 being nether worlds and 4 being end worlds. A value of 0 will actually make the client stop rendering chunks you send beyond the world limit. | |||||||||
world gamemode | GameMode | The world game mode that a player gets when it first spawns in the world. It is shown in the settings and is used if the Player Gamemode is set to 5. | |||||||||
hardcore | bool | Specifies if the game is locked to "hardcore" mode or not, meaning the world will be unplayable after player dies in survival game mode. Persists even after switching player or world game modes. | |||||||||
difficulty | zigzag32 | Difficulty is the difficulty of the world. It is a value from 0-3, with 0 being peaceful, 1 being easy, 2 being normal and 3 being hard. | |||||||||
spawn position | BlockCoordinates | The block on which the world spawn of the world. This coordinate has no effect on the place that the client spawns, but it does have an effect on the direction that a compass poInts. | |||||||||
achievements disabled | bool | Defines if achievements are disabled in the world. The client crashes if this value is set to true while the player's or the world's game mode is creative, and it's recommended to simply always set this to false as a server. | |||||||||
editor world type | zigzag32 enum
| ||||||||||
created in editor | bool | Whether the world was created in editor mode | |||||||||
exported from editor | bool | Whether the world was exported from editor mode | |||||||||
day cycle stop time | zigzag32 | The time at which the day cycle was locked if the day cycle is disabled using the respective game rule. The client will maIntain this time as Boolean as the day cycle is disabled. | |||||||||
edu offer | zigzag32 | Some Minecraft: Education Edition field that specifies what 'region' the world was from, with 0 being None, 1 being RestOfWorld, and 2 being China. The actual use of this field is unknown. | |||||||||
edu features enabled | bool | Specifies if the world has education edition features enabled, such as the blocks or entities specific to education edition. | |||||||||
edu product uuid | string | ||||||||||
rain level | lf32 | The level specifying the Intensity of the rain falling. When set to 0, no rain falls at all. | |||||||||
lightning level | lf32 | ||||||||||
has confirmed platform locked content | bool | The level specifying the Intensity of the thunder. This may actually be set independently from the rain level, meaning dark clouds can be produced without rain. | |||||||||
is multiplayer | bool | Specifies if the world is a multi-player game. This should always be set to true for servers. | |||||||||
broadcast to lan | bool | Specifies if LAN broadcast was Intended to be enabled for the world. | |||||||||
xbox live broadcast mode | varint | The mode used to broadcast the joined game across XBOX Live. | |||||||||
platform broadcast mode | varint | The mode used to broadcast the joined game across the platform. | |||||||||
enable commands | bool | If commands are enabled for the player. It is recommended to always set this to true on the server, as setting it to false means the player cannot, under any circumstance, use a command. | |||||||||
is texturepacks required | bool | Specifies if the texture pack the world might hold is required, meaning the client was forced to download it before joining. | |||||||||
gamerules | GameRules | Defines game rules currently active with their respective values. The value of these game rules may be either 'bool', 'Int32' or 'Float32'. Some game rules are server side only, and don't necessarily need to be sent to the client. | |||||||||
experiments | Experiments | ||||||||||
experiments previously used | bool | ||||||||||
bonus chest | bool | Specifies if the world had the bonus map setting enabled when generating it. It does not have any effect client-side. | |||||||||
map enabled | bool | Specifies if the world has the start with map setting enabled, meaning each joining player obtains a map. This should always be set to false, because the client obtains a map all on its own accord if this is set to true. | |||||||||
permission level | PermissionLevel | The permission level of the player. It is a value from 0-3, with 0 being visitor, 1 being member, 2 being operator and 3 being custom. | |||||||||
server chunk tick range | li32 | The radius around the player in which chunks are ticked. Most servers set this value to a fixed number, as it does not necessarily affect anything client-side. | |||||||||
has locked behavior pack | bool | Specifies if the texture pack of the world is locked, meaning it cannot be disabled from the world. This is typically set for worlds on the marketplace that have a dedicated texture pack. | |||||||||
has locked resource pack | bool | Specifies if the texture pack of the world is locked, meaning it cannot be disabled from the world. This is typically set for worlds on the marketplace that have a dedicated texture pack. | |||||||||
is from locked world template | bool | Specifies if the world from the server was from a locked world template. For servers this should always be set to false. | |||||||||
msa gamertags only | bool | ||||||||||
is from world template | bool | Specifies if the world from the server was from a locked world template. For servers this should always be set to false. | |||||||||
is world template option locked | bool | Specifies if the world was a template that locks all settings that change properties above in the settings GUI. It is recommended to set this to true for servers that do not allow things such as setting game rules through the GUI. | |||||||||
only spawn v1 villagers | bool | A hack that Mojang put in place to preserve backwards compatibility with old villagers. The his never actually read though, so it has no functionality. | |||||||||
persona disabled | bool | PersonaDisabled is true if persona skins are disabled for the current game session. | |||||||||
custom skins disabled | bool | CustomSkinsDisabled is true if custom skins are disabled for the current game session. | |||||||||
emote chat muted | bool | EmoteChatMuted specifies if players will be sent a chat message when using certain emotes. | |||||||||
game version | string | The version of the game from which Vanilla features will be used. The exact function of this field isn't clear. | |||||||||
limited world width | li32 | ||||||||||
limited world length | li32 | ||||||||||
is new nether | bool | ||||||||||
edu resource uri | EducationSharedResourceURI | ||||||||||
experimental gameplay override | bool | ||||||||||
chat restriction level | u8 enum
| ||||||||||
disable player interactions | bool | DisablePlayerInteractions is true if the client should ignore other players when interacting with the world. | |||||||||
server identifier | string | ||||||||||
world identifier | string | ||||||||||
scenario identifier | string | ||||||||||
level id | string | A base64 encoded world ID that is used to identify the world. | |||||||||
world name | string | The name of the world that the player is joining. Note that this field shows up above the player list for the rest of the game session, and cannot be changed. Setting the server name to this field is recommended. | |||||||||
premium world template id | string | A UUID specific to the premium world template that might have been used to generate the world. Servers should always fill out an empty String for this. | |||||||||
is trial | bool | Specifies if the world was a trial world, meaning features are limited and there is a time limit on the world. | |||||||||
movement authority | zigzag32 enum
| ||||||||||
rewind history size | zigzag32 | RewindHistorySize is the amount of history to keep at maximum if MovementType is packet.AuthoritativeMovementModeServerWithRewind. | |||||||||
server authoritative block breaking | bool | ServerAuthoritativeBlockBreaking specifies if block breaking should be sent through packet.PlayerAuthInput or not. This field is somewhat redundant as it is always enabled if MovementType is packet.AuthoritativeMovementModeServer or packet.AuthoritativeMovementModeServerWithRewind | |||||||||
current tick | li64 | The total time in ticks that has elapsed since the start of the world. | |||||||||
enchantment seed | zigzag32 | The seed used to seed the random used to produce enchantments in the enchantment table. Note that the exact correct random implementation must be used to produce the correct results both client- and server-side. | |||||||||
block properties | BlockProperties | BlockProperties is a list of all the custom blocks registered on the server. | |||||||||
itemstates | Itemstates | A list of all items with their legacy IDs which are available in the game. Failing to send any of the items that are in the game will crash mobile clients. | |||||||||
multiplayer correlation id | string | A unique ID specifying the multi-player session of the player. A random UUID should be filled out for this field. | |||||||||
server authoritative inventory | bool | ServerAuthoritativeInventory specifies if the server authoritative inventory system is enabled. This is a new system introduced in 1.16. Backwards compatibility with the inventory transactions has to some extent been preserved, but will eventually be removed. | |||||||||
engine | string | The server's engine version, used for telemetry | |||||||||
property data | nbt | PropertyData contains properties that should be applied on the player. These properties are the same as the ones that are sent in the SyncActorProperty packet. | |||||||||
block pallette checksum | lu64 | A checksum to ensure block types between the server and client match | |||||||||
world template id | uuid | WorldTemplateID is a UUID that identifies the template that was used to generate the world. Servers that do not use a world based off of a template can set this to an empty UUID. | |||||||||
client side generation | bool | ClientSideGeneration is true if the client should use the features registered in the FeatureRegistry packet to generate terrain client-side to save on bandwidth. | |||||||||
block network ids are hashes | bool | UseBlockNetworkIDHashes is true if the client should use the hash of a block's name as its network ID rather than its index in the expected block palette. This is useful for servers that wish to support multiple protocol versions and custom blocks, but it will result in extra bytes being written for every block in a sub chunk palette. | |||||||||
server controlled sound | bool |
Field Name | Field Type | Notes |
uuid | uuid | UUID is the UUID of the player. It is the same UUID that the client sent in the Login packet at the start of the session. A player with this UUID must exist in the player list (built up using the Player List packet) for it to show up in-game. |
username | string | Username is the name of the player. This username is the username that will be set as the initial name tag of the player. |
runtime id | varint64 | The runtime ID of the player. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. |
platform chat id | string | An identifier only set for particular platforms when chatting (presumably only for Nintendo Switch). It is otherwise an empty string, and is used to decide which players are able to chat with each other. |
position | vec3f | Position is the position to spawn the player on. If the player is on a distance that the viewer cannot see it, the player will still show up if the viewer moves closer. |
velocity | vec3f | Velocity is the initial velocity the player spawns with. This velocity will initiate client side movement of the player. |
pitch | lf32 | Pitch is the vertical rotation of the player. Facing straight forward yields a pitch of 0. Pitch is measured in degrees. |
yaw | lf32 | Yaw is the horizontal rotation of the player. Yaw is also measured in degrees. |
head yaw | lf32 | HeadYaw is the same as Yaw, except that it applies specifically to the head of the player. A different value for HeadYaw than Yaw means that the player will have its head turned. |
held item | Item | HeldItem is the item that the player is holding. The item is shown to the viewer as soon as the player itself shows up. Needless to say that this field is rather pointless, as additional packets still must be sent for armour to show up. |
gamemode | GameMode | GameType is the game type of the player. If set to GameTypeSpectator, the player will not be shown to viewers. |
metadata | MetadataDictionary | EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in particular the way the player looks. Flags include ones such as 'on fire' and 'sprinting'. The metadata values are indexed by their property key. |
properties | EntityProperties | EntityProperties holds lists of entity properties that define specific attributes of an entity. As of v1.19.40, the vanilla server does not use these properties, however they are still supported by the protocol. |
unique id | li64 | The unique ID of the player. The unique ID is a value that remains consistent across different sessions of the same world, but most unoffical servers simply fill the runtime ID of the player out for this field. |
permission level | PermissionLevel | |
command permission | CommandPermissionLevel | |
abilities length | u8 | AbilityLayer represents the abilities of a specific layer, such as the base layer or the spectator layer. |
abilities array | AbilityLayers | |
links | Links | EntityLinks is a list of entity links that are currently active on the player. These links alter the way the player shows up when first spawned in terms of it shown as riding an entity. Setting these links is important for new viewers to see the player is riding another entity. |
device id | string | DeviceID is the device ID set in one of the files found in the storage of the device of the player. It may be changed freely, so it should not be relied on for anything. |
device os | DeviceOS | BuildPlatform is the build platform/device OS of the player that is about to be added, as it sent in the Login packet when joining. |
Field Name | Field Type | Notes |
unique id | zigzag64 | EntityUniqueID is the unique ID of the entity. The unique ID is a value that remains consistent across different sessions of the same world, but most servers simply fill the runtime ID of the entity out for |
runtime id | varint64 | EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. |
entity type | string | EntityType is the string entity type of the entity, for example 'minecraft:skeleton'. A list of these entities may be found online. |
position | vec3f | Position is the position to spawn the entity on. If the entity is on a distance that the player cannot see it, the entity will still show up if the player moves closer. |
velocity | vec3f | Velocity is the initial velocity the entity spawns with. This velocity will initiate client side movement of the entity. |
pitch | lf32 | Pitch is the vertical rotation of the entity. Facing straight forward yields a pitch of 0. Pitch is measured in degrees. |
yaw | lf32 | Yaw is the horizontal rotation of the entity. Yaw is also measured in degrees. |
head yaw | lf32 | HeadYaw is the same as Yaw, except that it applies specifically to the head of the entity. A different value for HeadYaw than Yaw means that the entity will have its head turned. |
body yaw | lf32 | BodyYaw is the same as Yaw, except that it applies specifically to the body of the entity. A different value for BodyYaw than HeadYaw means that the entity will have its body turned, although it is unclear what the difference between BodyYaw and Yaw is. |
attributes | EntityAttributes | Attributes is a slice of attributes that the entity has. It includes attributes such as its health, movement speed, etc. |
metadata | MetadataDictionary | EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in particular the way the entity looks. Flags include ones such as 'on fire' and 'sprinting'. The metadata values are indexed by their property key. |
properties | EntityProperties | EntityProperties holds lists of entity properties that define specific attributes of an entity. As of v1.19.40, the vanilla server does not use these properties, however they are still supported by the protocol. |
links | Links | EntityLinks is a list of entity links that are currently active on the entity. These links alter the way the entity shows up when first spawned in terms of it shown as riding an entity. Setting these links is important for new viewers to see the entity is riding another entity. |
Field Name | Field Type | Notes |
entity id self | zigzag64 |
Field Name | Field Type | Notes |
entity id self | zigzag64 | |
runtime entity id | varint64 | |
item | Item | |
position | vec3f | |
velocity | vec3f | |
metadata | MetadataDictionary | |
is from fishing | bool |
Field Name | Field Type | Notes |
runtime entity id | varint64 | |
target | varint |
MoveActorAbsolute is sent by the server to move an entity to an absolute position. It is typically used for movements where high accuracy isn't needed, such as for long range teleporting.
Field Name | Field Type | Notes |
runtime entity id | varint64 | EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. |
flags | u8 | Flags is a combination of flags that specify details of the movement. It is a combination of the flags above. |
position | vec3f | Position is the position to spawn the entity on. If the entity is on a distance that the player cannot see it, the entity will still show up if the player moves closer. |
rotation | Rotation | Rotation is a Vec3 holding the X, Y and Z rotation of the entity after the movement. This is a Vec3 for the reason that projectiles like arrows don't have yaw/pitch, but do have roll. |
MovePlayer is sent by players to send their movement to the server, and by the server to update the movement of player entities to other players.
Field Name | Field Type | Notes | ||||||||||||||||||||||||
runtime id | varint | EntityRuntimeID is the runtime ID of the player. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. | ||||||||||||||||||||||||
position | vec3f | Position is the position to spawn the player on. If the player is on a distance that the viewer cannot see it, the player will still show up if the viewer moves closer. | ||||||||||||||||||||||||
pitch | lf32 | Pitch is the vertical rotation of the player. Facing straight forward yields a pitch of 0. Pitch is measured in degrees. | ||||||||||||||||||||||||
yaw | lf32 | Yaw is the horizontal rotation of the player. Yaw is also measured in degrees | ||||||||||||||||||||||||
head yaw | lf32 | HeadYaw is the same as Yaw, except that it applies specifically to the head of the player. A different value for HeadYaw than Yaw means that the player will have its head turned | ||||||||||||||||||||||||
mode | u8 enum
| |||||||||||||||||||||||||
on ground | bool | OnGround specifies if the player is considered on the ground. Note that proxies or hacked clients could fake this to always be true, so it should not be taken for granted. | ||||||||||||||||||||||||
ridden runtime id | varint | RiddenEntityRuntimeID is the runtime ID of the entity that the player might currently be riding. If not riding, this should be left 0. | ||||||||||||||||||||||||
teleport if mode |
| |||||||||||||||||||||||||
tick | varint64 |
Field Name | Field Type | Notes |
jump strength | zigzag32 |
UpdateBlock is sent by the server to update a block client-side, without resending the entire chunk that the block is located in. It is particularly useful for small modifications like block breaking/placing.
Field Name | Field Type | Notes |
position | BlockCoordinates | Position is the block position at which a block is updated. |
block runtime id | varint | NewBlockRuntimeID is the runtime ID of the block that is placed at Position after sending the packet to the client. |
flags | UpdateBlockFlags | Flags is a combination of flags that specify the way the block is updated client-side. It is a combination of the flags above, but typically sending only the BlockUpdateNetwork flag is sufficient. |
layer | varint | Layer is the world layer on which the block is updated. For most blocks, this is the first layer, as that layer is the default layer to place blocks on, but for blocks inside of each other, this differs. |
Field Name | Field Type | Notes |
entity id self | zigzag64 | |
runtime entity id | varint64 | |
coordinates | vec3f | |
direction | zigzag32 | |
title | string |
TickSync is sent by the client and the server to maintain a synchronized, server-authoritative tick between the client and the server. The client sends this packet first, and the server should reply with another one of these packets, including the response time.
Field Name | Field Type | Notes |
request time | li64 | ClientRequestTimestamp is the timestamp on which the client sent this packet to the server. The server should fill out that same value when replying. The ClientRequestTimestamp is always 0 |
response time | li64 | ServerReceptionTimestamp is the timestamp on which the server received the packet sent by the client. When the packet is sent by the client, this value is 0. ServerReceptionTimestamp is generally the current tick of the server. It isn't an actual timestamp, as the field implies |
Field Name | Field Type | Notes |
sound id | u8 | |
position | vec3f | |
block id | zigzag32 | |
entity type | zigzag32 | |
is baby mob | bool | |
is global | bool |
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event | zigzag32 enum
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
position | vec3f | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
data | zigzag32 |
Field Name | Field Type | Notes | ||||||
position | BlockCoordinates | Position is the position of the block that an event occurred at. | ||||||
type | zigzag32 enum
| |||||||
data | zigzag32 | EventData holds event type specific data. For chests for example, opening the chest means the data must be 1 |
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
runtime entity id | varint64 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event id | u8 enum
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
data | zigzag32 |
Field Name | Field Type | Notes | |||||||||
runtime entity id | varint64 | ||||||||||
event id | u8 enum
| ||||||||||
effect id | zigzag32 | ||||||||||
amplifier | zigzag32 | ||||||||||
particles | bool | ||||||||||
duration | zigzag32 | ||||||||||
tick | lu64 |
Field Name | Field Type | Notes |
runtime entity id | varint64 | |
attributes | PlayerAttributes | |
tick | varint64 |
InventoryTransaction is a packet sent by the client. It essentially exists out of multiple sub-packets, each of which have something to do with the inventory in one way or another. Some of these sub-packets directly relate to the inventory, others relate to interaction with the world, that could potentially result in a change in the inventory.
Field Name | Field Type | Notes |
transaction | Transaction |
Field Name | Field Type | Notes |
runtime entity id | varint64 | |
item | Item | |
slot | u8 | |
selected slot | u8 | |
window id | WindowID |
Field Name | Field Type | Notes |
runtime entity id | varint64 | |
helmet | Item | |
chestplate | Item | |
leggings | Item | |
boots | Item | |
body | Item |
Interact is sent by the client when it interacts with another entity in some way. It used to be used for normal entity and block interaction, but this is no longer the case now.
Field Name | Field Type | Notes | ||||||||||||
action id | u8 enum
| |||||||||||||
target entity id | varint64 | TargetEntityRuntimeID is the runtime ID of the entity that the player interacted with. This is empty for the InteractActionOpenInventory action type. | ||||||||||||
position if action id |
|
Field Name | Field Type | Notes |
x | zigzag32 | |
y | zigzag32 | |
z | zigzag32 | |
add user data | bool | |
selected slot | u8 |
Field Name | Field Type | Notes |
runtime entity id | lu64 | |
selected slot | u8 | |
with data | bool | WithData is true if the pick request requests the entity metadata. |
PlayerAction is sent by the client when it executes any action, for example starting to sprint, swim, starting the breaking of a block, dropping an item, etc.
Field Name | Field Type | Notes |
runtime entity id | varint64 | EntityRuntimeID is the runtime ID of the player. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. |
action | Action | ActionType is the ID of the action that was executed by the player. It is one of the constants that may be found above. |
position | BlockCoordinates | BlockPosition is the position of the target block, if the action with the ActionType set concerned a block. If that is not the case, the block position will be zero. |
result position | BlockCoordinates | ResultPosition is the position of the action's result. When a UseItemOn action is sent, this is the position of the block clicked, but when a block is placed, this is the position at which the block will be placed. |
face | zigzag32 | BlockFace is the face of the target block that was touched. If the action with the ActionType set concerned a block. If not, the face is always 0. |
Field Name | Field Type | Notes |
cause | zigzag32 | |
damage | zigzag32 | |
armor slots | zigzag64 |
Field Name | Field Type | Notes |
runtime entity id | varint64 | |
metadata | MetadataDictionary | |
properties | EntityProperties | EntityProperties holds lists of entity properties that define specific attributes of an entity. As of v1.19.40, the vanilla server does not use these properties, however they are still supported by the protocol. |
tick | varint64 |
SetActorMotion is sent by the server to change the client-side velocity of an entity. It is usually used in combination with server-side movement calculation.
Field Name | Field Type | Notes |
runtime entity id | varint64 | EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. |
velocity | vec3f | Velocity is the new velocity the entity gets. This velocity will initiate the client-side movement of the entity. |
tick | varint64 |
SetActorLink is sent by the server to initiate an entity link client-side, meaning one entity will start riding another.
Field Name | Field Type | Notes |
link | Link |
Field Name | Field Type | Notes |
health | zigzag32 |
Field Name | Field Type | Notes | ||||||
spawn type | zigzag32 enum
| |||||||
player position | BlockCoordinates | |||||||
dimension | zigzag32 | |||||||
world position | BlockCoordinates |
Field Name | Field Type | Notes | ||||||||||||||||||||||||
action id | zigzag32 enum
| |||||||||||||||||||||||||
runtime entity id | varint64 | |||||||||||||||||||||||||
🔁 if action id |
|
Field Name | Field Type | Notes |
position | vec3f | |
state | u8 | |
runtime entity id | varint64 |
ContainerOpen is sent by the server to open a container client-side. This container must be physically present in the world, for the packet to have any effect. Unlike Java Edition, Bedrock Edition requires that chests for example must be present and in range to open its inventory.
Field Name | Field Type | Notes |
window id | WindowID | WindowID is the ID representing the window that is being opened. It may be used later to close the container using a ContainerClose packet. |
window type | WindowType | ContainerType is the type ID of the container that is being opened when opening the container at the position of the packet. It depends on the block/entity, and could, for example, be the window type of a chest or a hopper, but also a horse inventory. |
coordinates | BlockCoordinates | ContainerPosition is the position of the container opened. The position must point to a block entity that actually has a container. If that is not the case, the window will not be opened and the packet will be ignored, if a valid ContainerEntityUniqueID has not also been provided. |
runtime entity id | zigzag64 | ContainerEntityUniqueID is the unique ID of the entity container that was opened. It is only used if the ContainerType is one that points to an entity, for example a horse. |
ContainerClose is sent by the server to close a container the player currently has opened, which was opened using the ContainerOpen packet, or by the client to tell the server it closed a particular container, such as the crafting grid.
Field Name | Field Type | Notes |
window id | WindowID | WindowID is the ID representing the window of the container that should be closed. It must be equal to the one sent in the ContainerOpen packet to close the designated window. |
window type | WindowType | ContainerType is the type ID of the container that is being opened when opening the container at the position of the packet. It depends on the block/entity, and could, for example, be the window type of a chest or a hopper, but also a horse inventory. |
server | bool | ServerSide determines whether or not the container was force-closed by the server. If this value is not set correctly, the client may ignore the packet and respond with a PacketViolationWarning. |
PlayerHotBar is sent by the server to the client. It used to be used to link hot bar slots of the player to actual slots in the inventory, but as of 1.2, this was changed and hot bar slots are no longer a free floating part of the inventory. Since 1.2, the packet has been re-purposed, but its new functionality is not clear.
Field Name | Field Type | Notes |
selected slot | varint | |
window id | WindowID | |
select slot | bool |
InventoryContent is sent by the server to update the full content of a particular inventory. It is usually sent for the main inventory of the player, but also works for other inventories that are currently opened by the player.
Field Name | Field Type | Notes |
window id | WindowIDVarint | WindowID is the ID that identifies one of the windows that the client currently has opened, or one of the consistent windows such as the main inventory. |
input | ItemStacks | Content is the new content of the inventory. The length of this slice must be equal to the full size of the inventory window updated. |
dynamic window id | varint |
InventorySlot is sent by the server to update a single slot in one of the inventory windows that the client currently has opened. Usually this is the main inventory, but it may also be the off hand or, for example, a chest inventory.
Field Name | Field Type | Notes |
window id | WindowIDVarint | WindowID is the ID of the window that the packet modifies. It must point to one of the windows that the client currently has opened. |
slot | varint | Slot is the index of the slot that the packet modifies. The new item will be set to the slot at this index. |
dynamic window id | varint | |
item | Item | NewItem is the item to be put in the slot at Slot. It will overwrite any item that may currently be present in that slot. |
ContainerSetData is sent by the server to update specific data of a single container, meaning a block such as a furnace or a brewing stand. This data is usually used by the client to display certain features client-side.
Field Name | Field Type | Notes |
window id | WindowID | WindowID is the ID of the window that should have its data set. The player must have a window open with the window ID passed, or nothing will happen. |
property | zigzag32 | Key is the key of the property. It is one of the constants that can be found above. Multiple properties share the same key, but the functionality depends on the type of the container that the data is set to. IF FURNACE: 0: furnacetickcount 1: furnacelittime 2: furnacelitduration 3: furnacestoredxp 4: furnacefuelaux IF BREWING STAND: 0: brewtime 1: brewfuelamount 2: brewfuel_total |
value | zigzag32 | Value is the value of the property. Its use differs per property. |
Field Name | Field Type | Notes |
recipes | Recipes | |
potion type recipes | PotionTypeRecipes | PotionContainerChangeRecipes is a list of all recipes to convert a potion from one type to another, such as from a drinkable potion to a splash potion, or from a splash potion to a lingering potion. |
potion container recipes | PotionContainerChangeRecipes | |
material reducers length | varint | MaterialReducers is a list of all material reducers which is used in education edition chemistry. |
material reducers array | MaterialReducer | |
clear recipes | bool | ClearRecipes indicates if all recipes currently active on the client should be cleaned. Doing this means that the client will have no recipes active by itself: Any CraftingData packets previously sent will also be discarded, and only the recipes in this CraftingData packet will be used. |
CraftingEvent is sent by the client when it crafts a particular item. Note that this packet may be fully ignored, as the InventoryTransaction packet provides all the information required.
Field Name | Field Type | Notes | |||||||||
window id | WindowID | WindowID is the ID representing the window that the player crafted in. | |||||||||
recipe type | zigzag32 enum
| ||||||||||
recipe id | uuid | RecipeUUID is the UUID of the recipe that was crafted. It points to the UUID of the recipe that was sent earlier in the CraftingData packet. | |||||||||
input length | varint | Input is a list of items that the player put into the recipe so that it could create the Output items. These items are consumed in the process. | |||||||||
input array | Item | ||||||||||
result length | varint | Output is a list of items that were obtained as a result of crafting the recipe. | |||||||||
result array | Item |
GUIDataPickItem is sent by the server to make the client 'select' a hot bar slot. It currently appears to be broken however, and does not actually set the selected slot to the hot bar slot set in the packet.
Field Name | Field Type | Notes |
item name | string | ItemName is the name of the item that shows up in the top part of the popup that shows up when selecting an item. It is shown as if an item was selected by the player itself. |
item effects | string | ItemEffects is the line under the ItemName, where the effects of the item are usually situated. |
hotbar slot | li32 | HotBarSlot is the hot bar slot to be selected/picked. This does not currently work, so it does not matter what number this is. |
AdventureSettings is sent by the server to update game-play related features, in particular permissions to access these features for the client. It includes allowing the player to fly, build and mine, and attack entities. Most of these flags should be checked server-side instead of using this packet only. The client may also send this packet to the server when it updates one of these settings through the in-game settings interface. The server should verify if the player actually has permission to update those settings.
Field Name | Field Type | Notes |
flags | AdventureFlags | Flags is a set of flags that specify certain properties of the player, such as whether or not it can fly and/or move through blocks. It is one of the AdventureFlag constants above. |
command permission | CommandPermissionLevelVarint | CommandPermissionLevel is a permission level that specifies the kind of commands that the player is allowed to use. |
action permissions | ActionPermissions | ActionPermissions is, much like Flags, a set of flags that specify actions that the player is allowed to undertake, such as whether it is allowed to edit blocks, open doors etc. It is a combination of the ActionPermission constants above. |
permission level | PermissionLevel | PermissionLevel is the permission level of the player as it shows up in the player list built up using the PlayerList packet. It is one of the PermissionLevel constants above. |
custom stored permissions | varint | Custom permissions |
user id | li64 | PlayerUniqueID is a unique identifier of the player. It appears it is not required to fill this field out with a correct value. Simply writing 0 seems to work. |
Field Name | Field Type | Notes |
position | BlockCoordinates | |
nbt | nbt |
Field Name | Field Type | Notes |
motion x | lf32 | |
motion z | lf32 | |
jumping | bool | |
sneaking | bool |
LevelChunk is sent by the server to provide the client with a chunk of a world data (16xYx16 blocks). Typically a certain amount of chunks is sent to the client before sending it the spawn PlayStatus packet, so that the client spawns in a loaded world.
Field Name | Field Type | Notes | |||||||||
x | zigzag32 | ChunkX is the X coordinate of the chunk sent. (To translate a block's X to a chunk's X: x >> 4) | |||||||||
z | zigzag32 | ChunkZ is the Z coordinate of the chunk sent. (To translate a block's Z to a chunk's Z: z >> 4) | |||||||||
dimension | zigzag32 | ||||||||||
sub chunk count | varint | SubChunkCount is the amount of sub chunks that are part of the chunk sent. Depending on if the cache is enabled, a list of blob hashes will be sent, or, if disabled, the sub chunk data. On newer versions, if this is a negative value it indicates to use the Subchunk Polling mechanism | |||||||||
highest subchunk count if sub chunk count |
| ||||||||||
cache enabled | bool | CacheEnabled specifies if the client blob cache should be enabled. This system is based on hashes of blobs which are consistent and saved by the client in combination with that blob, so that the server does not have to send the same chunk multiple times. If the client does not yet have a blob with the hash sent, it will send a ClientCacheBlobStatus packet containing the hashes is does not have the data of. | |||||||||
blobs if cache enabled |
| ||||||||||
payload | ByteArray | RawPayload is a serialised string of chunk data. The data held depends on if CacheEnabled is set to true. If set to false, the payload is composed of multiple sub-chunks, each of which carry a version which indicates the way they are serialised, followed by biomes, border blocks and tile entities. If CacheEnabled is true, the payload consists out of the border blocks and tile entities only. |
Field Name | Field Type | Notes |
enabled | bool |
Field Name | Field Type | Notes |
difficulty | varint |
Field Name | Field Type | Notes |
dimension | zigzag32 | |
position | vec3f | |
respawn | bool | |
loading screen id optional | lu32 |
SetPlayerGameType is sent by the server to update the game type (game mode) of the player
Field Name | Field Type | Notes |
gamemode | GameMode | The new gamemode for the player. Some of these game types require additional flags to be set in an AdventureSettings packet for the game mode to obtain its full functionality. |
Field Name | Field Type | Notes |
records | PlayerRecords |
Field Name | Field Type | Notes | ||||||||||||
event type | lu16 enum
|
Event is sent by the server to send an event with additional data. It is typically sent to the client for telemetry reasons, much like the SimpleEvent packet.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
runtime id | varint64 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event type | zigzag32 enum
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use player id | u8 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
event data | restBuffer |
Field Name | Field Type | Notes |
position | vec3f | |
count | zigzag32 |
ClientBoundMapItemData is sent by the server to the client to update the data of a map shown to the client. It is sent with a combination of flags that specify what data is updated. The ClientBoundMapItemData packet may be used to update specific parts of the map only. It is not required to send the entire map each time when updating one part.
Field Name | Field Type | Notes | |||||||||||||||||||||
map id | zigzag64 | MapID is the unique identifier that represents the map that is updated over network. It remains consistent across sessions. | |||||||||||||||||||||
update flags | UpdateMapFlags | UpdateFlags is a combination of flags found above that indicate what parts of the map should be updated client-side. | |||||||||||||||||||||
dimension | u8 | Dimension is the dimension of the map that should be updated, for example the overworld (0), the nether (1) or the end (2). | |||||||||||||||||||||
locked | bool | LockedMap specifies if the map that was updated was a locked map, which may be done using a cartography table. | |||||||||||||||||||||
origin | vec3i | Origin is the center position of the map being updated. | |||||||||||||||||||||
included in if update flags.initialisation |
| ||||||||||||||||||||||
scale if update flags.initialisation || update flags.decoration || update flags.texture |
| ||||||||||||||||||||||
tracked if update flags.decoration |
| ||||||||||||||||||||||
texture if update flags.texture |
|
Field Name | Field Type | Notes | ||||||
map id | zigzag64 | |||||||
client pixels length | lu32 | ClientPixels is a map of pixels sent from the client to notify the server about the pixels that it isn't aware of. | ||||||
client pixels array |
|
RequestChunkRadius is sent by the client to the server to update the server on the chunk view radius that it has set in the settings. The server may respond with a ChunkRadiusUpdated packet with either the chunk radius requested, or a different chunk radius if the server chooses so.
Field Name | Field Type | Notes |
chunk radius | zigzag32 | ChunkRadius is the requested chunk radius. This value is always the value set in the settings of the player. |
max radius | u8 |
ChunkRadiusUpdated is sent by the server in response to a RequestChunkRadius packet. It defines the chunk radius that the server allows the client to have. This may be lower than the chunk radius requested by the client in the RequestChunkRadius packet.
Field Name | Field Type | Notes |
chunk radius | zigzag32 | ChunkRadius is the final chunk radius that the client will adapt when it receives the packet. It does not have to be the same as the requested chunk radius. |
Field Name | Field Type | Notes |
rules | GameRules |
Camera is sent by the server to use an Education Edition camera on a player. It produces an image client-side.
Field Name | Field Type | Notes |
camera entity unique id | zigzag64 | CameraEntityUniqueID is the unique ID of the camera entity from which the picture was taken. |
target player unique id | zigzag64 | TargetPlayerUniqueID is the unique ID of the target player. The unique ID is a value that remains consistent across different sessions of the same world, but most servers simply fill the runtime ID of the player out for this field. |
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
boss entity id | zigzag64 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
type | varint enum
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
🔁 if type |
|
Field Name | Field Type | Notes |
runtime entity id | varint64 | |
status | zigzag32 |
This packet sends a list of commands to the client. Commands can have arguments, and some of those arguments can have 'enum' values, which are a list of possible values for the argument. The serialization is rather complex and involves palettes like chunks.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
values len | varint | The length of the enums for all the command parameters in this packet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
_enum_type | ["enum_size_based_on_values_len"] | Not read from stream: instead calculated from the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Length for enum values below is values len from above | Here all the enum values for all of the possible commands are stored to one array palette | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enum values array | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chained subcommand values length | varint | chainedsubcommandvalues is a slice of all chained subcommand names. chainedsubcommandvalues generally should contain each possible value only once. chained_subcommands are built by pointing to entries in this slice. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chained subcommand values array | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
suffixes length | varint | Integer parameters may sometimes have a prefix, such as the XP command:
/xp | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
suffixes array | string | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enums length | varint | The list of enum objects | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enums array |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chained subcommands length | varint | chained_subcommands is a slice of all subcommands that are followed by a chained command. An example usage of this is /execute which allows you to run another command as another entity or at a different position etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chained subcommands array |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
command data length | varint | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
command data array |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dynamic enums length | varint | There are two types of enums: static enums which cannot be changed after sending AvaliableCommands, (unless you resend the whole packet) and 'soft' or 'dynamic' enums like below which is an array that can be updated with the UpdateSoftEnum packet | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dynamic enums array |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enum constraints length | varint | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
enum constraints array |
|
ParamOptionCollapseEnum specifies if the enum (only if the Type is actually an enum type. If not,
setting this to true has no effect) should be collapsed. This means that the options of the enum are
never shown in the actual usage of the command, but only as auto-completion, like it automatically does
with enums that have a big amount of options. To illustrate, it can make
Field Name | Field Type | Notes |
command | string | CommandLine is the raw entered command line. The client does no parsing of the command line by itself (unlike it did in the early stages), but lets the server do that. |
origin | CommandOrigin | Origin holds information about the command sender that will be returnd back in the command response |
internal | bool | Internal specifies if the command request internal. Setting it to false seems to work and the usage of this field is not known. |
version | varint | Specifies the version of the command to run, relative to the current Minecraft version. Should be set to 52 as of 1.19.62 |
CommandBlockUpdate is sent by the client to update a command block at a specific position. The command block may be either a physical block or an entity.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||
is block | bool | Block specifies if the command block updated was an actual physical block. If false, the command block is in a minecart and has an entity runtime ID instead. | ||||||||||||||||||||||||||||||
🔁 if is block |
| |||||||||||||||||||||||||||||||
command | string | Command is the command currently entered in the command block. This is the command that is executed when the command block is activated. | ||||||||||||||||||||||||||||||
last output | string | LastOutput is the output of the last command executed by the command block. It may be left empty to show simply no output at all, in combination with setting ShouldTrackOutput to false. | ||||||||||||||||||||||||||||||
name | string | Name is the name of the command block updated. If not empty, it will show this name hovering above the command block when hovering over the block with the cursor. | ||||||||||||||||||||||||||||||
should track output | bool | ShouldTrackOutput specifies if the command block tracks output. If set to false, the output box won't be shown within the command block. | ||||||||||||||||||||||||||||||
tick delay | li32 | TickDelay is the delay in ticks between executions of a command block, if it is a repeating command block. | ||||||||||||||||||||||||||||||
execute on first tick | bool | ExecuteOnFirstTick specifies if the command block should execute on the first tick, AKA as soon as the command block is enabled. |
Field Name | Field Type | Notes | ||||||||||||
origin | CommandOrigin | CommandOrigin is the data specifying the origin of the command. In other words, the source that the command request was from, such as the player itself or a websocket server. The client forwards the messages in this packet to the right origin, depending on what is sent here. | ||||||||||||
output type | i8 enum
| |||||||||||||
success count | varint | SuccessCount is the amount of times that a command was executed successfully as a result of the command that was requested. For servers, this is usually a rather meaningless fields, but for vanilla, this is applicable for commands created with Functions. | ||||||||||||
output length | varint | OutputMessages is a list of all output messages that should be sent to the player. Whether they are shown or not, depends on the type of the messages. | ||||||||||||
output array |
| |||||||||||||
data set if output type |
|
UpdateTrade is sent by the server to update the trades offered by a villager to a player. It is sent at the moment that a player interacts with a villager.
Field Name | Field Type | Notes |
window id | WindowID | WindowID is the ID that identifies the trading window that the client currently has opened. |
window type | WindowType | WindowType is an identifier specifying the type of the window opened. In vanilla, it appears this is always filled out with 15. |
size | varint | Size is the amount of trading options that the villager has. |
trade tier | varint | TradeTier is the tier of the villager that the player is trading with. The tier starts at 0 with a first two offers being available, after which two additional offers are unlocked each time the tier becomes one higher. |
villager unique id | varint64 | VillagerUniqueID is the unique ID of the villager entity that the player is trading with. The TradeTier sent above applies to this villager. |
entity unique id | varint64 | EntityUniqueID is the unique ID of the entity (usually a player) for which the trades are updated. The updated trades may apply only to this entity. |
display name | string | DisplayName is the name displayed at the top of the trading UI. It is usually used to represent the profession of the villager in the UI. |
new trading ui | bool | NewTradeUI specifies if the villager should be using the new trade UI (The one added in 1.11.) rather than the old one. This should usually be set to true. |
economic trades | bool | Trading based on Minecraft economy - specifies if the prices of the villager's offers are modified by an increase in demand for the item. (A mechanic added in 1.11.) Buying more of the same item will increase the price of that particular item. https://minecraft.wiki/w/Trading#Economics |
offers | nbt | NBT serialised compound of offers that the villager has. |
UpdateEquip is sent by the server to the client upon opening a horse inventory. It is used to set the content of the inventory and specify additional properties, such as the items that are allowed to be put in slots of the inventory.
Field Name | Field Type | Notes |
window id | WindowID | WindowID is the identifier associated with the window that the UpdateEquip packet concerns. It is the ID sent for the horse inventory that was opened before this packet was sent. |
window type | WindowType | WindowType is the type of the window that was opened. Generally, this is the type of a horse inventory, as the packet is specifically made for that. |
size | u8 | Size is the size of the horse inventory that should be opened. A bigger size does, in fact, change the amount of slots displayed. |
entity id | zigzag64 | EntityUniqueID is the unique ID of the entity whose equipment was 'updated' to the player. It is typically the horse entity that had its inventory opened. |
inventory | nbt |
|
ResourcePackDataInfo is sent by the server to the client to inform the client about the data contained in one of the resource packs that are about to be sent.
Field Name | Field Type | Notes | ||||||||||||||||||||||||
pack id | string | UUID is the unique ID of the resource pack that the info concerns. | ||||||||||||||||||||||||
max chunk size | lu32 | DataChunkSize is the maximum size in bytes of the chunks in which the total size of the resource pack to be sent will be divided. A size of 1MB (1024*1024) means that a resource pack of 15.5MB will be split into 16 data chunks. | ||||||||||||||||||||||||
chunk count | lu32 | ChunkCount is the total amount of data chunks that the sent resource pack will exist out of. It is the total size of the resource pack divided by the DataChunkSize field. The client doesn't actually seem to use this field. Rather, it divides the size by the chunk size to calculate it itself. | ||||||||||||||||||||||||
size | lu64 | Size is the total size in bytes that the resource pack occupies. This is the size of the compressed archive (zip) of the resource pack. | ||||||||||||||||||||||||
hash | ByteArray | Hash is a SHA256 hash of the content of the resource pack. | ||||||||||||||||||||||||
is premium | bool | Premium specifies if the resource pack was a premium resource pack, meaning it was bought from the Minecraft store. | ||||||||||||||||||||||||
pack type | u8 enum
|
ResourcePackChunkData is sent to the client so that the client can download the resource pack. Each packet holds a chunk of the compressed resource pack, of which the size is defined in the ResourcePackDataInfo packet sent before.
Field Name | Field Type | Notes |
pack id | string | UUID is the unique ID of the resource pack that the chunk of data is taken out of. |
chunk index | lu32 | ChunkIndex is the current chunk index of the chunk. It is a number that starts at 0 and is incremented for each resource pack data chunk sent to the client. |
progress | lu64 | DataOffset is the current progress in bytes or offset in the data that the resource pack data chunk is taken from. |
payload | ByteArray | RawPayload is a byte slice containing a chunk of data from the resource pack. It must be of the same size or less than the DataChunkSize set in the ResourcePackDataInfo packet. |
ResourcePackChunkRequest is sent by the client to request a chunk of data from a particular resource pack, that it has obtained information about in a ResourcePackDataInfo packet.
Field Name | Field Type | Notes |
pack id | string | UUID is the unique ID of the resource pack that the chunk of data is requested from. |
chunk index | lu32 | ChunkIndex is the requested chunk index of the chunk. It is a number that starts at 0 and is incremented for each resource pack data chunk requested. |
Field Name | Field Type | Notes |
server address | string | |
port | lu16 |
Field Name | Field Type | Notes |
name | string | |
coordinates | BlockCoordinates | |
volume | lf32 | |
pitch | lf32 |
Field Name | Field Type | Notes |
name | string | |
stop all | bool | |
stop music legacy | bool |
SetTitle is sent by the server to make a title, subtitle or action bar shown to a player. It has several fields that allow setting the duration of the titles.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||
type | zigzag32 enum
| ||||||||||||||||||||||||||||
text | string | Text is the text of the title, which has a different meaning depending on the ActionType that the packet has. The text is the text of a title, subtitle or action bar, depending on the type set. | |||||||||||||||||||||||||||
fade in time | zigzag32 | FadeInDuration is the duration that the title takes to fade in on the screen of the player. It is measured in 20ths of a second (AKA in ticks). | |||||||||||||||||||||||||||
stay time | zigzag32 | RemainDuration is the duration that the title remains on the screen of the player. It is measured in 20ths of a second (AKA in ticks). | |||||||||||||||||||||||||||
fade out time | zigzag32 | FadeOutDuration is the duration that the title takes to fade out of the screen of the player. It is measured in 20ths of a second (AKA in ticks). | |||||||||||||||||||||||||||
xuid | string | XUID is the XBOX Live user ID of the player, which will remain consistent as long as the player is logged in with the XBOX Live account. It is empty if the user is not logged into its XBL account. | |||||||||||||||||||||||||||
platform online id | string | PlatformOnlineID is either a uint64 or an empty string. | |||||||||||||||||||||||||||
filtered message | string |
Field Name | Field Type | Notes |
behaviortree | string |
StructureBlockUpdate is sent by the client when it updates a structure block using the in-game UI. The data it contains depends on the type of structure block that it is. In Minecraft Bedrock Edition v1.11, there is only the Export structure block type, but in v1.13 the ones present in Java Edition will, according to the wiki, be added too.
Field Name | Field Type | Notes |
position | BlockCoordinates | Position is the position of the structure block that is updated. |
structure name | string | StructureName is the name of the structure that was set in the structure block's UI. This is the name used to export the structure to a file. |
data field | string | DataField is the name of a function to run, usually used during natural generation. A description can be found here: https://minecraft.wiki/w/Structure_Block#Data. |
include players | bool | IncludePlayers specifies if the 'Include Players' toggle has been enabled, meaning players are also exported by the structure block. |
show bounding box | bool | ShowBoundingBox specifies if the structure block should have its bounds outlined. A thin line will encapsulate the bounds of the structure if set to true. |
structure block type | zigzag32 | StructureBlockType is the type of the structure block updated. A list of structure block types that will be used can be found in the constants above. |
settings | StructureBlockSettings | Settings is a struct of settings that should be used for exporting the structure. These settings are identical to the last sent in the StructureBlockUpdate packet by the client. |
redstone save mode | zigzag32 | RedstoneSaveMode is the mode that should be used to save the structure when used with redstone. In Java Edition, this is always stored in memory, but in Bedrock Edition it can be stored either to disk or memory. See the constants above for the options. |
should trigger | bool | ShouldTrigger specifies if the structure block should be triggered immediately after this packet reaches the server. |
water logged | bool | Waterlogged specifies if the structure block is waterlogged at the time of the packet being sent. |
ShowStoreOffer is sent by the server to show a Marketplace store offer to a player. It opens a window client-side that displays the item. The ShowStoreOffer packet only works on the partnered servers: Servers that are not partnered will not have a store buttons show up in the in-game pause menu and will, as a result, not be able to open store offers on the client side. Sending the packet does therefore not work when using a proxy that is not connected to with the domain of one of the partnered servers.
Field Name | Field Type | Notes | |||||||||
offer id | string | OfferID is a string that identifies the offer for which a window should be opened. While typically a UUID, the ID could be anything. | |||||||||
redirect type | u8 enum
|
PurchaseReceipt is sent by the client to the server to notify the server it purchased an item from the Marketplace store that was offered by the server. The packet is only used for partnered servers.
Field Name | Field Type | Notes |
receipts length | varint | Receipts is a list of receipts, or proofs of purchases, for the offers that have been purchased by the player. |
receipts array | string |
Field Name | Field Type | Notes |
uuid | uuid | |
skin | Skin | |
skin name | string | |
old skin name | string | |
is verified | bool |
SubClientLogin is sent when a sub-client joins the server while another client is already connected to it. The packet is sent as a result of split-screen game play, and allows up to four players to play using the same network connection. After an initial Login packet from the 'main' client, each sub-client that connects sends a SubClientLogin to request their own login.
Field Name | Field Type | Notes |
tokens | ["encapsulated", { "lengthType": "varint", "type": "LoginTokens" }] | ConnectionRequest is a string containing information about the player and JWTs that may be used to verify if the player is connected to XBOX Live. The connection request also contains the necessary client public key to initiate encryption. The ConnectionRequest in this packet is identical to the one found in the Login packet. |
AutomationClientConnect is used to make the client connect to a websocket server. This websocket server has the ability to execute commands on the behalf of the client and it can listen for certain events fired by the client.
Field Name | Field Type | Notes |
server | string | ServerURI is the URI to make the client connect to. It can be, for example, 'localhost:8000/ws' to connect to a websocket server on the localhost at port 8000. |
SetLastHurtBy is sent by the server to let the client know what entity type it was last hurt by. At this moment, the packet is useless and should not be used. There is no behaviour that depends on if this packet is sent or not.
Field Name | Field Type | Notes |
entity type | varint |
BookEdit is sent by the client when it edits a book. It is sent each time a modification was made and the player stops its typing 'session', rather than simply after closing the book.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||
type | u8 enum
| ||||||||||||||||||||||||||||||||||||||||
slot | u8 | ||||||||||||||||||||||||||||||||||||||||
🔁 if type |
|
NPCRequest is sent by the client when it interacts with an NPC. The packet is specifically made for Education Edition, where NPCs are available to use.
Field Name | Field Type | Notes | |||||||||||||||||||||
runtime entity id | varint64 | EntityRuntimeID is the runtime ID of the NPC entity that the player interacted with. It is the same as sent by the server when spawning the entity. | |||||||||||||||||||||
request type | u8 enum
| ||||||||||||||||||||||
command | string | CommandString is the command string set in the NPC. It may consist of multiple commands, depending on what the player set in it. | |||||||||||||||||||||
action type | u8 enum
| ||||||||||||||||||||||
scene name | string | SceneName is the name of the scene. |
PhotoTransfer is sent by the server to transfer a photo (image) file to the client. It is typically used to transfer photos so that the client can display it in a portfolio in Education Edition. While previously usable in the default Bedrock Edition, the displaying of photos in books was disabled and the packet now has little use anymore.
Field Name | Field Type | Notes |
image name | string | PhotoName is the name of the photo to transfer. It is the exact file name that the client will download the photo as, including the extension of the file. |
image data | string | PhotoData is the raw data of the photo image. The format of this data may vary: Formats such as JPEG or PNG work, as long as PhotoName has the correct extension. |
book id | string | BookID is the ID of the book that the photo is associated with. If the PhotoName in a book with this ID is set to PhotoName, it will display the photo (provided Education Edition is used). The photo image is downloaded to a sub-folder with this book ID. |
photo type | u8 | PhotoType is one of the three photo types above. |
source type | u8 | SourceType is the source photo type. It is one of the three photo types above. |
owner entity unique id | li64 | OwnerEntityUniqueID is the entity unique ID of the photo's owner. |
new photo name | string | NewPhotoName is the new name of the photo. |
ModalFormRequest is sent by the server to make the client open a form. This form may be either a modal form which has two options, a menu form for a selection of options and a custom form for properties.
Field Name | Field Type | Notes |
form id | varint | FormID is an ID used to identify the form. The ID is saved by the client and sent back when the player submits the form, so that the server can identify which form was submitted. |
data | string | FormData is a JSON encoded object of form data. The content of the object differs, depending on the type of the form sent, which is also set in the JSON. |
ModalFormResponse is sent by the client in response to a ModalFormRequest, after the player has submitted the form sent. It contains the options/properties selected by the player, or a JSON encoded 'null' if the form was closed by clicking the X at the top right corner of the form.
Field Name | Field Type | Notes | ||||||||||||
form id | varint | FormID is the form ID of the form the client has responded to. It is the same as the ID sent in the ModalFormRequest, and may be used to identify which form was submitted. | ||||||||||||
has response data | bool | HasResponseData is true if the client provided response data. | ||||||||||||
data if has response data |
| |||||||||||||
has cancel reason | bool | HasCancelReason is true if the client provided a reason for the form being cancelled. | ||||||||||||
🔁 if has cancel reason |
|
ServerSettingsRequest is sent by the client to request the settings specific to the server. These settings are shown in a separate tab client-side, and have the same structure as a custom form. ServerSettingsRequest has no fields.
Field Name | Field Type | Notes |
ServerSettingsResponse is optionally sent by the server in response to a ServerSettingsRequest from the client. It is structured the same as a ModalFormRequest packet, and if filled out correctly, will show a specific tab for the server in the settings of the client. A ModalFormResponse packet is sent by the client in response to a ServerSettingsResponse, when the client fills out the settings and closes the settings again.
Field Name | Field Type | Notes |
form id | varint | FormID is an ID used to identify the form. The ID is saved by the client and sent back when the player submits the form, so that the server can identify which form was submitted. |
data | string | FormData is a JSON encoded object of form data. The content of the object differs, depending on the type of the form sent, which is also set in the JSON. |
ShowProfile is sent by the server to show the XBOX Live profile of one player to another.
Field Name | Field Type | Notes |
xuid | string | XUID is the XBOX Live User ID of the player whose profile should be shown to the player. If it is not a valid XUID, the client ignores the packet. |
SetDefaultGameType is sent by the client when it toggles the default game type in the settings UI, and is sent by the server when it actually changes the default game type, resulting in the toggle being changed in the settings UI.
Field Name | Field Type | Notes |
gamemode | GameMode | GameType is the new game type that is set. When sent by the client, this is the requested new default game type. |
RemoveObjective is sent by the server to remove a scoreboard objective. It is used to stop showing a scoreboard to a player.
Field Name | Field Type | Notes |
objective name | string | ObjectiveName is the name of the objective that the scoreboard currently active has. This name must be identical to the one sent in the SetDisplayObjective packet. |
SetDisplayObjective is sent by the server to display an object as a scoreboard to the player. Once sent, it should be followed up by a SetScore packet to set the lines of the packet.
Field Name | Field Type | Notes |
display slot | string | DisplaySlot is the slot in which the scoreboard should be displayed. Available options can be found in the constants above. |
objective name | string | ObjectiveName is the name of the objective that the scoreboard displays. Filling out a random unique value for this field works: It is not displayed in the scoreboard. |
display name | string | DisplayName is the name, or title, that is displayed at the top of the scoreboard. |
criteria name | string | CriteriaName is the name of the criteria that need to be fulfilled in order for the score to be increased. This can be any kind of string and does not show up client-side. |
sort order | zigzag32 | SortOrder is the order in which entries on the scoreboard should be sorted. It is one of the constants that may be found above. |
SetScore is sent by the server to send the contents of a scoreboard to the player. It may be used to either add, remove or edit entries on the scoreboard.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||
action | u8 enum
| ||||||||||||||||||||||||||||||||||||||||
entries length | varint | ||||||||||||||||||||||||||||||||||||||||
entries array |
|
LabTable is sent by the client to let the server know it started a chemical reaction in Education Edition, and is sent by the server to other clients to show the effects. The packet is only functional if Education features are enabled.
Field Name | Field Type | Notes | |||||||||
action type | u8 enum
| ||||||||||
position | vec3i | Position is the position at which the lab table used was located. | |||||||||
reaction type | u8 | ReactionType is the type of the reaction that took place as a result of the items put into the lab table. The reaction type can be either that of an item or a particle, depending on whatever the result was of the reaction. |
UpdateBlockSynced is sent by the server to synchronise the falling of a falling block entity with the transitioning back and forth from and to a solid block. It is used to prevent the entity from flickering, and is used in places such as the pushing of blocks with pistons.
Field Name | Field Type | Notes |
position | BlockCoordinates | Position is the block position at which a block is updated. |
block runtime id | varint | NewBlockRuntimeID is the runtime ID of the block that is placed at Position after sending the packet to the client. |
flags | UpdateBlockFlags | Flags is a combination of flags that specify the way the block is updated client-side. It is a combination of the flags above, but typically sending only the BlockUpdateNetwork flag is sufficient. |
layer | varint | Layer is the world layer on which the block is updated. For most blocks, this is the first layer, as that layer is the default layer to place blocks on, but for blocks inside of each other, this differs. |
entity unique id | zigzag64 | EntityUniqueID is the unique ID of the falling block entity that the block transitions to or that the entity transitions from. Note that for both possible values for TransitionType, the EntityUniqueID should point to the falling block entity involved. |
transition type | varint enum |
TransitionType is the type of the transition that happened. It is either BlockToEntityTransition, when a block placed becomes a falling entity, or EntityToBlockTransition, when a falling entity hits the ground and becomes a solid block again. MoveActorDelta is sent by the server to move an entity. The packet is specifically optimised to save as much space as possible, by only writing non-zero fields. As of 1.16.100, this packet no longer actually contains any deltas.
Field Name | Field Type | Notes | |||
runtime entity id | varint64 | EntityRuntimeID is the runtime ID of the entity that is being moved. The packet works provided a non-player entity with this runtime ID is present. | |||
flags | DeltaMoveFlags | Flags is a list of flags that specify what data is in the packet. | |||
x if flags.has x |
| ||||
y if flags.has y |
| ||||
z if flags.has z |
| ||||
rot x if flags.has rot x |
| ||||
rot y if flags.has rot y |
| ||||
rot z if flags.has rot z |
|
SetScoreboardIdentity is sent by the server to change the identity type of one of the entries on a scoreboard. This is used to change, for example, an entry pointing to a player, to a fake player when it leaves the server, and to change it back to a real player when it joins again. In non-vanilla situations, the packet is quite useless.
Field Name | Field Type | Notes | ||||||||||||
action | i8 enum
| |||||||||||||
entries length | varint | Entries is a list of all entries in the packet. Each of these entries points to one of the entries on a scoreboard. Depending on ActionType, their identity will either be registered or cleared. | ||||||||||||
entries array |
|
SetLocalPlayerAsInitialised is sent by the client in response to a PlayStatus packet with the status set to spawn. The packet marks the moment at which the client is fully initialised and can receive any packet without discarding it.
Field Name | Field Type | Notes |
runtime entity id | varint64 | EntityRuntimeID is the entity runtime ID the player was assigned earlier in the login sequence in the StartGame packet. |
UpdateSoftEnum is sent by the server to update a soft enum, also known as a dynamic enum, previously sent in the AvailableCommands packet. It is sent whenever the enum should get new options or when some of its options should be removed. The UpdateSoftEnum packet will apply for enums that have been set in the AvailableCommands packet with the 'Dynamic' field of the CommandEnum set to true.
Field Name | Field Type | Notes | |||||||||
enum type | string | EnumType is the type of the enum. This type must be identical to the one set in the AvailableCommands packet, because the client uses this to recognise which enum to update. | |||||||||
options length | varint | Options is a list of options that should be updated. Depending on the ActionType field, either these options will be added to the enum, the enum options will be set to these options or all of these options will be removed from the enum. | |||||||||
options array | string | ||||||||||
action type | u8 enum
|
NetworkStackLatency is sent by the server (and the client, on development builds) to measure the latency over the entire Minecraft stack, rather than the RakNet latency. It has other usages too, such as the ability to be used as some kind of acknowledgement packet, to know when the client has received a certain other packet.
Field Name | Field Type | Notes |
timestamp | lu64 | Timestamp is the timestamp of the network stack latency packet. The client will, if NeedsResponse is set to true, send a NetworkStackLatency packet with this same timestamp packet in response. |
needs response | u8 | NeedsResponse specifies if the sending side of this packet wants a response to the packet, meaning that the other side should send a NetworkStackLatency packet back. |
ScriptCustomEvent is sent by both the client and the server. It is a way to let scripts communicate with the server, so that the client can let the server know it triggered an event, or the other way around. It is essentially an RPC kind of system. Deprecated: ScriptCustomEvent is deprecated as of 1.20.10.
Field Name | Field Type | Notes |
event name | string | EventName is the name of the event. The script and the server will use this event name to identify the data that is sent. |
event data | string | EventData is the data of the event. This data is typically a JSON encoded string, that the script is able to encode and decode too. |
SpawnParticleEffect is sent by the server to spawn a particle effect client-side. Unlike other packets that result in the appearing of particles, this packet can show particles that are not hardcoded in the client. They can be added and changed through behaviour packs to implement custom particles.
Field Name | Field Type | Notes |
dimension | u8 | Dimension is the dimension that the particle is spawned in. Its exact usage is not clear, as the dimension has no direct effect on the particle. |
entity id | zigzag64 | EntityUniqueID is the unique ID of the entity that the spawned particle may be attached to. If this ID is not -1, the Position below will be interpreted as relative to the position of the entity associated with this unique ID. |
position | vec3f | Position is the position that the particle should be spawned at. If the position is too far away from the player, it will not show up. If EntityUniqueID is not -1, the position will be relative to the position of the entity. |
particle name | string | ParticleName is the name of the particle that should be shown. This name may point to a particle effect that is built-in, or to one implemented by behaviour packs. |
molang variables optional | string | MoLangVariables is an encoded JSON map of MoLang variables that may be applicable to the particle spawn. This can just be left empty in most cases. |
AvailableActorIdentifiers is sent by the server at the start of the game to let the client know all entities that are available on the server.
Field Name | Field Type | Notes |
nbt | nbt | SerialisedEntityIdentifiers is a network NBT serialised compound of all entity identifiers that are available in the server. |
Not used. Use packet_level_sound_event
.
Field Name | Field Type | Notes |
sound id | u8 | |
position | vec3f | |
block id | zigzag32 | |
entity type | string | |
is baby mob | bool | |
is global | bool |
NetworkChunkPublisherUpdate is sent by the server to change the point around which chunks are and remain loaded. This is useful for mini-game servers, where only one area is ever loaded, in which case the NetworkChunkPublisherUpdate packet can be sent in the middle of it, so that no chunks ever need to be additionally sent during the course of the game. In reality, the packet is not extraordinarily useful, and most servers just send it constantly at the position of the player. If the packet is not sent at all, no chunks will be shown to the player, regardless of where they are sent.
Field Name | Field Type | Notes | ||||||
coordinates | BlockCoordinates | Position is the block position around which chunks loaded will remain shown to the client. Most servers set this position to the position of the player itself. | ||||||
radius | varint | Radius is the radius in blocks around Position that chunks sent show up in and will remain loaded in. Unlike the RequestChunkRadius and ChunkRadiusUpdated packets, this radius is in blocks rather than chunks, so the chunk radius needs to be multiplied by 16. (Or shifted to the left by 4.) | ||||||
saved chunks length | lu32 | |||||||
saved chunks array |
|
BiomeDefinitionList is sent by the server to let the client know all biomes that are available and implemented on the server side. It is much like the AvailableActorIdentifiers packet, but instead functions for biomes.
Field Name | Field Type | Notes |
nbt | nbt | SerialisedBiomeDefinitions is a network NBT serialised compound of all definitions of biomes that are available on the server. |
LevelSoundEvent is sent by the server to make any kind of built-in sound heard to a player. It is sent to, for example, play a stepping sound or a shear sound. The packet is also sent by the client, in which case it could be forwarded by the server to the other players online. If possible, the packets from the client should be ignored however, and the server should play them on its own accord.
Field Name | Field Type | Notes |
sound id | SoundType | SoundType is the type of the sound to play. Some of the sound types require additional data, which is set in the EventData field. |
position | vec3f | Position is the position of the sound event. The player will be able to hear the direction of the sound based on what position is sent here. |
extra data | zigzag32 | ExtraData is a packed integer that some sound types use to provide extra data. An example of this is the note sound, which is composed of a pitch and an instrument type. |
entity type | string | EntityType is the string entity type of the entity that emitted the sound, for example 'minecraft:skeleton'. Some sound types use this entity type for additional data. |
is baby mob | bool | BabyMob specifies if the sound should be that of a baby mob. It is most notably used for parrot imitations, which will change based on if this field is set to true or not. |
is global | bool | DisableRelativeVolume specifies if the sound should be played relatively or not. If set to true, the sound will have full volume, regardless of where the Position is, whereas if set to false, the sound's volume will be based on the distance to Position. |
LevelEventGeneric is sent by the server to send a 'generic' level event to the client. This packet sends an NBT serialised object and may for that reason be used for any event holding additional data.
Field Name | Field Type | Notes |
event id | varint | EventID is a unique identifier that identifies the event called. The data that follows has fields in the NBT depending on what event it is. |
nbt | nbtLoop | SerialisedEventData is a network little endian serialised object of event data, with fields that vary depending on EventID. Unlike many other NBT structures, this data is not actually in a compound but just loosely floating NBT tags. To decode using the nbt package, you would need to append 0x0a00 at the start (compound id and name length) and add 0x00 at the end, to manually wrap it in a compound. Likewise, you would have to remove these bytes when encoding. |
LecternUpdate is sent by the client to update the server on which page was opened in a book on a lectern, or if the book should be removed from it.
Field Name | Field Type | Notes |
page | u8 | Page is the page number in the book that was opened by the player on the lectern. |
page count | u8 | PageCount is the number of pages that the book opened in the lectern has. |
position | vec3i | Position is the position of the lectern that was updated. If no lectern is at the block position, the packet should be ignored. |
This packet was removed.
Field Name | Field Type | Notes | ||||||
server uri | string | |||||||
frame send frequency | lf32 | |||||||
action | u8 enum
| |||||||
resolution x | li32 | |||||||
resolution y | li32 |
ClientCacheStatus is sent by the client to the server at the start of the game. It is sent to let the server know if it supports the client-side blob cache. Clients such as Nintendo Switch do not support the cache, and attempting to use it anyway will fail.
Field Name | Field Type | Notes |
enabled | bool | Enabled specifies if the blob cache is enabled. If false, the server should not attempt to use the blob cache. If true, it may do so, but it may also choose not to use it. |
OnScreenTextureAnimation is sent by the server to show a certain animation on the screen of the player. The packet is used, as an example, for when a raid is triggered and when a raid is defeated.
Field Name | Field Type | Notes |
animation type | lu32 | AnimationType is the type of the animation to show. The packet provides no further extra data to allow modifying the duration or other properties of the animation. |
MapCreateLockedCopy is sent by the server to create a locked copy of one map into another map. In vanilla, it is used in the cartography table to create a map that is locked and cannot be modified.
Field Name | Field Type | Notes |
original map id | zigzag64 | OriginalMapID is the ID of the map that is being copied. The locked copy will obtain all content that is visible on this map, except the content will not change. |
new map id | zigzag64 | NewMapID is the ID of the map that holds the locked copy of the map that OriginalMapID points to. Its contents will be impossible to change. |
StructureTemplateDataRequest is sent by the client to request data of a structure.
Field Name | Field Type | Notes | ||||||||||||
name | string | StructureName is the name of the structure that was set in the structure block's UI. This is the name used to export the structure to a file. | ||||||||||||
position | BlockCoordinates | Position is the position of the structure block that has its template data requested. | ||||||||||||
settings | StructureBlockSettings | Settings is a struct of settings that should be used for exporting the structure. These settings are identical to the last sent in the StructureBlockUpdate packet by the client. | ||||||||||||
request type | u8 enum
|
StructureTemplateDataResponse is sent by the server to send data of a structure to the client in response to a StructureTemplateDataRequest packet.
Field Name | Field Type | Notes | |||||||||
name | string | ||||||||||
success | bool | ||||||||||
nbt if success |
| ||||||||||
response type | u8 enum
|
No longer used.
Field Name | Field Type | Notes |
nbt | nbt |
ClientCacheBlobStatus is part of the blob cache protocol. It is sent by the client to let the server know what blobs it needs and which blobs it already has, in an ACK type system.
Field Name | Field Type | Notes |
misses | varint | The number of MISSes in this packet |
haves | varint | The number of HITs in this packet |
Length for missing below is misses from above | A list of blob hashes that the client does not have a blob available for. The server should send the blobs matching these hashes as soon as possible. | |
missing array | lu64 | |
Length for have below is haves from above | A list of hashes that the client does have a cached blob for. Server doesn't need to send. | |
have array | lu64 |
ClientCacheMissResponse is part of the blob cache protocol. It is sent by the server in response to a ClientCacheBlobStatus packet and contains the blob data of all blobs that the client acknowledged not to have yet.
Field Name | Field Type | Notes |
blobs length | varint | |
blobs array | Blob |
EducationSettings is a packet sent by the server to update Minecraft: Education Edition related settings. It is unused by the normal base game.
Field Name | Field Type | Notes | ||||||||||||
CodeBuilderDefaultURI | string | CodeBuilderDefaultURI is the default URI that the code builder is ran on. Using this, a Code Builder program can make code directly affect the server. | ||||||||||||
CodeBuilderTitle | string | CodeBuilderTitle is the title of the code builder shown when connected to the CodeBuilderDefaultURI. | ||||||||||||
CanResizeCodeBuilder | bool | CanResizeCodeBuilder specifies if clients connected to the world should be able to resize the code builder when it is opened. | ||||||||||||
disable legacy title bar | bool | |||||||||||||
post process filter | string | |||||||||||||
screenshot border path | string | |||||||||||||
has agent capabilities | bool | |||||||||||||
agent capabilities if has agent capabilities |
| |||||||||||||
HasOverrideURI | bool | |||||||||||||
OverrideURI if HasOverrideURI |
| |||||||||||||
HasQuiz | bool | HasQuiz specifies if the world has a quiz connected to it. | ||||||||||||
has external link settings | bool | |||||||||||||
external link settings if has external link settings |
|
Emote is sent by both the server and the client. When the client sends an emote, it sends this packet to the server, after which the server will broadcast the packet to other players online.
Field Name | Field Type | Notes | ||||||
entity id | varint64 | EntityRuntimeID is the entity that sent the emote. When a player sends this packet, it has this field set as its own entity runtime ID. | ||||||
emote id | string | EmoteID is the ID of the emote to send. | ||||||
xuid | string | XUID is the Xbox User ID of the player that sent the emote. It is only set when the emote is used by a player that is authenticated with Xbox Live. | ||||||
platform id | string | PlatformID is an identifier only set for particular platforms when using an emote (presumably only for Nintendo Switch). It is otherwise an empty string, and is used to decide which players are able to emote with each other. | ||||||
flags | u8 enum
|
MultiPlayerSettings is sent by the client to update multi-player related settings server-side and sent back to online players by the server. The MultiPlayerSettings packet is a Minecraft: Education Edition packet. It has no functionality for the base game.
Field Name | Field Type | Notes | |||||||||
action type | zigzag32 enum
|
SettingsCommand is sent by the client when it changes a setting in the settings that results in the issuing of a command to the server, such as when Show Coordinates is enabled.
Field Name | Field Type | Notes |
command line | string | CommandLine is the full command line that was sent to the server as a result of the setting that the client changed. |
suppress output | bool | SuppressOutput specifies if the client requests the suppressing of the output of the command that was executed. Generally this is set to true, as the client won't need a message to confirm the output of the change. |
AnvilDamage is sent by the client to request the dealing damage to an anvil. This packet is completely pointless and the server should never listen to it.
Field Name | Field Type | Notes |
damage | u8 | Damage is the damage that the client requests to be dealt to the anvil. |
position | BlockCoordinates | AnvilPosition is the position in the world that the anvil can be found at. |
CompletedUsingItem is sent by the server to tell the client that it should be done using the item it is currently using.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||
used item id | li16 | UsedItemID is the item ID of the item that the client completed using. This should typically be the ID of the item held in the hand. | |||||||||||||||||||||||||||||||||||||||||||||||||||
use method | li32 enum
|
NetworkSettings is sent by the server to update a variety of network settings. These settings modify the way packets are sent over the network stack.
Field Name | Field Type | Notes | ||||||
compression threshold | lu16 | CompressionThreshold is the minimum size of a packet that is compressed when sent. If the size of a packet is under this value, it is not compressed. When set to 0, all packets will be left uncompressed. | ||||||
compression algorithm | lu16 enum
| |||||||
client throttle | bool | ClientThrottle regulates whether the client should throttle players when exceeding of the threshold. Players outside threshold will not be ticked, improving performance on low-end devices. | ||||||
client throttle threshold | u8 | ClientThrottleThreshold is the threshold for client throttling. If the number of players exceeds this value, the client will throttle players. | ||||||
client throttle scalar | lf32 | ClientThrottleScalar is the scalar for client throttling. The scalar is the amount of players that are ticked when throttling is enabled. |
PlayerAuthInput is sent by the client to allow for server authoritative movement. It is used to synchronise the player input with the position server-side. The client sends this packet when the ServerAuthoritativeMovementMode field in the StartGame packet is set to true, instead of the MovePlayer packet. The client will send this packet once every tick.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||
pitch | lf32 | Pitch that the player reports it has. | ||||||||||||||||||||||||||||||
yaw | lf32 | Yaw that player reports it has. | ||||||||||||||||||||||||||||||
position | vec3f | Position holds the position that the player reports it has. | ||||||||||||||||||||||||||||||
move vector | vec2f | MoveVector is a Vec2 that specifies the direction in which the player moved, as a combination of X/Z values which are created using the WASD/controller stick state. | ||||||||||||||||||||||||||||||
head yaw | lf32 | HeadYaw is the horizontal rotation of the head that the player reports it has. | ||||||||||||||||||||||||||||||
input data | InputFlag | InputData is a combination of bit flags that together specify the way the player moved last tick. It is a combination of the flags above. | ||||||||||||||||||||||||||||||
input mode | varint enum
| |||||||||||||||||||||||||||||||
play mode | varint enum
| |||||||||||||||||||||||||||||||
interaction model | zigzag32 enum
| |||||||||||||||||||||||||||||||
gaze direction if play mode |
| |||||||||||||||||||||||||||||||
tick | varint64 | Tick is the server tick at which the packet was sent. It is used in relation to CorrectPlayerMovePrediction. | ||||||||||||||||||||||||||||||
delta | vec3f | Delta was the delta between the old and the new position. There isn't any practical use for this field as it can be calculated by the server itself. | ||||||||||||||||||||||||||||||
transaction if input data.item interact |
| |||||||||||||||||||||||||||||||
item stack request if input data.item stack request |
| |||||||||||||||||||||||||||||||
🔁 if input data.client predicted vehicle |
| |||||||||||||||||||||||||||||||
block action if input data.block action |
| |||||||||||||||||||||||||||||||
analogue move vector | vec2f | AnalogueMoveVector is a Vec2 that specifies the direction in which the player moved, as a combination of X/Z values which are created using an analogue input. |
CreativeContent is a packet sent by the server to set the creative inventory's content for a player. Introduced in 1.16, this packet replaces the previous method - sending an InventoryContent packet with creative inventory window ID. As of v1.16.100, this packet must be sent during the login sequence. Not sending it will stop the client from joining the server.
Field Name | Field Type | Notes | ||||||
items length | varint | Items is a list of the items that should be added to the creative inventory. | ||||||
items array |
|
PlayerEnchantOptions is sent by the server to update the enchantment options displayed when the user opens the enchantment table and puts an item in. This packet was added in 1.16 and allows the server to decide on the enchantments that can be selected by the player. The PlayerEnchantOptions packet should be sent once for every slot update of the enchantment table. The vanilla server sends an empty PlayerEnchantOptions packet when the player opens the enchantment table (air is present in the enchantment table slot) and sends the packet with actual enchantments in it when items are put in that can have enchantments.
Field Name | Field Type | Notes |
options length | varint | Options is a list of possible enchantment options for the item that was put into the enchantment table. |
options array | EnchantOption |
ItemStackRequest is sent by the client to change item stacks in an inventory. It is essentially a replacement of the InventoryTransaction packet added in 1.16 for inventory specific actions, such as moving items around or crafting. The InventoryTransaction packet is still used for actions such as placing blocks and interacting with entities.
Field Name | Field Type | Notes |
requests length | varint | |
requests array | ItemStackRequest |
ItemStackResponse is sent by the server in response to an ItemStackRequest packet from the client. This packet is used to either approve or reject ItemStackRequests from the client. If a request is approved, the client will simply continue as normal. If rejected, the client will undo the actions so that the inventory should be in sync with the server again.
Field Name | Field Type | Notes |
responses | ItemStackResponses | Responses is a list of responses to ItemStackRequests sent by the client before. Responses either approve or reject a request from the client. Vanilla limits the size of this slice to 4096. |
PlayerArmourDamage is sent by the server to damage the armour of a player. It is a very efficient packet, but generally it's much easier to just send a slot update for the damaged armour.
Field Name | Field Type | Notes | |||
type | ArmorDamageType | Bitset holds a bitset of 4 bits that indicate which pieces of armour need to have damage dealt to them. The first bit, when toggled, is for a helmet, the second for the chestplate, the third for the leggings and the fourth for boots. | |||
helmet damage if type.head |
| ||||
chestplate damage if type.chest |
| ||||
leggings damage if type.legs |
| ||||
boots damage if type.feet |
| ||||
body damage if type.body |
|
UpdatePlayerGameType is sent by the server to change the game mode of a player. It is functionally identical to the SetPlayerGameType packet.
Field Name | Field Type | Notes |
gamemode | GameMode | GameType is the new game type of the player. It is one of the constants that can be found in setplayergame_type.go. Some of these game types require additional flags to be set in an AdventureSettings packet for the game mode to obtain its full functionality. |
player unique id | zigzag64 | PlayerUniqueID is the entity unique ID of the player that should have its game mode updated. If this packet is sent to other clients with the player unique ID of another player, nothing happens. |
tick | varint |
EmoteList is sent by the client every time it joins the server and when it equips new emotes. It may be used by the server to find out which emotes the client has available. If the player has no emotes equipped, this packet is not sent. Under certain circumstances, this packet is also sent from the server to the client, but I was unable to find when this is done.
Field Name | Field Type | Notes |
player id | varint64 | PlayerRuntimeID is the runtime ID of the player that owns the emote pieces below. If sent by the client, this player runtime ID is always that of the player itself. |
emote pieces length | varint | EmotePieces is a list of emote pieces that the player with the runtime ID above has. |
emote pieces array | uuid |
PositionTrackingDBClientRequest is a packet sent by the client to request the position and dimension of a 'tracking ID'. These IDs are tracked in a database by the server. In 1.16, this is used for lodestones. The client will send this request to find the position a lodestone compass needs to point to. If found, it will point to the lodestone. If not, it will start spinning around. A PositionTrackingDBServerBroadcast packet should be sent in response to this packet.
Field Name | Field Type | Notes | |||
action | u8 enum
| ||||
tracking id | zigzag32 | TrackingID is a unique ID used to identify the request. The server responds with a PositionTrackingDBServerBroadcast packet holding the same ID, so that the client can find out what that packet was in response to. |
PositionTrackingDBServerBroadcast is sent by the server in response to the PositionTrackingDBClientRequest packet. This packet is, as of 1.16, currently only used for lodestones. The server maintains a database with tracking IDs and their position and dimension. The client will request these tracking IDs, (NBT tag set on the lodestone compass with the tracking ID?) and the server will respond with the status of those tracking IDs. What is actually done with the data sent depends on what the client chooses to do with it. For the lodestone compass, it is used to make the compass point towards lodestones and to make it spin if the lodestone at a position is no longer there.
Field Name | Field Type | Notes | |||||||||
broadcast action | u8 enum
| ||||||||||
tracking id | zigzag32 | TrackingID is the ID of the PositionTrackingDBClientRequest packet that this packet was in response to. The tracking ID is also present as the 'id' field in the SerialisedData field. | |||||||||
nbt | nbt |
PacketViolationWarning is sent by the client when it receives an invalid packet from the server. It holds some information on the error that occurred.
Field Name | Field Type | Notes | |||||||||
violation type | zigzag32 enum
| ||||||||||
severity | zigzag32 enum
| ||||||||||
packet id | zigzag32 | PacketID is the ID of the invalid packet that was received. | |||||||||
reason | string | ViolationContext holds a description on the violation of the packet. |
MotionPredictionHints is sent by the server to the client. There is a predictive movement component for entities. This packet fills the "history" of that component and entity movement is computed based on the points. Vanilla sends this packet instead of the SetActorMotion packet when 'spatial optimisations' are enabled.
Field Name | Field Type | Notes |
entity runtime id | varint64 | EntityRuntimeID is the runtime ID of the entity whose velocity is sent to the client. |
velocity | vec3f | Velocity is the server-calculated velocity of the entity at the point of sending the packet. |
on ground | bool | OnGround specifies if the server currently thinks the entity is on the ground. |
AnimateEntity is sent by the server to animate an entity client-side. It may be used to play a single animation, or to activate a controller which can start a sequence of animations based on different conditions specified in an animation controller. Much of the documentation of this packet can be found at https://learn.microsoft.com/minecraft/creator/reference/content/animationsreference.
Field Name | Field Type | Notes |
animation | string | Animation is the name of a single animation to start playing. |
next state | string | NextState is the first state to start with. These states are declared in animation controllers (which, in themselves, are animations too). These states in turn may have animations and transitions to move to a next state. |
stop condition | string | StopCondition is a MoLang expression that specifies when the animation should be stopped. |
stop condition version | li32 | StopConditionVersion is the MoLang stop condition version. |
controller | string | Controller is the animation controller that is used to manage animations. These controllers decide when to play which animation. |
blend out time | lf32 | How long to move from the previous animation to the next. |
runtime entity ids length | varint | EntityRuntimeIDs is list of runtime IDs of entities that the animation should be applied to. |
runtime entity ids array | varint64 |
CameraShake is sent by the server to make the camera shake client-side. This feature was added for map- making partners.
Field Name | Field Type | Notes | ||||||
intensity | lf32 | Intensity is the intensity of the shaking. The client limits this value to 4, so anything higher may not work. | ||||||
duration | lf32 | Duration is the number of seconds the camera will shake for. | ||||||
type | u8 | Type is the type of shake, and is one of the constants listed above. The different type affects how the shake looks in game. | ||||||
action | u8 enum
|
PlayerFog is sent by the server to render the different fogs in the Stack. The types of fog are controlled by resource packs to change how they are rendered, and the ability to create custom fog.
Field Name | Field Type | Notes |
stack length | varint | Stack is a list of fog identifiers to be sent to the client. Examples of fog identifiers are "minecraft:fogocean" and "minecraft:foghell". |
stack array | string |
CorrectPlayerMovePrediction is sent by the server if and only if StartGame.ServerAuthoritativeMovementMode is set to AuthoritativeMovementModeServerWithRewind. The packet is used to correct movement at a specific point in time.
Field Name | Field Type | Notes | |||||||||
prediction type | u8 enum
| ||||||||||
position | vec3f | Position is the position that the player is supposed to be at at the tick written in the field below. The client will change its current position based on movement after that tick starting from the Position. | |||||||||
delta | vec3f | Delta is the change in position compared to what the client sent as its position at that specific tick. | |||||||||
vehicle rotation if prediction type |
| ||||||||||
on ground | bool | OnGround specifies if the player was on the ground at the time of the tick below. | |||||||||
tick | varint64 | Tick is the tick of the movement which was corrected by this packet. |
ItemComponent is sent by the server to attach client-side components to a custom item.
Field Name | Field Type | Notes |
entries | ItemComponentList |
|
FilterText is sent by the both the client and the server. The client sends the packet to the server to allow the server to filter the text server-side. The server then responds with the same packet and the safer version of the text.
Field Name | Field Type | Notes |
text | string | Text is either the text from the client or the safer version of the text sent by the server. |
from server | bool | FromServer indicates if the packet was sent by the server or not. |
ClientBoundDebugRenderer is sent by the server to spawn an outlined cube on client-side.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||
type | li32 enum
| ||||||||||||||||||||||||||||
🔁 if type |
|
Sent by the server to synchronize/update entity properties as NBT, an alternative to Set Entity Data.
Field Name | Field Type | Notes |
nbt | nbt |
AddVolumeEntity sends a volume entity's definition and components from server to client.
Field Name | Field Type | Notes | ||||||
runtime id | varint64 | EntityRuntimeID is the runtime ID of the entity. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. | ||||||
nbt | nbt | EntityMetadata is a map of entity metadata, which includes flags and data properties that alter in particular the way the entity looks. | ||||||
encoding identifier | string | |||||||
instance name | string | |||||||
bounds |
| |||||||
dimension | zigzag32 | |||||||
engine version | string |
RemoveVolumeEntity indicates a volume entity to be removed from server to client.
Field Name | Field Type | Notes |
entity id | varint64 | The Runtime Entity ID |
SimulationType is an in-progress packet. We currently do not know the use case.
Field Name | Field Type | Notes | ||||||||||||
type | u8 enum
|
NPCDialogue is a packet that allows the client to display dialog boxes for interacting with NPCs.
Field Name | Field Type | Notes | ||||||
entity id | lu64 | ActorUniqueID is the ID of the NPC being requested. | ||||||
action type | varint enum
| |||||||
dialogue | string | Dialogue is the text that the client should see. | ||||||
screen name | string | SceneName is the scene the data was pulled from for the client. | ||||||
npc name | string | NPCName is the name of the NPC to be displayed to the client. | ||||||
action json | string | ActionJSON is the JSON string of the buttons/actions the server can perform. |
Field Name | Field Type | Notes |
resource | EducationSharedResourceURI |
CreatePhoto is a packet that allows players to export photos from their portfolios into items in their inventory. This packet only works on the Education Edition version of Minecraft.
Field Name | Field Type | Notes |
entity unique id | li64 | EntityUniqueID is the unique ID of the entity. |
photo name | string | PhotoName is the name of the photo. |
item name | string | ItemName is the name of the photo as an item. |
UpdateSubChunkBlocks is essentially just UpdateBlock packet, however for a set of blocks in a sub chunk.
Field Name | Field Type | Notes |
x | zigzag32 | SubChunkX, SubChunkY, and SubChunkZ help identify the sub chunk. |
y | zigzag32 | |
z | zigzag32 | |
blocks length | varint | Blocks contains each updated block change entry. |
blocks array | BlockUpdate | |
extra length | varint | Extra contains each updated block change entry for the second layer, usually for waterlogged blocks. |
extra array | BlockUpdate |
Field Name | Field Type | Notes |
photo id | zigzag64 |
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SubChunkEntryWithoutCaching length | lu32 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SubChunkEntryWithoutCaching array |
|
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SubChunkEntryWithCaching length | lu32 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SubChunkEntryWithCaching array |
|
SubChunk sends data about multiple sub-chunks around a center point.
Field Name | Field Type | Notes | ||||||
cache enabled | bool | |||||||
dimension | zigzag32 | |||||||
origin | vec3i | Origin point | ||||||
entries if cache enabled |
|
Field Name | Field Type | Notes | |||||||||
dimension | zigzag32 | ||||||||||
origin | vec3i | Origin point | |||||||||
requests length | lu32 | ||||||||||
requests array |
|
ClientStartItemCooldown is sent by the client to the server to initiate a cooldown on an item. The purpose of this packet isn't entirely clear.
Field Name | Field Type | Notes |
category | string | |
duration | zigzag32 | Duration is the duration of ticks the cooldown should last. |
ScriptMessage is used to communicate custom messages from the client to the server, or from the server to the client. While the name may suggest this packet is used for the discontinued scripting API, it is likely instead for the GameTest framework.
Field Name | Field Type | Notes |
message id | string | Message ID is the identifier of the message, used by either party to identify the message data sent. |
data | string | Data contains the data of the message. |
CodeBuilderSource is an Education Edition packet sent by the client to the server to run an operation with a
Field Name | Field Type | Notes | ||||||||||||||||||
operation | u8 enum
| |||||||||||||||||||
category | u8 enum
| |||||||||||||||||||
code status | u8 enum
|
TickingAreasLoadStatus is sent by the server to the client to notify the client of a ticking area's loading status.
Field Name | Field Type | Notes |
preload | bool | Preload is true if the server is waiting for the area's preload. |
DimensionData is a packet sent from the server to the client containing information about data-driven dimensions that the server may have registered. This packet does not seem to be sent by default, rather only being sent when any data-driven dimensions are registered.
Field Name | Field Type | Notes | ||||||||||||||||||||||||||||||
definitions length | varint | |||||||||||||||||||||||||||||||
definitions array |
|
AgentAction is an Education Edition packet sent from the server to the client to return a response to a previously requested action.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
request id | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
action type | zigzag32 enum
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
body | string |
ChangeMobProperty is a packet sent from the server to the client to change one of the properties of a mob client-side.
Field Name | Field Type | Notes |
entity unique id | zigzag64 | EntityUniqueID is the unique ID of the entity whose property is being changed. |
property | string | Property is the name of the property being updated. |
bool value | bool | BoolValue is set if the property value is a bool type. If the type is not a bool, this field is ignored. |
string value | string | StringValue is set if the property value is a string type. If the type is not a string, this field is ignored. |
int value | zigzag32 | IntValue is set if the property value is an int type. If the type is not an int, this field is ignored. |
float value | lf32 | FloatValue is set if the property value is a float type. If the type is not a float, this field is ignored. |
LessonProgress is a packet sent by the server to the client to inform the client of updated progress on a lesson. This packet only functions on the Minecraft: Education Edition version of the game.
Field Name | Field Type | Notes |
action | u8 | Action is the action the client should perform to show progress. This is one of the constants defined above. |
score | zigzag32 | Score is the score the client should use when displaying the progress. |
identifier | string | Identifier is the identifier of the lesson that is being progressed. |
RequestAbility is a packet sent by the client to the server to request permission for a specific ability from the server.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ability | zigzag32 enum
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value type | u8 enum
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bool value | bool | If value type is bool, use this value | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
float val | lf32 | If value type is float, use this value |
RequestPermissions is a packet sent from the client to the server to request permissions that the client does not currently have. It can only be sent by operators and host in vanilla Minecraft.
Field Name | Field Type | Notes |
entity unique id | li64 | EntityUniqueID is the unique ID of the player. The unique ID is unique for the entire world and is often used in packets. Most servers send an EntityUniqueID equal to the EntityRuntimeID. |
permission level | PermissionLevel | PermissionLevel is the current permission level of the player. Same as constants in AdventureSettings packet. |
requested permissions | RequestPermissions | RequestedPermissions contains the requested permission flags. |
ToastRequest is a packet sent from the server to the client to display a toast to the top of the screen. These toasts are the same as the ones seen when, for example, loading a new resource pack or obtaining an achievement.
Field Name | Field Type | Notes |
title | string | Title is the title of the toast. |
message | string | Message is the message that the toast may contain alongside the title. |
UpdateAbilities is a packet sent from the server to the client to update the abilities of the player. It, along with the UpdateAdventureSettings packet, are replacements of the AdventureSettings packet since v1.19.10.
Field Name | Field Type | Notes |
entity unique id | li64 | EntityUniqueID is the unique ID of the player. The unique ID is a value that remains consistent across different sessions of the same world, but most servers simply fill the runtime ID of the entity out for this field. |
permission level | PermissionLevel | PlayerPermissions is the permission level of the player. It is a value from 0-3, with 0 being visitor, 1 being member, 2 being operator and 3 being custom. |
command permission | CommandPermissionLevel | CommandPermissions is a permission level that specifies the kind of commands that the player is allowed to use. It is one of the CommandPermissionLevel constants in the AdventureSettings packet. |
abilities length | u8 | Layers contains all ability layers and their potential values. This should at least have one entry, being the base layer. |
abilities array | AbilityLayers |
UpdateAdventureSettings is a packet sent from the server to the client to update the adventure settings of the player. It, along with the UpdateAbilities packet, are replacements of the AdventureSettings packet since v1.19.10.
Field Name | Field Type | Notes |
no pvm | bool | NoPvM is a boolean indicating whether the player is allowed to fight mobs or not. |
no mvp | bool | NoMvP is a boolean indicating whether mobs are allowed to fight the player or not. It is unclear why this is sent to the client. |
immutable world | bool | ImmutableWorld is a boolean indicating whether the player is allowed to modify the world or not. |
show name tags | bool | ShowNameTags is a boolean indicating whether player name tags are shown or not. |
auto jump | bool | AutoJump is a boolean indicating whether the player is allowed to jump automatically or not. |
DeathInfo is a packet sent from the server to the client expected to be sent when a player dies. It contains messages related to the player's death, which are shown on the death screen as of v1.19.10.
Field Name | Field Type | Notes |
cause | string | Cause is the cause of the player's death, such as "suffocation" or "suicide". |
messages length | varint | Messages is a list of death messages to be shown on the death screen. |
messages array | string |
EditorNetwork is a packet sent from the server to the client and vise-versa to communicate editor-mode related information. It carries a single compound tag containing the relevant information.
Field Name | Field Type | Notes |
route to manager | bool | |
payload | nbt | Payload is a network little endian compound tag holding data relevant to the editor. |
FeatureRegistry is a packet used to notify the client about the world generation features the server is currently using. This is used in combination with the client-side world generation system introduced in v1.19.20, allowing the client to completely generate the chunks of the world without having to rely on the server.
Field Name | Field Type | Notes | ||||||
features length | varint | Features is a slice of all registered world generation features. | ||||||
features array |
|
ServerStats is a packet sent from the server to the client to update the client on server statistics. It is purely used for telemetry.
Field Name | Field Type | Notes |
server time | lf32 | |
network time | lf32 |
Field Name | Field Type | Notes |
client protocol | i32 |
Field Name | Field Type | Notes | |||||||||||||||
max tests per batch | varint | MaxTestsPerBatch … | |||||||||||||||
repetitions | varint | Repetitions represents the amount of times the test will be run. | |||||||||||||||
rotation | u8 enum
| ||||||||||||||||
stop on error | bool | StopOnError indicates whether the test should immediately stop when an error is encountered. | |||||||||||||||
position | BlockCoordinates | Position is the position at which the test will be performed. | |||||||||||||||
tests per row | varint | TestsPerRow … | |||||||||||||||
name | string | Name represents the name of the test. |
GameTestResults is a packet sent in response to the GameTestRequest packet, with a boolean indicating whether the test was successful or not, and an error string if the test failed.
Field Name | Field Type | Notes |
succeeded | bool | Succeeded indicates whether the test succeeded or not. |
error | string | Error is the error that occurred. If Succeeded is true, this field is empty. |
name | string | Name represents the name of the test. |
Field Name | Field Type | Notes |
locks | InputLockFlags | Locks is an encoded bitset of all locks that are currently active. The locks are defined in the constants above. |
position | vec3f | Position is the server's position of the client at the time the packet was sent. It is unclear what the exact purpose of this field is. |
Deprecated: ClientCheatAbility is deprecated as of 1.20.10.
Field Name | Field Type | Notes |
entity unique id | li64 | EntityUniqueID is the unique ID of the player. The unique ID is a value that remains consistent across different sessions of the same world, but most servers simply fill the runtime ID of the entity out for this field. |
permission level | PermissionLevel | PlayerPermissions is the permission level of the player. It is a value from 0-3, with 0 being visitor, 1 being member, 2 being operator and 3 being custom. |
command permission | CommandPermissionLevel | CommandPermissions is a permission level that specifies the kind of commands that the player is allowed to use. It is one of the CommandPermissionLevel constants in the AdventureSettings packet. |
abilities length | u8 | Layers contains all ability layers and their potential values. This should at least have one entry, being the base layer. |
abilities array | AbilityLayers |
camera_presets gives the client a list of custom camera presets.
Field Name | Field Type | Notes |
presets length | varint | |
presets array | CameraPresets |
unlocked_recipes gives the client a list of recipes that have been unlocked, restricting the recipes that appear in the recipe book.
Field Name | Field Type | Notes | |||||||||||||||
unlock type | lu32 enum
| ||||||||||||||||
recipes length | varint | Recipes is a list of recipe names that have been unlocked. | |||||||||||||||
recipes array | string |
camera_instruction gives a custom camera specific instructions to operate.
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instruction set optional |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
clear optional | bool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fade optional |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
target optional |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
remove target optional | bool |
Field Name | Field Type | Notes |
raw payload | ByteArray | via PMMP:
This packet is only sent by the server when client-side chunk generation is enabled in vanilla. It contains NBT data
for biomes, similar to the BiomeDefinitionListPacket, but with a large amount of extra data for client-side chunk
generation. |
Field Name | Field Type | Notes | |||||||||
patterns length | varint | ||||||||||
patterns array |
| ||||||||||
materials length | varint | ||||||||||
materials array |
|
Field Name | Field Type | Notes |
position | BlockCoordinates | |
is front | bool |
agent_animation is an Education Edition packet sent from the server to the client to make an agent perform an animation.
Field Name | Field Type | Notes | ||||||
animation | u8 enum
| |||||||
entity runtime id | varint64 | entityruntimeid is the runtime ID of the entity. The runtime ID is unique for each world session, and entities are generally identified in packets using this runtime ID. |
RefreshEntitlements is sent by the client to the server to refresh the entitlements of the player.
Field Name | Field Type | Notes |
Field Name | Field Type | Notes |
position | vec3li | |
slot | u8 | |
disabled | bool |
Field Name | Field Type | Notes | |||||||||||||||||||||
left tab | zigzag32 enum
| ||||||||||||||||||||||
right tab | zigzag32 enum
| ||||||||||||||||||||||
filtering | bool | ||||||||||||||||||||||
layout | zigzag32 enum
| ||||||||||||||||||||||
crafting layout | zigzag32 enum
|
SetHud is sent by the server to set the visibility of individual HUD elements on the client. It is important to note that the client does not reset the state of the HUD elements after it leaves a server, meaning they can leak into sessions on different servers. To be safe, you should reset the visibility of all HUD elements when a player connects.
Field Name | Field Type | Notes | ||||||
elements length | varint | Elements is a list of HUD elements that are being modified. The values can be any of the HudElement constants above. | ||||||
elements array | Element | |||||||
visibility | u8 enum
|
Field Name | Field Type | Notes | |||||||||||||||||||||||||||||||||||||||
Element | u8 enum
|
Field Name | Field Type | Notes |
achievement id | li32 |
Field Name | Field Type | Notes |
position | vec3f |
clientboundcloseform is sent by the server to clear the entire form stack of the client. This means that all forms that are currently open will be closed. This does not affect inventories and other containers.
Field Name | Field Type | Notes |
skip 0x137 ServerBoundLoadingScreen is sent by the client to tell the server about the state of the loading screen that the client is currently displaying.
Field Name | Field Type | Notes |
type | zigzag32 | The type of the loading screen event. |
loading screen id optional | lu32 |
JigsawStructureData is sent by the server to let the client know all the rules for jigsaw structures.
Field Name | Field Type | Notes |
structure data | nbt | StructureData is a network NBT serialised compound of all the jigsaw structure rules defined on the server. |
CurrentStructureFeature is sent by the server to let the client know the name of the structure feature that the player is currently occupying.
Field Name | Field Type | Notes |
current feature | string | CurrentFeature is the identifier of the structure feature that the player is currently occupying. If the player is not occupying any structure feature, this field is empty. |
ServerBoundDiagnostics is sent by the client to tell the server about the performance diagnostics of the client. It is sent by the client roughly every 500ms or 10 in-game ticks when the "Creator > Enable Client Diagnostics" setting is enabled.
Field Name | Field Type | Notes |
average frames per second | lf32 | |
average server sim tick time | lf32 | |
average client sim tick time | lf32 | |
average begin frame time | lf32 | |
average input time | lf32 | |
average render time | lf32 | |
average end frame time | lf32 | |
average remainder time percent | lf32 | |
average unaccounted time percent | lf32 |