Pre-release protocol
This page documents the changes from the last stable Minecraft release (currently 1.12.2, protocol 340) to the current pre-release (currently 18w02a, protocol 353). Note that this page contains bleeding-edge information that may not be completely or correctly documented.
One who wishes to commandeer the merging of this into Protocol when an update is made must be sure to respect any changes that may have occurred to the respective packets there.
Contents
Contents
- 1 Contents
- 2 New/modified data types
- 3 Entity Metadata Format
- 4 Block Actions
- 5 Plugin Channels
- 6 Play
- 6.1 Clientbound
- 6.1.1 Spawn Painting
- 6.1.2 Block Change
- 6.1.3 Statistics
- 6.1.4 Multi Block Change
- 6.1.5 Tab-Complete (clientbound)
- 6.1.6 Declare Commands
- 6.1.7 Named Sound Effect
- 6.1.8 Chunk Data
- 6.1.9 Spawn Particle
- 6.1.10 Craft Recipe Response
- 6.1.11 Face Player
- 6.1.12 Unlock Recipes
- 6.1.13 Scoreboard Objective
- 6.1.14 Teams
- 6.1.15 Stop Sound
- 6.1.16 Declare Recipes
- 6.1.17 Tags
- 6.2 Serverbound
- 6.1 Clientbound
- 7 Handshaking
- 8 Status
- 9 Login
Data types
Other definitions
Global palette
A table/dictionary/palette mapping nonnegative integers to block states. The block state IDs can be constructed from this table by multiplying what the Minecraft Wiki calls “block IDs” by 16 and adding the metadata/damage value (or in most programming languages block_id << 4 | metadata). Block state IDs are created in a linear fashion based off of order of assignment. One block state ID allocated for each unique block state for a block; if a block has multiple properties then the number of allocated states is the product of the number of values for each property. A current list of properties and state ID ranges is found on burger.
Packets
ID | Packet name | Documentation | |
---|---|---|---|
Handshaking serverbound | |||
0x00 | Handshake | Current | Pre |
Play clientbound | |||
0x04 | Spawn Painting | Current | Pre |
0x07 | Statistics | Current | Pre |
0x0B | Block Change | Current | Pre |
Chat Message (clientbound) | Current | (unchanged) | |
Multi Block Change | Current | Pre | |
Tab-Complete (clientbound) | Current | Pre | |
0x11 | Declare Commands | Pre | |
Confirm Transaction (clientbound) | Current | (unchanged) | |
Close Window (clientbound) | Current | (unchanged) | |
Open Window | Current | (unchanged) | |
Window Items | Current | (unchanged) | |
Window Property | Current | (unchanged) | |
Set Slot | Current | (unchanged) | |
Set Cooldown | Current | (unchanged) | |
Plugin Message (clientbound) | Current | (unchanged) | |
Named Sound Effect | Current | Pre | |
Disconnect (play) | Current | (unchanged) | |
Entity Status | Current | (unchanged) | |
Explosion | Current | (unchanged) | |
Unload Chunk | Current | (unchanged) | |
Change Game State | Current | (unchanged) | |
Keep Alive (clientbound) | Current | (unchanged) | |
Chunk Data | Current | Pre | |
Effect | Current | (unchanged) | |
Spawn Particle | Current | Pre | |
Join Game | Current | (unchanged) | |
Map | Current | (unchanged) | |
Entity | Current | (unchanged) | |
Entity Relative Move | Current | (unchanged) | |
Entity Look And Relative Move | Current | (unchanged) | |
Entity Look | Current | (unchanged) | |
Vehicle Move (clientbound) | Current | (unchanged) | |
Open Sign Editor | Current | (unchanged) | |
Craft Recipe Response | Current | Pre | |
Player Abilities (clientbound) | Current | (unchanged) | |
Combat Event | Current | (unchanged) | |
Player List Item | Current | (unchanged) | |
0x30 | Face Player | Pre | |
Player Position And Look (clientbound) | Current | (unchanged) | |
Use Bed | Current | (unchanged) | |
Unlock Recipes | Current | Pre | |
Destroy Entities | Current | (unchanged) | |
Remove Entity Effect | Current | (unchanged) | |
Resource Pack Send | Current | (unchanged) | |
Respawn | Current | (unchanged) | |
Entity Head Look | Current | (unchanged) | |
Select Advancement Tab | Current | (unchanged) | |
World Border | Current | (unchanged) | |
Camera | Current | (unchanged) | |
Held Item Change (clientbound) | Current | (unchanged) | |
Display Scoreboard | Current | (unchanged) | |
Entity Metadata | Current | (unchanged) | |
Attach Entity | Current | (unchanged) | |
Entity Velocity | Current | (unchanged) | |
Entity Equipment | Current | (unchanged) | |
Set Experience | Current | (unchanged) | |
Update Health | Current | (unchanged) | |
Scoreboard Objective | Current | Pre | |
Set Passengers | Current | (unchanged) | |
Teams | Current | Pre | |
Update Score | Current | (unchanged) | |
Spawn Position | Current | (unchanged) | |
Time Update | Current | (unchanged) | |
Title | Current | (unchanged) | |
0x4B | Stop Sound | Pre | |
Sound Effect | Current | (unchanged) | |
Player List Header And Footer | Current | (unchanged) | |
Collect Item | Current | (unchanged) | |
Entity Teleport | Current | (unchanged) | |
Advancements | Current | (unchanged) | |
Entity Properties | Current | (unchanged) | |
Entity Effect | Current | (unchanged) | |
0x53 | Declare Recipes | Pre | |
0x54 | Tags | Pre | |
Play serverbound | |||
Chat Message (serverbound) | Current | (unchanged) | |
Client Status | Current | (unchanged) | |
Client Settings | Current | (unchanged) | |
Tab-Complete (serverbound) | Current | Pre | |
0x12 | Craft Recipe Request | Current | Pre |
New/modified data types
Slot
Name | Type | Meaning |
---|---|---|
Short | The item-1 signifies that the slot is empty, and no further data follows. Item IDs are now uniquely defined and are completely independent of block IDs.
| |
Item Count | Optional Byte | Not present if Block ID is -1 .
|
Item Damage | Optional Short | Not present if Block ID is -1 .
|
NBT | Optional NBT | Not present if Block ID is -1 . If 0, there is no NBT data, and no further data follows. Otherwise the byte is the start of an NBT blob as shown below:
|
Particle
Field Name | Field Type | Meaning |
---|---|---|
ID | VarInt | The ID of the particle type, see below. |
Data | Varies | Varies based on the particle type, see below. |
Particle Name | Particle ID | Data | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ambient_entity_effect | 0 | None | |||||||||||||||
angry_villager | 1 | None | |||||||||||||||
barrier | 2 | None | |||||||||||||||
block | 3 |
| |||||||||||||||
bubble | 4 | None | |||||||||||||||
cloud | 5 | None | |||||||||||||||
crit | 6 | None | |||||||||||||||
damage_indicator | 7 | None | |||||||||||||||
dragon_breath | 8 | None | |||||||||||||||
dripping_lava | 9 | None | |||||||||||||||
dripping_water | 10 | None | |||||||||||||||
dust | 11 |
| |||||||||||||||
effect | 12 | None | |||||||||||||||
elder_guardian | 13 | None | |||||||||||||||
enchanted_hit | 14 | None | |||||||||||||||
enchant | 15 | None | |||||||||||||||
end_rod | 16 | None | |||||||||||||||
entity_effect | 17 | None | |||||||||||||||
explosion_emitter | 18 | None | |||||||||||||||
explosion | 19 | None | |||||||||||||||
falling_dust | 20 |
| |||||||||||||||
firework | 21 | None | |||||||||||||||
fishing | 22 | None | |||||||||||||||
flame | 23 | None | |||||||||||||||
happy_villager | 24 | None | |||||||||||||||
heart | 25 | None | |||||||||||||||
instant_effect | 26 | None | |||||||||||||||
item | 27 |
| |||||||||||||||
item_slime | 28 | None | |||||||||||||||
item_snowball | 29 | None | |||||||||||||||
large_smoke | 30 | None | |||||||||||||||
lava | 31 | None | |||||||||||||||
mycelium | 32 | None | |||||||||||||||
note | 33 | None | |||||||||||||||
poof | 34 | None | |||||||||||||||
portal | 35 | None | |||||||||||||||
rain | 36 | None | |||||||||||||||
smoke | 37 | None | |||||||||||||||
spit | 38 | None | |||||||||||||||
sweep_attack | 39 | None | |||||||||||||||
totem_of_undying | 40 | None | |||||||||||||||
underwater | 41 | None | |||||||||||||||
splash | 42 | None | |||||||||||||||
witch | 43 | None |
Entity Metadata Format
Note that entity metadata is a totally distinct concept from block metadata. It is not required to send all metadata fields, or even any metadata fields, so long as the terminating entry is correctly sent.
Entity Metadata is an array of entries, each of which looks like the following:
Name | Type | Meaning |
---|---|---|
Index | Unsigned Byte | Unique index key determining the meaning of the following value, see the table below. If this is 0xff then the it is the end of the Entity Metadata array and no more is read.
|
Type | Optional Byte Enum | Only if Index is not 0xff ; the type of the index, see the table below
|
Value | Optional value of Type | Only if Index is not 0xff : the value of the metadata field
|
Value of Type field | Type of Value field | Notes |
---|---|---|
0 | Byte | |
1 | VarInt | |
2 | Float | |
3 | String | |
4 | Chat | |
5 | OptChat (Boolean + Optional Chat) | Chat is present if the Boolean is set to true |
Slot | ||
Boolean | ||
Rotation | 3 floats: rotation on x, rotation on y, rotation on z | |
Position | ||
OptPosition (Boolean + Optional Position) | Position is present if the Boolean is set to true | |
Direction (VarInt) | (Down = 0, Up = 1, North = 2, South = 3, West = 4, East = 5) | |
OptUUID (Boolean + Optional UUID) | UUID is present if the Boolean is set to true | |
OptBlockID (VarInt) | 0 for absent, otherwise index into the global palette. (Air is treated as absent) | |
NBT Tag | ||
15 | #Particle |
Entity
The base class.
Index | Type | Meaning | Default | |
---|---|---|---|---|
0 | Byte | Bit mask | Meaning | 0 |
0x01 | On Fire | |||
0x02 | Crouched | |||
0x04 | Unused (previously riding) | |||
0x08 | Sprinting | |||
0x10 | Unused (previously eating/drinking/blocking; use hand state now) | |||
0x20 | Invisible | |||
0x40 | Glowing effect | |||
0x80 | Flying with elytra | |||
1 | VarInt | Air | 300 | |
Boolean | Is custom name visible | false | ||
Custom name | empty | |||
4 | Boolean | Is silent | false | |
5 | Boolean | No gravity | false |
AreaEffectCloud
Extends Entity.
Index | Type | Meaning | Default | |
---|---|---|---|---|
6 | Float | Radius | 0.5 | |
7 | VarInt | Color (only for mob spell particle) | 0 | |
8 | Boolean | Ignore radius and show effect as single point, not area | false | |
9 | Particle | The #Particle | effect
| |
9 | VarInt | Particle ID | 15 (mobSpell) | |
10 | VarInt | Particle parameter 1 | 0 | |
11 | VarInt | Particle parameter 2 | 0 |
Block Actions
No changes so far.
Plugin Channels
MC|StopSound
Server to client
Used to implement the
/stopsound
command. Stops a sound that is currently playing on the client.
Field name | Field type | Notes |
---|---|---|
Sound category | String | Should be one of the sound categories used in Named Sound Effect, but if it's invalid or empty then it is (intentionally) treated as all sound categories. |
Sound name | String | A sound effect name. If left empty, all sounds are stopped. |
Emptiness of sound category or sound name can be combined, IE a empty sound name but a set sound category will stop all sounds in the given category.
This plugin channel has been replaced by the stop sound packet.
Play
Clientbound
Spawn Painting
This packet shows location, name, and type of painting.
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x04 | Play | Client | Entity ID | VarInt | |
Entity UUID | UUID | ||||
Motive | |||||
Location | Position | Center coordinates (see below) | |||
Direction | Byte Enum | Direction the painting faces (North = 2, South = 0, West = 1, East = 3) |
Calculating the center of an image: given a (width × height) grid of cells, with (0, 0)
being the top left corner, the center is (max(0, width / 2 - 1), height / 2)
. E.g. (1, 0)
for a 2×1 painting, or (1, 2)
for a 4×4 painting.
List of paintings by coordinates in paintings_kristoffer_zetterstrand.png
(where x and y are in pixels from the top left and width and height are in pixels or 16ths of a block):
Name | ID | x | y | width | height |
---|---|---|---|---|---|
Kebab minecraft:kebab
|
0 | 0 | 0 | 16 | 16 |
Aztec minecraft:aztec
|
1 | 16 | 0 | 16 | 16 |
Alban minecraft:alban
|
2 | 32 | 0 | 16 | 16 |
Aztec2 minecraft:aztec2
|
3 | 48 | 0 | 16 | 16 |
Bomb minecraft:bomb
|
4 | 64 | 0 | 16 | 16 |
Plant minecraft:plant
|
5 | 80 | 0 | 16 | 16 |
Wasteland minecraft:wasteland
|
6 | 96 | 0 | 16 | 16 |
Pool minecraft:pool
|
7 | 0 | 32 | 32 | 16 |
Courbet minecraft:courbet
|
8 | 32 | 32 | 32 | 16 |
Sea minecraft:sea
|
9 | 64 | 32 | 32 | 16 |
Sunset minecraft:sunset
|
10 | 96 | 32 | 32 | 16 |
Creebet minecraft:creebet
|
11 | 128 | 32 | 32 | 16 |
Wanderer minecraft:wanderer
|
12 | 0 | 64 | 16 | 32 |
Graham minecraft:graham
|
13 | 16 | 64 | 16 | 32 |
Match minecraft:match
|
14 | 0 | 128 | 32 | 32 |
Bust minecraft:bust
|
15 | 32 | 128 | 32 | 32 |
Stage minecraft:stage
|
16 | 64 | 128 | 32 | 32 |
Void minecraft:void
|
17 | 96 | 128 | 32 | 32 |
SkullAndRoses skull_and_roses
|
18 | 128 | 128 | 32 | 32 |
Wither minecraft:wither
|
19 | 160 | 128 | 32 | 32 |
Fighters minecraft:fighters
|
20 | 0 | 96 | 64 | 32 |
Pointer minecraft:pointer
|
21 | 0 | 192 | 64 | 64 |
Pigscene minecraft:pigscene
|
22 | 64 | 192 | 64 | 64 |
BurningSkull minecraft:burning_skull
|
23 | 128 | 192 | 64 | 64 |
Skeleton minecraft:skeleton
|
24 | 192 | 64 | 64 | 48 |
DonkeyKong minecraft:donkey_kong
|
25 | 192 | 112 | 64 | 48 |
The Minecraft Wiki article on paintings also provides a list of painting names to the actual images.
Block Change
Fired whenever a block is changed within the render distance.
Changing a block in a chunk that is not loaded is not a stable action. The Notchian client currently uses a shared empty chunk which is modified for all block changes in unloaded chunks; while in 1.9 this chunk never renders in older versions the changed block will appear in all copies of the empty chunk. Servers should avoid sending block changes in unloaded chunks and clients should ignore such packets.
Packet ID | State | Bound To | Field Name | Field Type | Notes |
---|---|---|---|---|---|
0x0B | Play | Client | Location | Position | Block Coordinates |
Block ID | VarInt | The new block state ID for the block as given in the global palette. type = id >> 4 , meta = id & 15 , when writing data: id = type << 4 | (meta & 15) ) |
Statistics
Sent as a response to Client Status (id 1).
Packet ID | State | Bound To | Field Name | Field Type | Notes | ||
---|---|---|---|---|---|---|---|
0x07 | Play | Client | Count | VarInt | Number of elements in the following array | ||
Statistic | Name | Array | String (32767) | https://gist.github.com/Alvin-LB/8d0d13db00b3c00fd0e822a562025eff | |||
Category ID | VarInt | See below | |||||
Statistic ID | VarInt | See below | |||||
Value | VarInt | The amount to set it to |
Categories (these are namespaced, but with :</code. replaced with
.
):
Name
ID
Registry
minecraft.mined
0
Blocks
minecraft.crafted
1
Items
minecraft.used
2
Items
minecraft.broken
3
Items
minecraft.picked_up
4
Items
minecraft.dropped
5
Items
minecraft.killed
6
Entities
minecraft.killed_by
7
Entities
minecraft.custom
8
Custom
Blocks, Items, and Entities use block (not block state), item, and entity ids.
Custom has the following (unit only matters for clients):
Name
ID
Unit
minecraft.leave_game
0
None
minecraft.play_one_minute
1
Time
minecraft.Time_since_death
2
Time
minecraft.sneak_Time
3
Time
minecraft.walk_one_cm
4
Distance
minecraft.crouch_one_cm
5
Distance
minecraft.sprint_one_cm
6
Distance
minecraft.swim_one_cm
7
Distance
minecraft.fall_one_cm
8
Distance
minecraft.climb_one_cm
9
Distance
minecraft.fly_one_cm
10
Distance
minecraft.dive_one_cm
11
Distance
minecraft.minecart_one_cm
12
Distance
minecraft.boat_one_cm
13
Distance
minecraft.pig_one_cm
14
Distance
minecraft.horse_one_cm
15
Distance
minecraft.aviate_one_cm
16
Distance
minecraft.jump
17
None
minecraft.drop
18
None
minecraft.damage_dealt
19
Damage
minecraft.damage_taken
20
Damage
minecraft.deaths
21
None
minecraft.mob_kills
22
None
minecraft.animals_bred
23
None
minecraft.player_kills
24
None
minecraft.fish_caught
25
None
minecraft.talked_to_villager
26
None
minecraft.traded_with_villager
27
None
minecraft.eat_cake_slice
28
None
minecraft.fill_cauldron
29
None
minecraft.use_cauldron
30
None
minecraft.clean_armor
31
None
minecraft.clean_banner
32
None
minecraft.interact_with_brewingstand
33
None
minecraft.interact_with_beacon
34
None
minecraft.inspect_dropper
35
None
minecraft.inspect_hopper
36
None
minecraft.inspect_dispenser
37
None
minecraft.play_noteblock
38
None
minecraft.tune_noteblock
39
None
minecraft.pot_flower
40
None
minecraft.trigger_trapped_chest
41
None
minecraft.open_enderchest
42
None
minecraft.enchant_item
43
None
minecraft.play_record
44
None
minecraft.interact_with_furnace
45
None
minecraft.interact_with_crafting_table
46
None
minecraft.open_chest
47
None
minecraft.sleep_in_bed
48
None
minecraft.open_shulker_box
49
None
Units:
- None: just a normal number (formatted with 0 decimal places)
- Damage: value is 10 times the normal amount
- Distance: a distance in centimeters (hundredths of blocks)
- Time: a time span in ticks
Multi Block Change
Fired whenever 2 or more blocks are changed within the same chunk on the same tick.
Changing blocks in chunks not loaded by the client is unsafe (see note on Block Change).
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x10 0x0F
Play
Client
Chunk X
Int
Chunk X coordinate
Chunk Z
Int
Chunk Z coordinate
Record Count
VarInt
Number of elements in the following array, i.e. the number of blocks affected
Record
Horizontal Position
Array
Unsigned Byte
The 4 most significant bits (0xF0
) encode the X coordinate, relative to the chunk. The 4 least significant bits (0x0F
) encode the Z coordinate, relative to the chunk.
Y Coordinate
Unsigned Byte
Y coordinate of the block
Block ID
VarInt
The new block state ID for the block as given in the global palette. (When reading data: type = id >> 4
, meta = id & 15
, when writing data: id = type << 4 | (meta & 15)
) See that section for more information.
To decode the position into a world position:
worldX = (horizPos >> 4 & 15) + (chunkX * 16);
worldY = vertPos;
worldZ = (horizPos & 15) + (chunkZ * 16);
Tab-Complete (clientbound)
The following information needs to be added to this page:
This is most definitely no longer an accurate description of this packet
The server responds with a list of auto-completions of the last word sent to it. In the case of regular chat, this is a player username. Command names and parameters are also supported. The client sorts these alphabetically before listing them.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x0E 0x10
Play
Client
Transaction Id
VarInt
This id should also be used in the tab completion response packet, or it will be ignored.
Start
VarInt
Length
VarInt
Count
VarInt
Number of elements in the following array
Matches
Array of String (32767)
One eligible command, note that each command is sent separately instead of in a single string, hence the need for Count
Declare Commands
The following information needs to be added to this page:
This information is probably incomplete/inaccurate
Lists all of the commands on the server, and how they are parsed.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x11
Play
Client
Count
VarInt
Length of the following array
Nodes
Array of Node
A array of CommandNode
s
Root index
VarInt
Index of the RootCommandNode
in the previous array
Node:
Field Name
Field Type
Notes
Flags
Byte
Bit mask
Meaning
0x03
Type of the CommandNode
0
RootCommandNode
1
LiteralCommandNode
2
ArgumentCommandNode
0x04
Has command
0x08
Has redirect node
0x10
Has custom suggestions, currently only present if the type is a ArgumentCommandNode
Children Count
VarInt
Length of the following array
Children
Array of VarInt
The indexes of the children CommandNode
s within the Nodes
array
Redirect node
Optional VarInt
Only if flags & 0x08. Points to the redirect CommandNode
within the Nodes
array
Extra node data
Extra node data
Type depends on the CommandNode
type, see below.
Extra node data:
Type
Field Name
Field Type
Notes
RootCommandNode
Empty
Empty
LiteralCommandNode
Literal
String (32767)
The text
ArgumentCommandNode
Name
String (32767)
The name of the argument
Parser
Identifier
One of several known to the client, listed below. If the client does not know the parser, reading this RequiredArgumentBuilder stops immediately (following fields are not read)
Properties
Optional, varies
See below. Varies depending on the parser.
Suggests
Optional Identifier
Only present if (flags & 0x10) != 0. See below for the available types.
Parsers:
Identifier
Description
Properties
brigadier:bool
Boolean value (true
or false
, case-sensitive)
None
brigadier:double
Double
Specifies min and max values:
Name
Type
Description
Flags
Byte
Min
Optional double
Only if flags & 0x01. If not specified, defaults to -Double.MAX_VALUE
(≈ -1.7976931348623157E307)
Max
Optional double
Only if flags & 0x02. If not specified, defaults to Double.MAX_VALUE
(≈ 1.7976931348623157E307)
brigadier:float
Float
Specifies min and max values:
Name
Type
Description
Flags
Byte
Min
Optional float
Only if flags & 0x01. If not specified, defaults to -Float.MAX_VALUE
(≈ -3.4028235E38)
Max
Optional float
Only if flags & 0x02. If not specified, defaults to Float.MAX_VALUE
(≈ 3.4028235E38)
brigadier:integer
Integer
Specifies min and max values:
Name
Type
Description
Flags
Byte
Min
Optional integer
Only if flags & 0x01. If not specified, defaults to Integer.MIN_VALUE
(-2147483648)
Max
Optional integer
Only if flags & 0x02. If not specified, defaults to Integer.MAX_VALUE
(2147483647)
brigadier:string
A string
A VarInt enum:
Value
Name
Description
0
SINGLE_WORD
Reads a single word
1
QUOTABLE_PHRASE
If it starts with a "
, keeps reading until another "
(allowing escaping with \
). Otherwise behaves the same as SINGLE_WORD
2
GREEDY_PHRASE
Reads the rest of the content after the cursor. Quotes will not be removed.
minecraft:entity
A selector, player name, or UUID.
Has a single flags byte:
Bit mask
Meaning
0x01
Only allows 1 entity/player
0x02
Only allows players
minecraft:game_profile
A player, online or not. Can also use a selector, which may match one or more players (but not entities).
None
minecraft:block_pos
A location, represented as 3 numbers (which must be integers). May use relative locations with ~
.
None
minecraft:vec3
A location, represented as 3 numbers (which may have a decimal point, but will be moved to the center of a block if none is specified). May use relative locations with ~
.
None
minecraft:vec2
A location, represented as 2 numbers (which may have a decimal point, but will be moved to the center of a block if none is specified). May use relative locations with ~
.
None
minecraft:block
A block state, optionally including NBT and state information.
None
minecraft:item
An item, optionally including NBT.
None
minecraft:color
A chat color. One of the names from Chat#Colors, or reset
. Case-insensitive.
None
minecraft:component
A JSON Chat component.
None
minecraft:message
A regular message, potentially including selectors.
None
minecraft:nbt
An NBT value, parsed using JSON-NBT rules.
None
minecraft:nbt_path
A path within an NBT value, allowing for array and member accesses.
None
minecraft:objective
A scoreboard objective.
None
minecraft:objective_criteria
A single score criterion.
None
minecraft:operation
A scoreboard operator
None
minecraft:particle
A particle effect (an identifier with extra information following it for specific particles, mirroring the Particle packet)
None
minecraft:rotation
An angle, represented as 2 numbers (which may have a decimal point, but will be moved to the center of a block if none is specified). May use relative locations with ~
.
None
minecraft:scoreboard_slot
A scoreboard display position slot. list
, sidebar
, belowName
, and sidebar.team.${color}
for all chat colors (reset
is not included)
None
minecraft:score_holder
Something that can join a team. Allows selectors and *
.
Has a single flags byte:
Bit mask
Meaning
0x01
Unknown.
0x02
Unknown.
minecraft:swizzle
A collection of up to 3 axes.
None
minecraft:team
The name of a team. Parsed as an unquoted string.
None
minecraft:item_slot
A name for an inventory slot.
None
minecraft:resource_location
An Identifier.
None
minecraft:mob_effect
A potion effect.
None
minecraft:function
A function.
None
minecraft:entity_anchor
The entity anchor related to the facing argument in the teleport command, is feet or eyes.
None
minecraft:range
A range of values with a min and a max.
Name
Type
Description
Decimals
Boolean
Whether decimal values are allowed.
Suggestion types:
Identifier
Description
minecraft:ask_server
Sends the Tab-Complete
packet to the server to request tab completions.
minecraft:all_recipes
Suggests all the available recipes.
minecraft:available_sounds
Suggests all the available sounds.
minecraft:summonable_entities
Suggests all the summonable entities.
Named Sound Effect
- See also: #Sound Effect
Used to play a sound effect on the client. Custom sounds may be added by resource packs.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x19 0x1A
Play
Client
Sound Name
String (256) Identifier
All sound effect names as of 1.12.2 can be seen here.
Sound Category
VarInt Enum
The category that this sound will be played from (current categories)
Effect Position X
Int
Effect X multiplied by 8 (fixed-point number with only 3 bits dedicated to the fractional part)
Effect Position Y
Int
Effect Y multiplied by 8 (fixed-point number with only 3 bits dedicated to the fractional part)
Effect Position Z
Int
Effect Z multiplied by 8 (fixed-point number with only 3 bits dedicated to the fractional part)
Volume
Float
1 is 100%, can be more
Pitch
Float
Float between 0.5 and 2.0 by Notchian clients
Chunk Data
- Main article: Chunk Format
- See also: #Unload Chunk
The server only sends skylight information for chunk pillars in the Overworld, it's up to the client to know in which dimenison the player is currently located. You can also infer this information from the primary bitmask and the amount of uncompressed bytes sent. This packet also sends all block entities in the chunk (though sending them is not required; it is still legal to send them with Update Block Entity later).
Indexes into the global palette are still used, but since the global palette has changed, behavior is different.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x20 0x21
Play
Client
Chunk X
Int
Chunk coordinate (block coordinate divided by 16, rounded down)
Chunk Z
Int
Chunk coordinate (block coordinate divided by 16, rounded down)
Ground-Up Continuous
Boolean
See Chunk Format
Primary Bit Mask
VarInt
Bitmask with bits set to 1 for every 16×16×16 chunk section whose data is included in Data. The least significant bit represents the chunk section at the bottom of the chunk column (from y=0 to y=15).
Size
VarInt
Size of Data in bytes
Data
Byte array
See data structure in Chunk Format
Number of block entities
VarInt
Length of the following array
Block entities
Array of NBT Tag
All block entities in the chunk. Use the x, y, and z tags in the NBT to determine their positions.
Spawn Particle
Displays the named particle
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x22 0x23
Play
Client
Particle ID
Int
The particle ID listed in #Particle.
Long Distance
Boolean
If true, particle distance increases from 256 to 65536
X
Float
X position of the particle
Y
Float
Y position of the particle
Z
Float
Z position of the particle
Offset X
Float
This is added to the X position after being multiplied by random.nextGaussian()
Offset Y
Float
This is added to the Y position after being multiplied by random.nextGaussian()
Offset Z
Float
This is added to the Z position after being multiplied by random.nextGaussian()
Particle Data
Float
The data of each particle
Particle Count
Int
The number of particles to create
Data
Array of VarInt Varies
Length depends on particle. "iconcrack" has length of 2, "blockcrack", "blockdust", and "fallingdust" have lengths of 1, the rest have 0. The variable data listed in #Particle
Craft Recipe Response
Response to the serverbound packet (Craft Recipe Request), with the same recipe ID. Appears to be used to notify the UI.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x2B 0x2C
Play
Client
Window ID
Byte
Recipe
VarInt Identifer
A recipe ID
Face Player
Used to rotate the client player to face the given location or entity (for /teleport [<targets>] <x> <y> <z> facing
).
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x30
Play
Client
Feet/eyes
VarInt enum
Values are feet=0, eyes=1. If set to eyes, aims using the head position; otherwise aims using the feet position.
Target x
Double
x coordinate of the point to face towards
Target y
Double
y coordinate of the point to face towards
Target z
Double
z coordinate of the point to face towards
Is entity
Boolean
If true, additional information about an entity is provided.
Entity ID
Optional VarInt
Only if is entity is true — the entity to face towards
Entity feet/eyes
Optional VarInt enum
Whether to look at the entity's eyes or feet. Same values and meanings as before, just for the entity's head/feet.
If the entity given by entity ID cannot be found, this packet should be treated as if is entity was false.
Unlock Recipes
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x31 0x33
Play
Client
Action
VarInt
0: init, 1: add, 2: remove
Crafting Book Open
Boolean
If true, then the crafting book will be open when the player opens its inventory.
Filtering Craftable
Boolean
If true, then the filtering option is active when the players opens its inventory.
Array size 1
VarInt
Number of elements in the following array
Recipe IDs
Array of VarInt Identifier
Array size 2
Optional VarInt
Number of elements in the following array, only present if mode is 0 (init)
Recipe IDs
Optional Array of VarInt Identifier, only present if mode is 0 (init)
Action:
- 0 (init) = All the recipes in the list 2 will added to the recipe book. All the recipes in list 1 will be tagged as displayed, recipes that aren't tagged will be shown in the notification. VERIFY LIST ORDER?
- 1 (add) = All the recipes in the list are added and their icon will be shown in the notification.
- 2 (remove) = Remove all the recipes in the list. This allows them to re-displayed when they are readded.
Scoreboard Objective
This is sent to the client when it should create a new scoreboard objective or remove one.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x42 0x44
Play
Client
Objective Name
String (16)
An unique name for the objective
Mode
Byte
0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text.
Objective Value
Optional String (32)
Only if mode is 0 or 2. The text to be displayed for the score
Type
Optional String VarInt Enum
Only if mode is 0 or 2. “integer” or “hearts”
Teams
Creates and updates teams.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x44 0x46
Play
Client
Team Name
String (16)
A unique name for the team. (Shared with scoreboard).
Mode
Byte
Determines the layout of the remaining packet
0: create team
Team Display Name
String (32)
Team Prefix
String (16)
Displayed before the names of players that are part of this team
Team Suffix
String (16)
Displayed after the names of players that are part of this team
Friendly Flags
Byte
Bit mask. 0x01: Allow friendly fire, 0x02: can see invisible players on same team
Name Tag Visibility
String Enum (32)
always
, hideForOtherTeams
, hideForOwnTeam
, never
Collision Rule
String Enum (32)
always
, pushOtherTeams
, pushOwnTeam
, never
Color Formatting
Byte VarInt enum
For colors, the same Chat colors (0-15). -1 indicates RESET/no color. See below for more info.
Entity Count
VarInt
Number of elements in the following array
Entities
Array of String (40)
Identifiers for the entities in this team. For players, this is their username; for other entities, it is their UUID.
1: remove team
no fields
no fields
2: update team info
Team Display Name
String (32)
Team Prefix
String (16)
Displayed before the names of entities that are part of this team
Team Suffix
String (16)
Displayed after the names of entities that are part of this team
Friendly Flags
Byte
Bit mask. 0x01: Allow friendly fire, 0x02: can see invisible entities on same team
Name Tag Visibility
String Enum (32)
always
, hideForOtherTeams
, hideForOwnTeam
, never
Collision Rule
String Enum (32)
always
, pushOtherTeams
, pushOwnTeam
, never
Color Formatting
Byte VarInt enum
For colors, the same Chat colors (0-15). -1 indicates RESET/no color. See below for more info.
3: add players to team
Entity Count
VarInt
Number of elements in the following array
Entities
Array of String (40)
Identifiers for the entities added. For players, this is their username; for other entities, it is their UUID.
4: remove players from team
Entity Count
VarInt
Number of elements in the following array
Entities
Array of String (40)
Identifiers for the entities removed. For players, this is their username; for other entities, it is their UUID.
Formatting: The formatting of a team defines how the names of the team members are visualized. The following table lists all the possible formattings.
ID
Formatting
0-15
Color formatting, same values as Chat colors.
16
Obfuscated
17
Bold
18
Strikethrough
19
Underlined
20
Italic
21
Reset
Stop Sound
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x4B
Play
Client
Flags
Byte
Controls which fields are present.
Source
Optional VarInt enum
Only if flags is 3 or 1 (bit mask 0x1). See below. If not present, then sounds from all sources are cleared.
Sound
Optional Identifier
Only if flags is 2 or 3 (bit mask 0x2). A sound effect name, see Named Sound Effect. If not present, then all sounds are cleared.
Categories:
Name
Value
master
0
music
1
record
2
weather
3
block
4
hostile
5
neutral
6
player
7
ambient
8
voice
9
Declare Recipes
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x53
Play
Client
Num Recipes
VarInt
Length of the following array
Recipe
Recipe ID
Array
Identifier
Type
String
The recipe type, see below
Data
Optional, varies
Additional data for the recipe. For some types, there will be no data.
Recipe types:
Type
Description
Data
crafting_shapeless
Shapeless crafting recipe. All items in the ingredient list must be present, but in any order/slot.
As follows:
Name
Type
Description
Group
String
Used to group similar recipes together in the recipe book. Tag is present in recipe JSON.
Ingredient count
VarInt
Length of the following array
Ingredients
Array of Ingredient
Result
Slot
crafting_shaped
Shaped crafting recipe. All items must be present in the same pattern (which may be flipped horizontally or translated)
As follows:
Name
Type
Description
Width
VarInt
Height
VarInt
Group
String
Used to group similar recipes together in the recipe book. Tag is present in recipe JSON.
Ingredients
Array of Ingredient
Length is width * height. Indexed by x + (y * width).
Result
Slot
crafting_special_armordye
Recipe for dying leather armor
None
crafting_special_bookcloning
Recipe for copying contents of written books
None
crafting_special_mapcloning
Recipe for copying maps
None
crafting_special_mapextending
Recipe for adding paper to maps
None
crafting_special_firework_rocket
Recipe for making firework rockets
None
crafting_special_firework_star
Recipe for making firework stars
None
crafting_special_firework_star_fade
Recipe for making firework stars fade between multiple colors
None
crafting_special_repairitem
Recipe for repairing items via crafting
None
crafting_special_tippedarrow
Recipe for crafting tipped arrows
None
crafting_special_bannerduplicate
Recipe for copying banner patterns
None
crafting_special_banneraddpattern
Recipe for adding patterns to banners
None
crafting_special_shielddecoration
Recipe for applying a banner's pattern to a shield
None
crafting_special_shulkerboxcoloring
Recipe for recoloring a shulker box
None
Ingredient is defined as:
Name
Type
Description
Count
VarInt
Length of the following array
Items
Array of Slot
Any item in this array may be used for the recipe. The count of each item should be 1.
Tags
This packet MUST be send, even if it's empty, not doing so can crash the client (e.g. when clicking a fuel slot in a furnace).
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x54
Play
Client
Block Tags
(See below)
IDs are block IDs
Item Tags
(See below)
IDs are item IDs
Tags look like:
Field Name
Field Type
Notes
Length
VarInt
Length of the following array
Tags
Tag name
Array
Identifier
Count
VarInt
Length of the following array
Entries
Array of VarInt
Numeric ID of the block/item.
Serverbound
Tab-Complete (serverbound)
The following information needs to be added to this page:
This is most definitely no longer an accurate description of this packet
Sent when the user presses tab while writing text.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x01 0x04
Play
Server
Transaction Id
VarInt
The id received in the tab completion request packet, must match or the client will ignore this packet.
Text
String (32767 256)
All text behind the cursor without the /
(e.g. to the left of the cursor in left-to-right languages like English)
Assume Command
Boolean
If true, the server will parse Text as a command even if it doesn't start with a /
. Used in the command block GUI.
Has Position
Boolean
Looked At Block
Optional Position
The position of the block being looked at. Only sent if Has Position is true.
Craft Recipe Request
A replacement for Prepare Crafting Grid. It appears to behave more or less the same, but the client does not specify where to move the items.
This packet is sent when a player clicks a recipe in the crafting book that is craftable (white border).
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x12
Play
Server
Window ID
Byte
Recipe
VarInt Identifier
A recipe ID
Make all
Boolean
Affects the amount of items processed; true if shift is down when clicked
Handshaking
Clientbound
There are no clientbound packets in the Handshaking state, since the protocol immediately switches to a different state after the client sends the first packet.
Serverbound
Handshake
This causes the server to switch into the target state.
Packet ID
State
Bound To
Field Name
Field Type
Notes
0x00
Handshaking
Server
Protocol Version
VarInt
See protocol version numbers (currently 340 353)
Server Address
String
Hostname or IP, e.g. localhost or 127.0.0.1, that was used to connect. The Notchian server does not use this information.
Server Port
Unsigned Short
Default is 25565. The Notchian server does not use this information.
Next State
VarInt Enum
1 for status, 2 for login
Status
Clientbound
No changes so far.
Serverbound
No changes so far.
Login
Clientbound
No changes so far.
Serverbound
No changes so far.