Difference between revisions of "Bedrock Protocol"

From wiki.vg
Jump to navigation Jump to search
(Server To Client Handshake description)
(Document almost every packet!)
Line 12: Line 12:
  
 
This is the [https://minecraft.gamepedia.com/Bedrock_Edition Bedrock Edition] Protocol Documentation.
 
This is the [https://minecraft.gamepedia.com/Bedrock_Edition Bedrock Edition] Protocol Documentation.
The Bedrock Edition Protocol uses [[wikipedia:User Datagram Protocol|UDP]] instead of [[wikipedia:Transmission Control Protocol|TCP]] that is used for the Java Edition.<br>
+
The Bedrock Edition Protocol uses [[wikipedia:User Datagram Protocol|UDP]] instead of [[wikipedia:Transmission Control Protocol|TCP]] that is used for the Java Edition.&lt;br&gt;
 
The Bedrock Edition Client uses RakNet as its protocol library.
 
The Bedrock Edition Client uses RakNet as its protocol library.
  
Line 77: Line 77:
 
  |-
 
  |-
 
  ! VarInt
 
  ! VarInt
  | &ge; 1<br>&le; 5
+
  | &amp;ge; 1&lt;br&gt;&amp;le; 5
 
  | -2147483648 and 2147483647
 
  | -2147483648 and 2147483647
 
  |  
 
  |  
 
  |-
 
  |-
 
  ! VarLong
 
  ! VarLong
  | &ge; 1<br>&le; 10
+
  | &amp;ge; 1&lt;br&gt;&amp;le; 10
 
  | -2^63 and 2^63-1
 
  | -2^63 and 2^63-1
 
  |
 
  |
Line 113: Line 113:
 
  |-
 
  |-
 
  |rowspan="3"| 0x01
 
  |rowspan="3"| 0x01
  |rowspan="3"|
+
  |rowspan="3"| Server
 
  | Protocol version
 
  | Protocol version
 
  | int
 
  | int
  |
+
  |  
 
  |-
 
  |-
 
  | Chain data
 
  | Chain data
Line 124: Line 124:
 
  | Skin data
 
  | Skin data
 
  | JWT Data
 
  | JWT Data
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
 
==== Play Status ====
 
==== Play Status ====
Line 137: Line 139:
 
  |-
 
  |-
 
  |rowspan="1"| 0x02
 
  |rowspan="1"| 0x02
  |rowspan="1"|
+
  |rowspan="1"| Client
 
  | Status
 
  | Status
 
  | int
 
  | int
 
  | The current status of the client.
 
  | The current status of the client.
 
  |}
 
  |}
 
+
 
The values for each status are as follows:
 
The values for each status are as follows:
 
* 0: Login success
 
* 0: Login success
Line 164: Line 166:
 
  |rowspan="1"| 0x03
 
  |rowspan="1"| 0x03
 
  |rowspan="1"| Client
 
  |rowspan="1"| Client
  |JWT data
+
  | JWT data
  |JWT String
+
  | JWT String
  |Contains the salt to complete the Diffie-Hellman key exchange
+
  | Contains the salt to complete the Diffie-Hellman key exchange
 
  |}
 
  |}
 +
 +
  
 
==== Client To Server Handshake ====
 
==== Client To Server Handshake ====
Line 178: Line 182:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x04
+
  |rowspan="0"| 0x04
  |rowspan="1"| Server
+
  |rowspan="0"| Server
 +
 
 
  |}
 
  |}
 +
 +
  
 
==== Disconnect ====
 
==== Disconnect ====
Line 193: Line 200:
 
  |rowspan="2"| 0x05
 
  |rowspan="2"| 0x05
 
  |rowspan="2"| Client
 
  |rowspan="2"| Client
  |Disconnect screen visibility
+
  | Disconnect screen visibility
  |boolean
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  |Kick message
+
  | Kick message
  |String
+
  | string
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
 
==== Resource Packs info ====
 
==== Resource Packs info ====
Line 211: Line 220:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x06
+
  |rowspan="4"| 0x06
  |rowspan="2"| Client
+
  |rowspan="4"| Client
 
  | Forced to Accept
 
  | Forced to Accept
  | boolean
+
  | bool
 
  | If the resource pack requires the client accept it.
 
  | If the resource pack requires the client accept it.
 
  |-
 
  |-
 
  | Scripting Enabled
 
  | Scripting Enabled
  | boolean
+
  | bool
 
  | If scripting is enabled.
 
  | If scripting is enabled.
 +
|-
 +
| BehahaviorPackInfos
 +
| ResourcePackInfos
 +
|
 +
|-
 +
| ResourcePackInfos
 +
| ResourcePackInfos
 +
|
 
  |}
 
  |}
 +
 +
  
 
==== Resource Pack Stack ====
 
==== Resource Pack Stack ====
Line 281: Line 300:
 
| The version of the game the sent resource and behavior packs were made for.
 
| The version of the game the sent resource and behavior packs were made for.
 
|}
 
|}
 
  
 
==== Resource Pack Response ====
 
==== Resource Pack Response ====
  
 
{| class="wikitable"
 
{| class="wikitable"
! Packet ID
+
! Packet ID
! Bound To
+
! Bound To
! Field Name
+
! Field Name
! Field Type
+
! Field Type
! Notes
+
! Notes
|-
+
|-
| rowspan="3" | 0x08
+
|rowspan="3"| 0x08
| rowspan="3" | Server
+
|rowspan="3"| Server
| Status
+
| rowspan="3"
| byte
+
| rowspan="3"
| The status of the response.
+
| Status
|-
+
|-
| Pack IDs Size
+
| Pack IDs Size
| Little Endian short
+
| Little Endian short
| The amount of pack IDs included in this packet.
+
| The amount of pack IDs included in this packet.
|-
+
|-
| Pack IDs
+
| Pack IDs
| Array
+
| Array
| An array of all the Pack IDs.
+
| An array of all the Pack IDs.
|}
+
|}
 
+
 
The values for each status are as follows:
 
The values for each status are as follows:
 
* 0: None
 
* 0: None
Line 324: Line 342:
 
|-
 
|-
 
| rowspan="9" | 0x09
 
| rowspan="9" | 0x09
| rowspan="9" | Server & Client
+
| rowspan="9" | Server &amp; Client
 
| colspan="2" | Type
 
| colspan="2" | Type
 
| byte
 
| byte
Line 414: Line 432:
 
  |rowspan="1"| 0x0A
 
  |rowspan="1"| 0x0A
 
  |rowspan="1"| Client
 
  |rowspan="1"| Client
  |Time
+
  | Time
  |int
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
 
==== Start Game ====
 
==== Start Game ====
Line 428: Line 448:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x0B
+
  |rowspan="49"| 0x0B
  |rowspan="1"| Client
+
  |rowspan="49"| Client
  |}
+
  | Entity ID Self
 
+
| SignedVarLong
==== Add Player ====
+
  |
 
+
  |-
{| class="wikitable"
+
  | Runtime Entity ID
  ! Packet ID
+
  | UnsignedVarLong
  ! Bound To
+
  |
  ! Field Name
 
  ! Field Type
 
  ! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x0C
+
  | Player Gamemode
  |rowspan="1"| Client
+
| SignedVarInt
  |}
+
  |  
 
+
|-
==== Add Entity ====
+
  | Spawn
 
+
| Vector3
{| class="wikitable"
+
  |
  ! Packet ID
+
  |-
  ! Bound To
+
  | Rotation
  ! Field Name
+
  | Vector2
  ! Field Type
+
  |
  ! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x0D
+
  | Seed
  |rowspan="1"| Client
+
  | SignedVarInt
  |}
+
  |  
 
 
==== Remove Entity ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x0E
+
  | Dimension
  |rowspan="1"| Client
+
  | SignedVarInt
  | Unique Entity Id
+
  |  
  | long
+
  |-
  |
+
  | Generator
  |}
+
  | SignedVarInt
 
+
|  
==== Add Item Entity ====
+
  |-
 
+
  | Gamemode
{| class="wikitable"
+
  | SignedVarInt
  ! Packet ID
+
  |
  ! Bound To
 
  ! Field Name
 
  ! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x0F
+
  | Difficulty
  |rowspan="1"| Client
+
  | SignedVarInt
  |}
+
  |  
 
 
==== Take Item Entity ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="2"| 0x11
+
  | X
|rowspan="2"|
+
  | SignedVarInt
| Item Runtime Entity Id
+
  |  
  | ulong
 
  |
 
 
  |-
 
  |-
  | Runtime Entity Id
+
  | Y
  | ulong
+
  | VarInt
  |
+
  |  
  |}
+
  |-
 
+
| Z
==== Move Entity Absolute ====
+
  | SignedVarInt
 
+
  |
{| class="wikitable"
 
  ! Packet ID
 
  ! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="5"| 0x12
+
  | Has achievements disabled
|rowspan="5"| Server & Client
+
  | bool
| Runtime entity id
+
  |  
  | ulong
 
  |
 
 
  |-
 
  |-
  |Position
+
  | Day cycle stop time
  |Position
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  |Rotation
+
  | EDU offer
  |Position
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  |On ground
+
  | Has EDU features enabled
  |boolean
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  |Teleported
+
  | Rain level
  |boolean
+
  | float
  |
+
  |  
 
  |-
 
  |-
  |}
+
  | Lightning level
 
+
| float
This packet is sent serverbound when riding a horse/donkey.
+
|
 
+
|-
==== Move Player ====
+
| Has Confirmed Platform Locked Content
 
+
| bool
{| class="wikitable"
+
  |
  ! Packet ID
+
  |-
  ! Bound To
+
  | Is Multiplayer
  ! Field Name
+
  | bool
  ! Field Type
+
  |
  ! Notes
 
 
  |-
 
  |-
  |rowspan="8"| 0x13
+
  | Broadcast To LAN
|rowspan="8"|
+
  | bool
|Runtime entity id
+
  |  
  |ulong
 
  |
 
 
  |-
 
  |-
  |Position
+
  | Xbox Live Broadcast Mode
  |Position
+
  | VarInt
  |
+
  |  
 
  |-
 
  |-
  |Rotation
+
  | Platform Broadcast Mode
  |Position
+
  | VarInt
  |
+
  |  
 
  |-
 
  |-
  |Mode
+
  | Enable commands
  |byte
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  |On ground
+
  | Is texturepacks required
  |boolean
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  |Riding runtime entity id
+
  | GameRules
  |ulong
+
  | GameRules
  |
+
  |  
 
  |-
 
  |-
  |Teleportation cause
+
  | Bonus Chest
  |int
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  |Entity type
+
  | Map Enabled
  |int
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  |}
+
  | Permission Level
 
+
| SignedVarInt
Modes:
+
  |
* 0: Normal
 
* 1: Reset
 
* 2: Teleport
 
* 3: Rotation
 
 
 
Teleportation causes:
 
* 0: Unknown
 
* 1: Projectile
 
* 2: Chorus fruit
 
* 3: Command
 
* 4: Behavior
 
 
 
==== Rider Jump ====
 
 
 
{| class="wikitable"
 
  ! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x14
+
  | Server Chunk Tick Range
|rowspan="1"|
 
| Jump Strength
 
 
  | int
 
  | int
  |
+
  |  
|}
 
 
 
==== Update Block ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x15
+
  | Has Locked Behavior Pack
  |rowspan="1"|
+
  | bool
  |}
+
  |  
 
 
==== Add Painting ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="7"| 0x16
+
  | Has Locked Resource Pack
|rowspan="7"|
+
  | bool
| Unique Entity Id
+
  |  
  | long
 
  |
 
 
  |-
 
  |-
  | Runtime Entity Id
+
  | Is From Locked World Template
  | ulong
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  | Position X
+
  | Use MSA Gamertags Only
  | float
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  | Position Y
+
  | Is From World Template
  | float
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  | Position Z
+
  | Is World Template Option Locked
  | float
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  | Direction
+
  | Only Spawn V1 Villagers
  | int
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  | Name
+
  | Game Version
  | String
+
  | string
  |
+
|
 +
|-
 +
| Level ID
 +
| string
 +
|
 +
|-
 +
| World name
 +
| string
 +
|
 +
|-
 +
| Premium World Template Id
 +
| string
 +
|
 +
|-
 +
| Is Trial
 +
| bool
 +
|
 +
|-
 +
| Is Server Side movement enabled
 +
| bool
 +
|
 +
|-
 +
| Current Tick
 +
| long
 +
|
 +
|-
 +
| Enchantment Seed
 +
| SignedVarInt
 +
|
 +
|-
 +
| Block Palette
 +
| BlockPalette
 +
|
 +
|-
 +
| Itemstates
 +
| Itemstates
 +
|
 +
|-
 +
| Multiplayer Correlation ID
 +
| string
 +
  |  
 
  |}
 
  |}
 +
  
==== Tick Sync ====
+
 
 +
==== Add Player ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 678: Line 658:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x17
+
  |rowspan="25"| 0x0C
  |rowspan="2"|
+
  |rowspan="25"| Client
  | Request Timestamp
+
  | UUID
  | long (little endian)
+
  | UUID
  |
+
  |  
 
  |-
 
  |-
  | Response Timestamp
+
  | Username
  | long (little endian)
+
  | string
  |
+
  |  
|}
 
 
 
==== Level Sound Event (1) ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x18
+
  | Entity ID Self
  |rowspan="1"| Client
+
  | SignedVarLong
  |}
+
  |  
 
 
==== Level Event ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x19
+
  | Runtime Entity ID
  |rowspan="1"|
+
  | UnsignedVarLong
  |}
+
  |  
 
 
==== Block Event ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="3"| 0x1A
+
  | Platform Chat ID
  |rowspan="3"|
+
| string
  | Block Position
+
  |  
  | Position
+
|-
  |
+
  | X
 +
  | float
 +
  |  
 
  |-
 
  |-
  | Event Type
+
  | Y
  | int
+
  | float
  |
+
  |  
 
  |-
 
  |-
  | Event Data
+
  | Z
  | int
+
  | float
  |
+
  |  
|}
 
 
 
==== Entity Event ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x1B
+
  | Speed X
  |rowspan="1"|
+
| float
  |}
+
  |  
 
+
|-
==== Mob Effect ====
+
  | Speed Y
 
+
| float
{| class="wikitable"
+
  |
  ! Packet ID
+
  |-
  ! Bound To
+
  | Speed Z
  ! Field Name
+
  | float
  ! Field Type
+
  |
  ! Notes
 
 
  |-
 
  |-
  |rowspan="7"| 0x1C
+
  | Pitch
|rowspan="7"|
+
  | float
|Runtime entity id
+
  |  
  |ulong
 
  |
 
 
  |-
 
  |-
  |Event
+
  | Yaw
  |byte
+
  | float
  |
+
  |  
 
  |-
 
  |-
  |Effect id
+
  | Head Yaw
  |int
+
  | float
  |
+
  |  
 
  |-
 
  |-
  |Amplifier
+
  | Item
  |int
+
  | Item
  |
+
  |  
 
  |-
 
  |-
  |Particles
+
  | Metadata
  |boolean
+
  | MetadataDictionary
  |
+
  |  
 
  |-
 
  |-
  |Duration
+
  | Flags
  |int
+
  | UnsignedVarInt
  |
+
  |  
 
  |-
 
  |-
  |}
+
  | Command permission
 
+
| UnsignedVarInt
Events:
+
|
* 0: None
+
|-
* 1: Add
+
| Action Permissions
* 2: Modify
+
| UnsignedVarInt
* 3: Remove
+
|
 
+
|-
==== Update Attributes ====
+
| Permission Level
 
+
| UnsignedVarInt
{| class="wikitable"
+
|
  ! Packet ID
+
|-
  ! Bound To
+
| Custom stored permissions
  ! Field Name
+
| UnsignedVarInt
  ! Field Type
+
  |
  ! Notes
+
|-
 +
| User Id
 +
| long
 +
|
 +
|-
 +
| Links
 +
| Links
 +
|
 +
  |-
 +
  | Device ID
 +
  | string
 +
  |
 
  |-
 
  |-
  |rowspan="1"| 0x1D
+
  | Device OS
  |rowspan="1"|
+
| int
 +
  |  
 
  |}
 
  |}
 +
  
==== Inventory Transaction ====
+
 
 +
==== Add Entity ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 817: Line 772:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x1E
+
  |rowspan="15"| 0x0D
  |rowspan="1"|
+
  |rowspan="15"| Client
  |}
+
  | Entity ID Self
 
+
| SignedVarLong
==== Mob Equipment ====
+
  |
 
+
  |-
{| class="wikitable"
+
  | Runtime Entity ID
  ! Packet ID
+
  | UnsignedVarLong
  ! Bound To
+
  |
  ! Field Name
 
  ! Field Type
 
  ! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x1F
+
  | Entity Type
  |rowspan="1"|
+
  | string
  |}
+
  |  
 
 
==== Mob Armor Equipment ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x20
+
  | X
  |rowspan="1"|
+
  | float
  |}
+
  |  
 
 
==== Interact ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x21
+
  | Y
  |rowspan="1"|
+
| float
  |}
+
|
 +
|-
 +
| Z
 +
| float
 +
|
 +
|-
 +
| Speed X
 +
| float
 +
|
 +
|-
 +
| Speed Y
 +
| float
 +
|
 +
|-
 +
| Speed Z
 +
| float
 +
|
 +
|-
 +
| Pitch
 +
| float
 +
|
 +
|-
 +
| Yaw
 +
| float
 +
|
 +
|-
 +
| Head Yaw
 +
| float
 +
|
 +
|-
 +
| Attributes
 +
| EntityAttributes
 +
|
 +
|-
 +
| Metadata
 +
  | MetadataDictionary
 +
|
 +
|-
 +
| Links
 +
| Links
 +
|  
 +
  |}
 +
 +
 
  
==== Block Pick Request ====
+
==== Remove Entity ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 869: Line 846:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="5"| 0x22
+
  |rowspan="1"| 0x0E
  |rowspan="5"| Server
+
  |rowspan="1"| Client
  | Block Position X
+
  | Unique Entity Id
  | int
+
  | SignedVarLong
|
+
  |  
|-
 
| Block Position Y
 
| int
 
|
 
|-
 
| Block Position Z
 
| int
 
|
 
|-
 
| Add User Data
 
| boolean
 
| Whether there should be NBT data in the picked block (activated by pressing Ctrl on default keyboard controls)
 
|-
 
| Hotbar Slot
 
| byte
 
  |
 
 
  |}
 
  |}
 +
  
The Bedrock client sends the position of the block. It expects the server to decide the block to pick and add it to the inventory or switch the hotbar slot if needed.
 
  
==== Entity Pick Request ====
+
==== Add Item Entity ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 903: Line 864:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x23
+
  |rowspan="11"| 0x0F
  |rowspan="2"|
+
  |rowspan="11"| Client
  | Runtime Entity Id
+
| Entity ID Self
  | long (little endian)
+
| SignedVarLong
  |
+
|
 +
|-
 +
  | Runtime Entity ID
 +
  | UnsignedVarLong
 +
  |  
 
  |-
 
  |-
  | Hotbar Slot
+
  | Item
  | byte
+
  | Item
  |
+
|
 +
|-
 +
| X
 +
| float
 +
|
 +
|-
 +
| Y
 +
| float
 +
|
 +
|-
 +
| Z
 +
| float
 +
|
 +
|-
 +
| Speed X
 +
| float
 +
|
 +
|-
 +
| Speed Y
 +
| float
 +
|
 +
|-
 +
| Speed Z
 +
| float
 +
|
 +
|-
 +
| Metadata
 +
| MetadataDictionary
 +
|
 +
|-
 +
| Is From Fishing
 +
| bool
 +
  |  
 
  |}
 
  |}
 +
 +
  
==== Player Action ====
+
==== Take Item Entity ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 923: Line 922:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x24
+
  |rowspan="2"| 0x11
  |rowspan="1"|
+
  |rowspan="2"| Client
 +
| Item Runtime Entity Id
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Runtime Entity Id
 +
| UnsignedVarLong
 +
|  
 
  |}
 
  |}
 +
  
==== Entity Fall ====
+
 
 +
==== Move Entity Absolute ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 936: Line 944:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="3"| 0x25
+
  |rowspan="5"| 0x12
  |rowspan="3"|
+
  |rowspan="5"| Server & Client
  | Runtime Entity Id
+
  | Runtime entity id
  | ulong
+
  | UnsignedVarLong
  |
+
|
 +
|-
 +
| Position
 +
| Position
 +
|
 +
|-
 +
| Rotation
 +
| Position
 +
  |  
 
  |-
 
  |-
  | Fall Distance
+
  | On ground
  | float
+
  | boolean
  |
+
  |  
 
  |-
 
  |-
  | In Void
+
  | Teleported
 
  | boolean
 
  | boolean
  |
+
  |  
 
  |}
 
  |}
 +
 +
This packet is sent serverbound when riding a horse/donkey.
  
==== Hurt Armor ====
+
==== Move Player ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 960: Line 978:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x26
+
  |rowspan="10"| 0x13
  |rowspan="1"|
+
  |rowspan="10"| Server & Client
  | Health
+
  | Runtime entity id
  | int
+
  | UnsignedVarLong
  |
+
  |  
  |}
+
  |-
 
+
| Position
==== Set Entity Data ====
+
  | Position
 
+
  |
{| class="wikitable"
 
  ! Packet ID
 
  ! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x27
+
  | Rotation
  |rowspan="1"|
+
  | Position
  |}
+
  |  
 
 
==== Set Entity Motion ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="4"| 0x28
+
  | Mode
|rowspan="4"|
+
  | float
| Runtime Entity Id
+
  |  
  | ulong
 
  |
 
 
  |-
 
  |-
  | Motion X
+
  | On ground
 
  | float
 
  | float
  |
+
  |  
 
  |-
 
  |-
  | Motion Y
+
  | Riding runtime entity id
 
  | float
 
  | float
  |
+
  |  
 
  |-
 
  |-
  | Motion Z
+
  | Teleportation cause
 
  | float
 
  | float
  |
+
|
 +
|-
 +
| Entity type
 +
| byte
 +
|
 +
|-
 +
| On Ground
 +
| bool
 +
|
 +
|-
 +
| Other Runtime Entity ID
 +
| UnsignedVarLong
 +
  |  
 
  |}
 
  |}
 +
 +
Modes:
 +
* 0: Normal
 +
* 1: Reset
 +
* 2: Teleport
 +
* 3: Rotation
  
==== Set Entity Link ====
+
Teleportation causes:
 +
* 0: Unknown
 +
* 1: Projectile
 +
* 2: Chorus fruit
 +
* 3: Command
 +
* 4: Behavior
 +
 
 +
==== Rider Jump ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,017: Line 1,043:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x29
+
  |rowspan="1"| 0x14
  |rowspan="1"|
+
  |rowspan="1"| Server & Client
 +
| Jump Strength
 +
| SignedVarInt
 +
|  
 
  |}
 
  |}
 +
  
==== Set Health ====
+
 
 +
==== Update Block ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,030: Line 1,061:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x2A
+
  |rowspan="4"| 0x15
  |rowspan="2"| Client
+
  |rowspan="4"| Client
  |Health
+
  | Coordinates
  |int
+
  | BlockCoordinates
  |
+
  |  
  |}
+
  |-
 
+
| Block Runtime ID
==== Set Spawn Position ====
+
| UnsignedVarInt
 
+
  |
{| class="wikitable"
+
  |-
  ! Packet ID
+
  | Block Priority
  ! Bound To
+
  | UnsignedVarInt
  ! Field Name
+
  |
  ! Field Type
 
  ! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x2B
+
  | Storage
  |rowspan="1"|
+
| UnsignedVarInt
 +
  |  
 
  |}
 
  |}
 +
  
==== Animate ====
 
  
{| class="wikitable"
+
==== Add Painting ====
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
|-
 
|rowspan="1"| 0x2C
 
|rowspan="1"|
 
|}
 
 
 
==== Respawn ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,072: Line 1,091:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="4"| 0x2D
+
  |rowspan="7"| 0x16
  |rowspan="4"|
+
  |rowspan="7"| Client
  | Position X
+
| Unique Entity Id
  | float
+
| SignedVarLong
  |
+
|
 +
|-
 +
| Runtime Entity Id
 +
| UnsignedVarLong
 +
|
 +
|-
 +
  | Position X
 +
  | BlockCoordinates
 +
  |  
 
  |-
 
  |-
 
  | Position Y
 
  | Position Y
  | float
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
 
  | Position Z
 
  | Position Z
  | float
+
  | string
  |
+
|
 +
|-
 +
| Direction
 +
| int
 +
  |  
 
  |-
 
  |-
  | Runtime Entity Id
+
  | Name
  | ulong
+
  | String
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Container Open ====
+
 
 +
==== Tick Sync ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,100: Line 1,133:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="4"| 0x2E
+
  |rowspan="2"| 0x17
  |rowspan="4"|
+
  |rowspan="2"| Server & Client
  | Window Id
+
  | Request Timestamp
  | byte
+
  | long
  |
+
  |  
 
  |-
 
  |-
  | Type
+
  | Response Timestamp
| byte
 
|
 
|-
 
| Block Position
 
| Position
 
|
 
|-
 
| Unique Entity Id
 
 
  | long
 
  | long
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Container Close ====
+
==== Level Sound Event (1) ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,128: Line 1,155:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x2F
+
  |rowspan="6"| 0x18
  |rowspan="1"|
+
  |rowspan="6"| Server & Client
  | Window Id
+
  | Sound ID
 
  | byte
 
  | byte
  |
+
|
 +
|-
 +
| Position
 +
| Vector3
 +
|
 +
|-
 +
| Block Id
 +
| SignedVarInt
 +
|
 +
|-
 +
| Entity Type
 +
| SignedVarInt
 +
|
 +
|-
 +
| Is baby mob
 +
| bool
 +
|
 +
|-
 +
| Is global
 +
| bool
 +
  |  
 
  |}
 
  |}
 +
  
==== Player Hotbar ====
+
 
 +
==== Level Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,144: Line 1,193:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="3"| 0x30
+
  |rowspan="3"| 0x19
  |rowspan="3"|
+
  |rowspan="3"| Client
  | Selected Hotbar Slot
+
  | Event ID
  | uint
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  | Container Id
+
  | Position
  | byte
+
  | Vector3
  |
+
  |  
 
  |-
 
  |-
  | Select Hotbar Slot
+
  | Data
  | boolean
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Inventory Content ====
+
==== Block Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,168: Line 1,219:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x31
+
  |rowspan="3"| 0x1A
  |rowspan="1"|
+
  |rowspan="3"| Client
 +
| Block Position
 +
| Position
 +
|
 +
|-
 +
| Event Type
 +
| SignedVarInt
 +
|
 +
|-
 +
| Event Data
 +
| SignedVarInt
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Inventory Slot ====
+
==== Entity Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,181: Line 1,245:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x32
+
  |rowspan="3"| 0x1B
  |rowspan="1"|
+
  |rowspan="3"| Server & Client
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Event ID
 +
| byte
 +
|
 +
|-
 +
| Data
 +
| SignedVarInt
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Container Set Data ====
+
==== Mob Effect ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,194: Line 1,271:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="3"| 0x33
+
  |rowspan="6"| 0x1C
  |rowspan="3"|
+
  |rowspan="6"| Client
  | Window Id
+
  | Runtime entity id
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Event
 
  | byte
 
  | byte
  |
+
|
 +
|-
 +
| Effect id
 +
| SignedVarInt
 +
|
 +
|-
 +
| Amplifier
 +
| SignedVarInt
 +
  |  
 
  |-
 
  |-
  | Property
+
  | Particles
  | int
+
  | bool
  |
+
  |  
 
  |-
 
  |-
  | Value
+
  | Duration
  | int
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
 +
Events:
 +
* 0: None
 +
* 1: Add
 +
* 2: Modify
 +
* 3: Remove
  
==== Crafting Data ====
+
==== Update Attributes ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,218: Line 1,313:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x34
+
  |rowspan="2"| 0x1D
  |rowspan="1"|
+
  |rowspan="2"| Client
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Attributes
 +
| PlayerAttributes
 +
|  
 
  |}
 
  |}
 +
  
==== Crafting Event ====
+
 
 +
==== Inventory Transaction ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,231: Line 1,335:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x35
+
  |rowspan="1"| 0x1E
  |rowspan="1"|
+
  |rowspan="1"| Server & Client
 +
| Transaction
 +
| Transaction
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Gui Data Pick Item ====
+
==== Mob Equipment ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,244: Line 1,353:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x36
+
  |rowspan="5"| 0x1F
  |rowspan="1"|
+
  |rowspan="5"| Server & Client
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Item
 +
| Item
 +
|
 +
|-
 +
| Slot
 +
| byte
 +
|
 +
|-
 +
| Selected Slot
 +
| byte
 +
|
 +
|-
 +
| Windows Id
 +
| byte
 +
|  
 
  |}
 
  |}
 +
  
==== Adventure Settings ====
+
 
 +
==== Mob Armor Equipment ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,257: Line 1,387:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x37
+
  |rowspan="5"| 0x20
  |rowspan="1"|
+
  |rowspan="5"| Server & Client
  |}
+
  | Runtime Entity ID
 
+
| UnsignedVarLong
==== Block Entity Data ====
+
|
 
+
|-
{| class="wikitable"
+
| Helmet
  ! Packet ID
+
| Item
  ! Bound To
+
|
  ! Field Name
+
|-
  ! Field Type
+
| Chestplate
  ! Notes
+
| Item
 +
  |
 +
  |-
 +
  | Leggings
 +
  | Item
 +
  |
 
  |-
 
  |-
  |rowspan="1"| 0x38
+
  | Boots
  |rowspan="1"|
+
| Item
 +
  |  
 
  |}
 
  |}
 +
 +
  
==== Player Input ====
+
==== Interact ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,283: Line 1,421:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x39
+
  |rowspan="2"| 0x21
  |rowspan="1"|
+
  |rowspan="2"| Server & Client
 +
| Action ID
 +
| byte
 +
|
 +
|-
 +
| Target Runtime Entity ID
 +
| UnsignedVarLong
 +
|  
 
  |}
 
  |}
 +
  
==== Level Chunk ====
 
  
{| class="wikitable"
+
==== Block Pick Request ====
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
|-
 
|rowspan="1"| 0x3A
 
|rowspan="1"|
 
|}
 
 
 
==== Set Commands Enabled ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,309: Line 1,443:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x3B
+
  |rowspan="5"| 0x22
  |rowspan="2"|
+
  |rowspan="5"| Server
  |Commands enabled
+
  | Block Position X
  |boolean
+
  | SignedVarInt
  |
+
|
 +
|-
 +
| Block Position Y
 +
| SignedVarInt
 +
|
 +
|-
 +
| Block Position Z
 +
| SignedVarInt
 +
|
 +
|-
 +
| Add User Data
 +
| bool
 +
| Whether there should be NBT data in the picked block (activated by pressing Ctrl on default keyboard controls)
 +
|-
 +
| Hotbar Slot
 +
| byte
 +
  |  
 
  |}
 
  |}
 +
 +
The Bedrock client sends the position of the block. It expects the server to decide the block to pick and add it to the inventory or switch the hotbar slot if needed.
  
==== Set Difficulty ====
+
==== Entity Pick Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,325: Line 1,477:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x3C
+
  |rowspan="2"| 0x23
  |rowspan="1"|
+
  |rowspan="2"| Server
  |Difficulty
+
  | Runtime Entity Id
  |int
+
  | ulong
  |
+
|
 +
|-
 +
| Hotbar Slot
 +
| byte
 +
  |  
 
  |}
 
  |}
 +
 +
  
==== Change Dimension ====
+
==== Player Action ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,341: Line 1,499:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="5"| 0x3D
+
  |rowspan="4"| 0x24
  |rowspan="5"|
+
  |rowspan="4"| Server
  | Dimension
+
  | Runtime Entity ID
  | int
+
  | UnsignedVarLong
  |
+
  |  
 
  |-
 
  |-
  | Position X
+
  | Action ID
  | float
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  | Position Y
+
  | Coordinates
  | float
+
  | BlockCoordinates
  |
+
  |  
 
  |-
 
  |-
  | Position Z
+
  | Face
  | float
+
  | SignedVarInt
|
+
  |  
|-
 
| Respawn
 
| boolean
 
  |
 
 
  |}
 
  |}
 +
  
==== Set Player Game Type ====
 
  
{| class="wikitable"
+
==== Entity Fall ====
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
|-
 
|rowspan="1"| 0x3E
 
|rowspan="1"|
 
|Game mode
 
|int
 
|
 
|}
 
 
 
==== Player List ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,389: Line 1,529:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x3F
+
  |rowspan="3"| 0x25
  |rowspan="1"| Client
+
  |rowspan="3"| Server
 +
| Runtime Entity Id
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Fall Distance
 +
| float
 +
|
 +
|-
 +
| In Void
 +
| bool
 +
|
 
  |}
 
  |}
 +
 +
  
==== Simple Event ====
+
==== Hurt Armor ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,402: Line 1,555:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x40
+
  |rowspan="1"| 0x26
  |rowspan="1"|
+
  |rowspan="1"| Client
 +
| Health
 +
| SignedVarInt
 +
|  
 
  |}
 
  |}
 +
  
==== Event ====
+
 
 +
==== Set Entity Data ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,415: Line 1,573:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x41
+
  |rowspan="2"| 0x27
  |rowspan="1"|
+
  |rowspan="2"| Server & Client
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Metadata
 +
| MetadataDictionary
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Spawn Experience Orb ====
+
==== Set Entity Motion ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,428: Line 1,595:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="4"| 0x42
+
  |rowspan="4"| 0x28
  |rowspan="4"|
+
  |rowspan="4"| Server & Client
  | Position X
+
  | Runtime Entity Id
  | float
+
| UnsignedVarLong
  |
+
|
 +
|-
 +
| Motion X
 +
  | Vector3
 +
  |  
 
  |-
 
  |-
  | Position Y
+
  | Motion Y
 
  | float
 
  | float
  |
+
  |  
 
  |-
 
  |-
  | Position Z
+
  | Motion Z
 
  | float
 
  | float
|
+
  |  
|-
 
| Amount
 
| int
 
  |
 
 
  |}
 
  |}
 +
  
==== Map Item Data ====
+
 
 +
==== Set Entity Link ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,456: Line 1,625:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x43
+
  |rowspan="4"| 0x29
  |rowspan="1"|
+
  |rowspan="4"| Client
 +
| Ridden ID
 +
| SignedVarLong
 +
|
 +
|-
 +
| Rider ID
 +
| SignedVarLong
 +
|
 +
|-
 +
| Link Type
 +
| byte
 +
|
 +
|-
 +
| Unknown
 +
| byte
 +
|  
 
  |}
 
  |}
 +
  
==== Map Info Request ====
+
 
 +
==== Set Health ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,469: Line 1,655:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x44
+
  |rowspan="1"| 0x2A
  |rowspan="1"|
+
  |rowspan="1"| Client
  | Unique Map Id
+
  | Health
  | long
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Request Chunk Radius ====
+
 
 +
==== Set Spawn Position ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,485: Line 1,673:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x45
+
  |rowspan="3"| 0x2B
  |rowspan="1"|
+
  |rowspan="3"| Client
  |Chunk radius
+
  | Spawn Type
  |int
+
  | SignedVarInt
  |
+
|
 +
|-
 +
| Coordinates
 +
| BlockCoordinates
 +
|
 +
|-
 +
| Forced
 +
| bool
 +
  |  
 
  |}
 
  |}
 +
  
==== Chunk Radius Updated ====
+
 
 +
==== Animate ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,501: Line 1,699:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x46
+
  |rowspan="2"| 0x2C
  |rowspan="1"|
+
  |rowspan="2"| Server & Client
  |Chunk radius
+
  | Action ID
  |int
+
  | SignedVarInt
  |
+
|
 +
|-
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
  |  
 
  |}
 
  |}
 +
  
==== ItemFrame Drop Item ====
+
 
 +
==== Respawn ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,517: Line 1,721:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="3"| 0x47
+
  |rowspan="5"| 0x2D
  |rowspan="3"| Server
+
  |rowspan="5"| Server & Client
  | Block Position X
+
  | Position X
  | int
+
  | float
  |
+
|
 +
|-
 +
| Position Y
 +
| float
 +
|
 +
|-
 +
| Position Z
 +
| float
 +
  |  
 
  |-
 
  |-
  | Block Position Y
+
  | Runtime Entity Id
  | int
+
  | byte
  | See note below.
+
  |  
 
  |-
 
  |-
  | Block Position Z
+
  | Runtime Entity ID
  | int
+
  | UnsignedVarLong
  |
+
  |  
 
  |}
 
  |}
 +
  
According to the NukkitX Protocol, the server sends the Y coordinate divided by two, and negative if needs to be subtracted by one. Example:
 
  
    int y;
+
==== Container Open ====
    if (packet.getBlockPosition().getY() > 0) {
 
        y = packet.getBlockPosition().getY() * 2;
 
    } else {
 
        y = (packet.getBlockPosition().getY() * -2) - 1;
 
    }
 
 
 
==== Game Rules Changed ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,550: Line 1,755:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x48
+
  |rowspan="4"| 0x2E
  |rowspan="1"|
+
  |rowspan="4"| Client
 +
| Window Id
 +
| byte
 +
|
 +
|-
 +
| Type
 +
| byte
 +
|
 +
|-
 +
| Block Position
 +
| Position
 +
|
 +
|-
 +
| Unique Entity Id
 +
| SignedVarLong
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Camera ====
+
==== Container Close ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,563: Line 1,785:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x49
+
  |rowspan="1"| 0x2F
  |rowspan="2"|
+
  |rowspan="1"| Server & Client
  | Camera Unique Entity Id
+
  | Window Id
  | long
+
  | byte
|
+
  |  
|-
 
| Player Unique Entity Id
 
| long
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Boss Event ====
+
==== Player Hotbar ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,583: Line 1,803:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x4A
+
  |rowspan="3"| 0x30
  |rowspan="1"|
+
  |rowspan="3"| Server & Client
  |}
+
| Selected Hotbar Slot
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Container Id
 +
| byte
 +
|
 +
|-
 +
| Select Hotbar Slot
 +
| bool
 +
|  
 +
  |}
 +
 +
 
  
==== Show Credits ====
+
==== Inventory Content ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,596: Line 1,829:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x4B
+
  |rowspan="2"| 0x31
  |rowspan="1"|
+
  |rowspan="2"| Server & Client
 +
| Inventory Id
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Input
 +
| ItemStacks
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Available Commands ====
+
==== Inventory Slot ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,609: Line 1,851:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x4C
+
  |rowspan="3"| 0x32
  |rowspan="1"| Client
+
  |rowspan="3"| Server & Client
 +
| Inventory Id
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Slot
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Item
 +
| Item
 +
|
 
  |}
 
  |}
 +
  
==== Command Request ====
+
 
 +
==== Container Set Data ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,622: Line 1,877:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x4D
+
  |rowspan="3"| 0x33
  |rowspan="1"|
+
  |rowspan="3"| Client
  |}
+
  | Window Id
 
+
| byte
==== CommandBlock Update ====
+
  |
 
+
  |-
{| class="wikitable"
+
  | Property
  ! Packet ID
+
  | SignedVarInt
  ! Bound To
+
  |
  ! Field Name
 
  ! Field Type
 
  ! Notes
 
 
  |-
 
  |-
  |rowspan="1"| 0x4E
+
  | Value
  |rowspan="1"|
+
| SignedVarInt
 +
  |  
 
  |}
 
  |}
 +
 +
  
==== Command Output ====
+
==== Crafting Data ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,648: Line 1,903:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x4F
+
  |rowspan="4"| 0x34
  |rowspan="1"|
+
  |rowspan="4"| Client
 +
| Recipes
 +
| Recipes
 +
|
 +
|-
 +
| Potion type recipes
 +
| PotionTypeRecipe[]
 +
|
 +
|-
 +
| potion container recipes
 +
| PotionContainerChangeRecipe[]
 +
|
 +
|-
 +
| Is Clean
 +
| bool
 +
|  
 
  |}
 
  |}
 +
  
==== Update Trade ====
+
 
 +
==== Crafting Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,661: Line 1,933:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x50
+
  |rowspan="5"| 0x35
  |rowspan="1"|
+
  |rowspan="5"| Server & Client
  |}
+
| Window ID
 
+
| byte
==== Update Equip ====
+
|
 +
|-
 +
| Recipe Type
 +
| SignedVarInt
 +
|
 +
|-
 +
| Recipe ID
 +
| UUID
 +
|
 +
|-
 +
| Input
 +
| ItemStacks
 +
|
 +
|-
 +
| Result
 +
| ItemStacks
 +
|  
 +
  |}
 +
 +
 
 +
 
 +
==== Gui Data Pick Item ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,674: Line 1,967:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x51
+
  |rowspan="0"| 0x36
  |rowspan="1"|
+
  |rowspan="0"| Client
 +
 
 
  |}
 
  |}
 +
 +
  
==== Resource Pack Data Info ====
+
==== Adventure Settings ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,687: Line 1,983:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x52
+
  |rowspan="6"| 0x37
  |rowspan="1"|
+
  |rowspan="6"| Server & Client
 +
| Flags
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Command permission
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Action permissions
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Permission level
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Custom stored permissions
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| User Id
 +
| long
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Resource Pack Chunk Data ====
+
==== Block Entity Data ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,700: Line 2,021:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x53
+
  |rowspan="2"| 0x38
  |rowspan="1"|
+
  |rowspan="2"| Server & Client
  |}
+
| Coordinates
 +
| BlockCoordinates
 +
|
 +
|-
 +
| NamedTag
 +
| Nbt
 +
|  
 +
  |}
 +
  
==== Resource Pack Chunk Request ====
+
 
 +
==== Player Input ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,713: Line 2,043:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x54
+
  |rowspan="4"| 0x39
  |rowspan="1"|
+
  |rowspan="4"| Server
 +
| Motion X
 +
| float
 +
|
 +
|-
 +
| Motion Z
 +
| float
 +
|
 +
|-
 +
| Jumping
 +
| bool
 +
|
 +
|-
 +
| Sneaking
 +
| bool
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Transfer ====
+
==== Level Chunk ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,726: Line 2,073:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x55
+
  |rowspan="5"| 0x3A
  |rowspan="2"|
+
  |rowspan="5"| Client
  |Address
+
  | Chunk X
  |String
+
  | SignedVarInt
  |
+
|
 +
|-
 +
| Chunk Z
 +
| SignedVarInt
 +
|
 +
|-
 +
| Sub Chunk Count
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Cache Enabled
 +
| bool
 +
  |  
 
  |-
 
  |-
  |Port
+
  | Chunk Data
  |int
+
  | ByteArray
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Play Sound ====
+
==== Set Commands Enabled ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,746: Line 2,107:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="4"| 0x56
+
  |rowspan="1"| 0x3B
  |rowspan="4"| Client
+
  |rowspan="1"| Client
  |Sound name
+
  | Commands enabled
  |String
+
  | bool
|
+
  |  
|-
 
|Sound position
 
|Position
 
|
 
|-
 
|Volume
 
|float
 
|
 
|-
 
|Pitch
 
|float
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Stop Sound ====
+
==== Set Difficulty ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,774: Line 2,125:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x57
+
  |rowspan="1"| 0x3C
  |rowspan="2"|
+
  |rowspan="1"| Client
  | Sound Name
+
  | Difficulty
  | String
+
  | UnsignedVarInt
|
+
  |  
|-
 
| Stopping All Sound
 
| boolean
 
  |
 
 
  |}
 
  |}
 +
  
==== Set Title ====
+
 
 +
==== Change Dimension ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,794: Line 2,143:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x58
+
  |rowspan="5"| 0x3D
  |rowspan="1"|
+
  |rowspan="5"| Client
  |}
+
| Dimension
 
+
| SignedVarInt
==== Add Behavior Tree ====
+
|
 +
|-
 +
| Position X
 +
| Vector3
 +
|
 +
|-
 +
| Position Y
 +
| bool
 +
|
 +
|-
 +
| Position Z
 +
| float
 +
|
 +
|-
 +
| Respawn
 +
| boolean
 +
|  
 +
  |}
 +
 +
 
 +
 
 +
==== Set Player Game Type ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,807: Line 2,177:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x59
+
  |rowspan="1"| 0x3E
  |rowspan="1"|
+
  |rowspan="1"| Server & Client
  | Behavior Tree Json
+
  | Game mode
  | String
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Structure Block Update ====
+
==== Player List ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,823: Line 2,195:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x5A
+
  |rowspan="1"| 0x3F
  |rowspan="1"|
+
  |rowspan="1"| Client
 +
| Records
 +
| PlayerRecords
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Show Store Offer ====
+
==== Simple Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,836: Line 2,213:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x5B
+
  |rowspan="1"| 0x40
  |rowspan="2"|
+
  |rowspan="1"| Client
  | Offer Id
+
  | Event Type
  | String
+
  | ushort
|
+
  |  
|-
 
| Shown To All
 
| boolean
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Purchase Receipt ====
+
==== Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,856: Line 2,231:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x5C
+
  |rowspan="3"| 0x41
  |rowspan="1"|
+
  |rowspan="3"| Client
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Event data
 +
| SignedVarInt
 +
|
 +
|-
 +
| Event type
 +
| byte
 +
|  
 
  |}
 
  |}
 +
  
==== Player Skin ====
 
  
{| class="wikitable"
+
==== Spawn Experience Orb ====
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
|-
 
|rowspan="1"| 0x5D
 
|rowspan="1"|
 
|}
 
 
 
==== Sub Client Login ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,882: Line 2,257:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x5E
+
  |rowspan="4"| 0x42
  |rowspan="1"|
+
  |rowspan="4"| Client
  |}
+
| Position X
 +
| Vector3
 +
|
 +
|-
 +
| Position Y
 +
| SignedVarInt
 +
|
 +
|-
 +
| Position Z
 +
| float
 +
|
 +
|-
 +
| Amount
 +
| int
 +
|  
 +
  |}
 +
 +
 
  
==== Automation Client Connect ====
+
==== Map Item Data ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,895: Line 2,287:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x5F
+
  |rowspan="1"| 0x43
  |rowspan="1"|
+
  |rowspan="1"| Client
  | Address
+
  | MapInfo
  | String
+
  | MapInfo
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Set Last Hurt By ====
+
 
 +
==== Map Info Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,911: Line 2,305:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x60
+
  |rowspan="1"| 0x44
  |rowspan="1"|
+
  |rowspan="1"| Server & Client
  | Entity Type Id
+
  | Unique Map Id
  | int
+
  | SignedVarLong
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Book Edit ====
+
 
 +
==== Request Chunk Radius ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,927: Line 2,323:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x61
+
  |rowspan="1"| 0x45
  |rowspan="1"|
+
  |rowspan="1"| Server & Client
 +
| Chunk radius
 +
| SignedVarInt
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Npc Request ====
+
==== Chunk Radius Updated ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,940: Line 2,341:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x62
+
  |rowspan="1"| 0x46
  |rowspan="1"|
+
  |rowspan="1"| Client
 +
| Chunk radius
 +
| SignedVarInt
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Photo Transfer ====
+
==== ItemFrame Drop Item ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,953: Line 2,359:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x63
+
  |rowspan="3"| 0x47
  |rowspan="1"|
+
  |rowspan="3"| Server & Client
 +
| Block Position X
 +
| BlockCoordinates
 +
|
 +
|-
 +
| Block Position Y
 +
| int
 +
| See note below.
 +
|-
 +
| Block Position Z
 +
| int
 +
|  
 
  |}
 
  |}
 +
 +
According to the NukkitX Protocol, the server sends the Y coordinate divided by two, and negative if needs to be subtracted by one. Example:
  
==== Model Form Request ====
+
    int y;
 +
    if (packet.getBlockPosition().getY() &gt; 0) {
 +
        y = packet.getBlockPosition().getY() * 2;
 +
    } else {
 +
        y = (packet.getBlockPosition().getY() * -2) - 1;
 +
    }
 +
 
 +
==== Game Rules Changed ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,966: Line 2,392:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x64
+
  |rowspan="1"| 0x48
  |rowspan="2"|
+
  |rowspan="1"| Client
  | Form Id
+
  | Rules
  | uint
+
  | GameRules
|
+
  |  
|-
 
| Form Data
 
| String
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Model Form Response ====
+
==== Camera ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 1,986: Line 2,410:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x65
+
  |rowspan="2"| 0x49
  |rowspan="2"|
+
  |rowspan="2"| Client
  | Form Id
+
  | Camera Unique Entity Id
  | uint
+
  | SignedVarLong
  |
+
  |  
 
  |-
 
  |-
  | Form Data
+
  | Player Unique Entity Id
  | String
+
  | SignedVarLong
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Server Settings Request ====
+
==== Boss Event ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,006: Line 2,432:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="0"| 0x66
+
  |rowspan="2"| 0x4A
  |rowspan="0"|
+
  |rowspan="2"| Client
 +
| Boss Entity ID
 +
| SignedVarLong
 +
|
 +
|-
 +
| Event Type
 +
| UnsignedVarInt
 +
|  
 
  |}
 
  |}
 +
  
==== Server Settings Response ====
+
 
 +
==== Show Credits ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,019: Line 2,454:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x67
+
  |rowspan="2"| 0x4B
  |rowspan="2"|
+
  |rowspan="2"| Client
  | Form Id
+
  | Runtime Entity ID
  | uint
+
  | UnsignedVarLong
  |
+
  |  
 
  |-
 
  |-
  | Form Data
+
  | Status
  | String
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Show Profile ====
+
==== Available Commands ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,039: Line 2,476:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x68
+
  |rowspan="0"| 0x4C
  |rowspan="1"|
+
  |rowspan="0"| Client
| Xuid
+
 
| String
 
|
 
 
  |}
 
  |}
 +
  
==== Set Default Game Type ====
+
 
 +
==== Command Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,055: Line 2,492:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x69
+
  |rowspan="5"| 0x4D
  |rowspan="1"|
+
  |rowspan="5"| Server
  |Game mode
+
  | Command
  |int
+
  | string
  |
+
|
  |}
+
|-
 +
| Command type
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Unknown UUID
 +
| UUID
 +
|
 +
|-
 +
| Request ID
 +
| string
 +
|
 +
|-
 +
| Unknown
 +
| bool
 +
  |  
 +
  |}
 +
  
==== Remove Objective ====
+
 
 +
==== CommandBlock Update ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,071: Line 2,526:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x6A
+
  |rowspan="1"| 0x4E
  |rowspan="1"|
+
  |rowspan="1"| Server
  | Objective Id
+
  | Is Block
  | String
+
  | bool
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Set Display Objective ====
+
 
 +
==== Command Output ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,087: Line 2,544:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="5"| 0x6B
+
  |rowspan="0"| 0x4F
  |rowspan="5"|
+
  |rowspan="0"| Client
| Display Slot
+
 
  | String
+
  |}
|
+
   
|-
+
 
| Objective Id
+
 
| String
+
==== Update Trade ====
|
+
 
|-
 
| Display Name
 
  | String
 
|
 
|-
 
| Criteria
 
| String
 
|
 
|-
 
| Sort Order
 
| int
 
|
 
|}
 
 
 
==== Set Score ====
 
 
 
 
{| class="wikitable"
 
{| class="wikitable"
 
  ! Packet ID
 
  ! Packet ID
Line 2,119: Line 2,560:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x6C
+
  |rowspan="10"| 0x50
  |rowspan="1"|
+
  |rowspan="10"| Client
  |}
+
  | Window ID
 
+
  | byte
==== Lab Table ====
+
  |
 
 
{| class="wikitable"
 
! Packet ID
 
  ! Bound To
 
  ! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="5"| 0x6D
+
  | Window Type
|rowspan="5"|
 
| Unknown Byte 0
 
 
  | byte
 
  | byte
  |
+
  |  
 
  |-
 
  |-
  | Block Entity Position X
+
  | Unknown0
  | int
+
| VarInt
  |
+
|
 +
|-
 +
| Unknown1
 +
| VarInt
 +
|
 +
|-
 +
| Unknown2
 +
| VarInt
 +
|
 +
|-
 +
| Is Willing
 +
| bool
 +
|
 +
|-
 +
| Trader Entity ID
 +
  | SignedVarLong
 +
  |  
 
  |-
 
  |-
  | Block Entity Position Y
+
  | Player Entity ID
  | int
+
  | SignedVarLong
  |
+
  |  
 
  |-
 
  |-
  | Block Entity Position Z
+
  | Display Name
  | int
+
  | string
  |
+
  |  
 
  |-
 
  |-
  | Reaction Type
+
  | NamedTag
  | byte
+
  | Nbt
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Update Block Synced ====
+
 
 +
==== Update Equip ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,164: Line 2,614:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x6E
+
  |rowspan="5"| 0x51
  |rowspan="1"|
+
  |rowspan="5"| Client
  |}
+
| Window ID
 
+
| byte
==== Move Entity Delta ====
+
|
 +
|-
 +
| Window Type
 +
| byte
 +
|
 +
|-
 +
| Unknown
 +
| byte
 +
|
 +
|-
 +
| Entity ID
 +
| SignedVarLong
 +
|
 +
|-
 +
| NamedTag
 +
| Nbt
 +
|  
 +
  |}
 +
 +
 
 +
 
 +
==== Resource Pack Data Info ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,177: Line 2,648:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x6F
+
  |rowspan="7"| 0x52
  |rowspan="1"|
+
  |rowspan="7"| Client
 +
| Package ID
 +
| string
 +
|
 +
|-
 +
| Max Chunk Size
 +
| uint
 +
|
 +
|-
 +
| Chunk Count
 +
| uint
 +
|
 +
|-
 +
| Compressed Package Size
 +
| ulong
 +
|
 +
|-
 +
| Hash
 +
| ByteArray
 +
|
 +
|-
 +
| Is Premium
 +
| bool
 +
|
 +
|-
 +
| Pack Type
 +
| byte
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Set Scoreboard Identity ====
+
==== Resource Pack Chunk Data ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,190: Line 2,690:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x70
+
  |rowspan="4"| 0x53
  |rowspan="1"|
+
  |rowspan="4"| Client
 +
| Package ID
 +
| string
 +
|
 +
|-
 +
| Chunk Index
 +
| uint
 +
|
 +
|-
 +
| Progress
 +
| ulong
 +
|
 +
|-
 +
| Payload
 +
| ByteArray
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Set Local Player As Initialized ====
+
==== Resource Pack Chunk Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,203: Line 2,720:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x71
+
  |rowspan="2"| 0x54
  |rowspan="1"|
+
  |rowspan="2"| Server
  | Runtime Entity Id
+
  | Package ID
  | ulong
+
  | string
  |
+
|
 +
|-
 +
| Chunk Index
 +
| uint
 +
  |  
 
  |}
 
  |}
 +
  
==== Update Soft Enum ====
+
 
 +
==== Transfer ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,219: Line 2,742:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x72
+
  |rowspan="2"| 0x55
  |rowspan="1"|
+
  |rowspan="2"| Client
 +
| Address
 +
| string
 +
|
 +
|-
 +
| Port
 +
| ushort
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Network Stack Latency ====
+
==== Play Sound ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,232: Line 2,764:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x73
+
  |rowspan="4"| 0x56
  |rowspan="2"|
+
  |rowspan="4"| Client
  | Timestamp
+
  | Sound name
  | long (little endian)
+
  | string
  |
+
|
 +
|-
 +
| Sound position
 +
| Position
 +
|
 +
|-
 +
| Volume
 +
| float
 +
  |  
 
  |-
 
  |-
  | Send Back
+
  | Pitch
  | boolean
+
  | float
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Script Custom Event ====
+
==== Stop Sound ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,252: Line 2,794:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x75
+
  |rowspan="2"| 0x57
  |rowspan="2"|
+
  |rowspan="2"| Client
  | Event Name
+
  | Sound Name
  | String
+
  | string
  |
+
  |  
 
  |-
 
  |-
  | Data
+
  | Stopping All Sound
  | String
+
  | bool
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Spawn Particle Effect ====
+
 
 +
==== Set Title ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,272: Line 2,816:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="6"| 0x76
+
  |rowspan="5"| 0x58
  |rowspan="6"|
+
  |rowspan="5"| Client
  | Dimension Id
+
  | Type
  | byte
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  | Unique Entity Id
+
  | Text
  | long
+
  | string
  |
+
  |  
 
  |-
 
  |-
  | Position X
+
  | Fade In Time
  | float
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  | Position Y
+
  | Stay Time
  | float
+
  | SignedVarInt
  |
+
  |  
 
  |-
 
  |-
  | Position Z
+
  | Fade Out Time
  | float
+
  | SignedVarInt
|
+
  |  
|-
 
| Identifier
 
| String
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Available Entity Identifiers ====
+
==== Add Behavior Tree ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,308: Line 2,850:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x77
+
  |rowspan="1"| 0x59
  |rowspan="1"|
+
  |rowspan="1"| Client
 +
| Behavior Tree Json
 +
| string
 +
|  
 
  |}
 
  |}
 +
  
==== Level Sound Event (2) ====
+
 
 +
==== Structure Block Update ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,321: Line 2,868:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x78
+
  |rowspan="0"| 0x5A
  |rowspan="1"|
+
  |rowspan="0"| Client
 +
 
 
  |}
 
  |}
 +
 +
  
==== Network Chunk Publisher Update ====
+
==== Show Store Offer ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,334: Line 2,884:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="4"| 0x79
+
  |rowspan="2"| 0x5B
  |rowspan="4"|
+
  |rowspan="2"| Client
  | Position X
+
  | Offer Id
  | int
+
  | string
  |
+
  |  
 
  |-
 
  |-
  | Position Y
+
  | Shown To All
  | int
+
  | bool
|
+
  |  
|-
 
| Position Z
 
| int
 
|
 
|-
 
| Radius
 
| uint
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Biome Definition List ====
+
==== Purchase Receipt ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,362: Line 2,906:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x7A
+
  |rowspan="0"| 0x5C
  |rowspan="1"|
+
  |rowspan="0"| Server
 +
 
 
  |}
 
  |}
 +
  
==== Level Sound Event (3) ====
+
 
 +
==== Player Skin ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,375: Line 2,922:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x7B
+
  |rowspan="4"| 0x5D
  |rowspan="1"|
+
  |rowspan="4"| Server & Client
 +
| UUID
 +
| UUID
 +
|
 +
|-
 +
| Skin
 +
| Skin
 +
|
 +
|-
 +
| Skin Name
 +
| string
 +
|
 +
|-
 +
| Old Skin Name
 +
| string
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Level Event Generic ====
+
==== Sub Client Login ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,388: Line 2,952:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x7C
+
  |rowspan="0"| 0x5E
  |rowspan="1"|
+
  |rowspan="0"| Client
 +
 
 
  |}
 
  |}
 +
 +
  
==== Lectern Update ====
+
==== Automation Client Connect ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,401: Line 2,968:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="4"| 0x7D
+
  |rowspan="1"| 0x5F
  |rowspan="4"|
+
  |rowspan="1"| Client
  | Page
+
  | Address
  | byte
+
  | string
  |
+
  |  
  |-
+
  |}
| Total Pages
+
   
| byte
+
 
|
+
 
  |-
+
==== Set Last Hurt By ====
| Block Position
 
| Position
 
|
 
|-
 
| Dropping Book
 
| boolean
 
|
 
|}
 
 
 
==== Video Stream Connect ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,429: Line 2,986:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x7E
+
  |rowspan="1"| 0x60
  |rowspan="1"|
+
  |rowspan="1"| Client
 +
| Entity Type Id
 +
| VarInt
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Client Cache Status ====
+
==== Book Edit ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,442: Line 3,004:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x81
+
  |rowspan="0"| 0x61
  |rowspan="1"|
+
  |rowspan="0"| Client
| Supported
+
 
| boolean
 
|
 
 
  |}
 
  |}
 +
 +
  
==== On Screen Texture Animation ====
+
==== Npc Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,458: Line 3,020:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x82
+
  |rowspan="4"| 0x62
  |rowspan="1"|
+
  |rowspan="4"| Server & Client
  |}
+
  | Runtime Entity ID
 
+
| UnsignedVarLong
==== Map Create Locked Copy ====
+
  |
 
+
  |-
{| class="wikitable"
+
  | Unknown0
  ! Packet ID
+
  | byte
  ! Bound To
+
  |
  ! Field Name
 
  ! Field Type
 
  ! Notes
 
 
  |-
 
  |-
  |rowspan="2"| 0x83
+
  | Unknown1
|rowspan="2"|
+
  | string
| Original Map Id
+
  |  
  | long
 
  |
 
 
  |-
 
  |-
  | New Map Id
+
  | Unknown2
  | long
+
  | byte
  |
+
  |  
 
  |}
 
  |}
 +
 +
  
==== Structure Template Data Export Request ====
+
==== Photo Transfer ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,491: Line 3,050:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x84
+
  |rowspan="3"| 0x63
  |rowspan="1"|
+
  |rowspan="3"| Server
 +
| File name
 +
| string
 +
|
 +
|-
 +
| Image data
 +
| string
 +
|
 +
|-
 +
| Unknown2
 +
| string
 +
|  
 
  |}
 
  |}
 +
  
==== Structure Template Data Export Response ====
+
 
 +
==== Model Form Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,504: Line 3,076:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x85
+
  |rowspan="2"| 0x64
  |rowspan="1"|
+
  |rowspan="2"| Client
  |}
+
| Form Id
 
+
| UnsignedVarInt
==== Update Block Properties ====
+
|
 +
|-
 +
| Form Data
 +
| string
 +
|  
 +
  |}
 +
 +
 
 +
 
 +
==== Model Form Response ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,517: Line 3,098:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x86
+
  |rowspan="2"| 0x65
  |rowspan="1"|
+
  |rowspan="2"| Server
 +
| Form Id
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Form Data
 +
| string
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Client Cache Blob Status ====
+
==== Server Settings Request ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,530: Line 3,120:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x87
+
  |rowspan="0"| 0x66
  |rowspan="1"|
+
  |rowspan="0"| Server
 +
 
 
  |}
 
  |}
 +
  
==== Client Cache Miss Response ====
+
 
 +
==== Server Settings Response ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,543: Line 3,136:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x88
+
  |rowspan="2"| 0x67
  |rowspan="1"|
+
  |rowspan="2"| Client
 +
| Form Id
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Form Data
 +
| string
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Education Settings ====
+
==== Show Profile ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,556: Line 3,158:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x89
+
  |rowspan="1"| 0x68
  |rowspan="2"|
+
  |rowspan="1"| Client
  | Settings
+
  | Xuid
  | String
+
  | string
|
+
  |  
|-
 
| Unknown 0
 
| boolean
 
  |
 
 
  |}
 
  |}
 +
 +
  
==== Emote ====
+
==== Set Default Game Type ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,576: Line 3,176:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="3"| 0x8A
+
  |rowspan="1"| 0x69
  |rowspan="3"|
+
  |rowspan="1"| Client
  | Runtime Entity Id
+
  | Game mode
  | ulong
+
  | VarInt
|
+
  |  
|-
 
| Emote Id
 
| String
 
|
 
|-
 
| Flags
 
| byte
 
  |
 
 
  |}
 
  |}
 +
  
==== Multiplayer Settings ====
+
 
 +
==== Remove Objective ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,600: Line 3,194:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="0"| 0x8B
+
  |rowspan="1"| 0x6A
  |rowspan="0"|
+
  |rowspan="1"| Client
 +
| Objective Id
 +
| string
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Settings Command ====
+
==== Set Display Objective ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,613: Line 3,212:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="2"| 0x8C
+
  |rowspan="5"| 0x6B
  |rowspan="2"|
+
  |rowspan="5"| Client
  | Command
+
  | Display Slot
  | String
+
  | string
  |
+
|
 +
|-
 +
| Objective Id
 +
| string
 +
  |  
 
  |-
 
  |-
  | Suppressing Output
+
  | Display Name
  | boolean
+
  | string
  |
+
  |  
|}
 
 
 
==== Anvil Damage ====
 
 
 
{| class="wikitable"
 
! Packet ID
 
! Bound To
 
! Field Name
 
! Field Type
 
! Notes
 
 
  |-
 
  |-
  |rowspan="2"| 0x8D
+
  | Criteria
|rowspan="2"|
+
  | string
| Damage
+
  |  
  | byte
 
  |
 
 
  |-
 
  |-
  | Position
+
  | Sort Order
  | Position
+
  | SignedVarInt
  |
+
  |  
 
  |}
 
  |}
 +
  
==== Completed Using Item ====
+
 
 +
==== Set Score ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,653: Line 3,246:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x8E
+
  |rowspan="1"| 0x6C
  |rowspan="1"|
+
  |rowspan="1"| Client
 +
| Entries
 +
| ScoreEntries
 +
|  
 
  |}
 
  |}
 +
 +
  
==== Network Settings ====
+
==== Lab Table ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,666: Line 3,264:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x8F
+
  |rowspan="5"| 0x6D
  |rowspan="1"|
+
  |rowspan="5"| Server & Client
 +
| Unknown Byte 0
 +
| byte
 +
|
 +
|-
 +
| Block Entity Position X
 +
| VarInt
 +
|
 +
|-
 +
| Block Entity Position Y
 +
| VarInt
 +
|
 +
|-
 +
| Block Entity Position Z
 +
| VarInt
 +
|
 +
|-
 +
| Reaction Type
 +
| byte
 +
|  
 
  |}
 
  |}
 +
  
==== Player Auth Input ====
+
 
 +
==== Update Block Synced ====
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 2,679: Line 3,298:
 
  ! Notes
 
  ! Notes
 
  |-
 
  |-
  |rowspan="1"| 0x90
+
|rowspan="6"| 0x6E
  |rowspan="1"|
+
|rowspan="6"| Client
 +
| Coordinates
 +
| BlockCoordinates
 +
|
 +
|-
 +
| Block Runtime ID
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Block Priority
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Data Layer ID
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Unknown0
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Unknown1
 +
| UnsignedVarLong
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Move Entity Delta ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="2"| 0x6F
 +
|rowspan="2"| Client
 +
| Runtime Entity ID
 +
| UnsignedVarLong
 +
|
 +
|-
 +
| Flags
 +
| ushort
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Set Scoreboard Identity ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
  |rowspan="1"| 0x70
 +
  |rowspan="1"| Client
 +
| Entries
 +
| ScoreboardIdentityEntries
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Set Local Player As Initialized ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="1"| 0x71
 +
|rowspan="1"| Server
 +
| Runtime Entity Id
 +
| UnsignedVarLong
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Update Soft Enum ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x72
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Network Stack Latency ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="2"| 0x73
 +
|rowspan="2"| Server & Client
 +
| Timestamp
 +
| ulong
 +
|
 +
|-
 +
| Send Back
 +
| byte
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Script Custom Event ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="2"| 0x75
 +
|rowspan="2"| Server & Client
 +
| Event Name
 +
| string
 +
|
 +
|-
 +
| Data
 +
| string
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Spawn Particle Effect ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="6"| 0x76
 +
|rowspan="6"| Client
 +
| Dimension Id
 +
| byte
 +
|
 +
|-
 +
| Unique Entity Id
 +
| SignedVarLong
 +
|
 +
|-
 +
| Position X
 +
| Vector3
 +
|
 +
|-
 +
| Position Y
 +
| string
 +
|
 +
|-
 +
| Position Z
 +
| float
 +
|
 +
|-
 +
| Identifier
 +
| String
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Available Entity Identifiers ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="1"| 0x77
 +
|rowspan="1"| Client
 +
| NamedTag
 +
| Nbt
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Level Sound Event (2) ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="6"| 0x78
 +
|rowspan="6"| Server & Client
 +
| Sound ID
 +
| byte
 +
|
 +
|-
 +
| Position
 +
| Vector3
 +
|
 +
|-
 +
| Block Id
 +
| SignedVarInt
 +
|
 +
|-
 +
| Entity Type
 +
| string
 +
|
 +
|-
 +
| Is baby mob
 +
| bool
 +
|
 +
|-
 +
| Is global
 +
| bool
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Network Chunk Publisher Update ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="4"| 0x79
 +
|rowspan="4"| Client
 +
| Position X
 +
| BlockCoordinates
 +
|
 +
|-
 +
| Position Y
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Position Z
 +
| int
 +
|
 +
|-
 +
| Radius
 +
| uint
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Biome Definition List ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="1"| 0x7A
 +
|rowspan="1"| Client
 +
| NamedTag
 +
| Nbt
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Level Sound Event (3) ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="6"| 0x7B
 +
|rowspan="6"| Server & Client
 +
| Sound ID
 +
| UnsignedVarInt
 +
|
 +
|-
 +
| Position
 +
| Vector3
 +
|
 +
|-
 +
| Block Id
 +
| SignedVarInt
 +
|
 +
|-
 +
| Entity Type
 +
| string
 +
|
 +
|-
 +
| Is baby mob
 +
| bool
 +
|
 +
|-
 +
| Is global
 +
| bool
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Level Event Generic ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x7C
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Lectern Update ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="4"| 0x7D
 +
|rowspan="4"| Client
 +
| Page
 +
| byte
 +
|
 +
|-
 +
| Total Pages
 +
| byte
 +
|
 +
|-
 +
| Block Position
 +
| Position
 +
|
 +
|-
 +
| Dropping Book
 +
| boolean
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Video Stream Connect ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="5"| 0x7E
 +
|rowspan="5"| Client
 +
| Server URI
 +
| string
 +
|
 +
|-
 +
| Frame Send Frequency
 +
| float
 +
|
 +
|-
 +
| Action
 +
| byte
 +
|
 +
|-
 +
| Resolution X
 +
| int
 +
|
 +
|-
 +
| Resolution Y
 +
| int
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Client Cache Status ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="1"| 0x81
 +
|rowspan="1"| Server & Client
 +
| Supported
 +
| bool
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== On Screen Texture Animation ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x82
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Map Create Locked Copy ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="2"| 0x83
 +
|rowspan="2"| Client
 +
| Original Map Id
 +
| long
 +
|
 +
|-
 +
| New Map Id
 +
| long
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Structure Template Data Export Request ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x84
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Structure Template Data Export Response ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x85
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Update Block Properties ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="2"| 0x86
 +
|rowspan="2"| Client
 +
| Unknown
 +
| byte
 +
|
 +
|-
 +
| NamedTag
 +
| Nbt
 +
|
 +
|}
 +
 +
 
 +
 
 +
==== Client Cache Blob Status ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x87
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Client Cache Miss Response ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="0"| 0x88
 +
|rowspan="0"| Client
 +
 
 +
|}
 +
 +
 
 +
 
 +
==== Network Settings ====
 +
 
 +
{| class="wikitable"
 +
! Packet ID
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="2"| 0x8F
 +
|rowspan="2"| Client
 +
| Unknown
 +
| byte
 +
|
 +
|-
 +
| Compression threshold
 +
| short
 +
|  
 
  |}
 
  |}
  
 
[[Category:Bedrock Minecraft]]
 
[[Category:Bedrock Minecraft]]

Revision as of 17:27, 25 May 2020

Remember that this page is a WIP, it is not even added to the Main Page. Come back later to see a more complete page.

Heads up!

This article is about the protocol for the latest stable release of Minecraft Bedrock Edition (1.14.60, protocol 390). See Protocol for the Java Edition Protocol.

This is the Bedrock Edition Protocol Documentation. The Bedrock Edition Protocol uses UDP instead of TCP that is used for the Java Edition.<br> The Bedrock Edition Client uses RakNet as its protocol library.

The default Bedrock Edition port is 19132

Contents

Data types

Size (bytes) Range Notes
byte 1 0 to 255
boolean 1 0 or 1 A byte treated as boolean, 0 is false but anything greater then that is true
short 2 -32768 to 32767
ushort 2 0 to 65535
int 4 -2147483648 to 2147483647 Signed 32-bit integer
uint 4 0 to 4294967295 Unsigned 32-bit integer
long 8 -2^63 to 2^63-1 Signed 64-bit integer
ulong 8 2^64-1 Unsigned 64-bit integer
float 4 A single-precision 32-bit IEEE 754 floating point number
double 8 A double-precision 64-bit IEEE 754 floating point number
VarInt &ge; 1<br>&le; 5 -2147483648 and 2147483647
VarLong &ge; 1<br>&le; 10 -2^63 and 2^63-1
UUID 16 A UUID Encoded as two unsigned 64-bit integers: the most significant 64 bits and the least significant 64 bits


Packet Format

Login process

Packets

Please note that some packet ids are missing, so they don't line up. The following packet ids are missing: 0x10, 0x74, 0x7F, 0x80 (16, 116, 127, 128)

Login

Packet ID Bound To Field Name Field Type Notes
0x01 Server Protocol version int
Chain data JSON array of JWT Data Contains the display name, UUID and XUID
Skin data JWT Data


Play Status

Packet ID Bound To Field Name Field Type Notes
0x02 Client Status int The current status of the client.

The values for each status are as follows:

  • 0: Login success
  • 1: Failed client
  • 2: Failed server
  • 3 Player spawn
  • 4 Failed invalid Tenant
  • 5: Failed Vanilla Edu.
  • 6: Failed Edu. Vanilla
  • 7: Failed server full

Server To Client Handshake

Packet ID Bound To Field Name Field Type Notes
0x03 Client JWT data JWT String Contains the salt to complete the Diffie-Hellman key exchange


Client To Server Handshake

Packet ID Bound To Field Name Field Type Notes
0x04 Server


Disconnect

Packet ID Bound To Field Name Field Type Notes
0x05 Client Disconnect screen visibility bool
Kick message string


Resource Packs info

Packet ID Bound To Field Name Field Type Notes
0x06 Client Forced to Accept bool If the resource pack requires the client accept it.
Scripting Enabled bool If scripting is enabled.
BehahaviorPackInfos ResourcePackInfos
ResourcePackInfos ResourcePackInfos


Resource Pack Stack

Packet ID Bound To Field Name Field Type Notes
0x07 Client Forced to Accept boolean If the resource pack must be accepted for the player to join the server.
Resource Pack Entry Field Name
Array Pack ID String The ID of the resource pack.
Pack Version String The version of the resource pack.
Subpack Name String The subpack name of the resource pack.
Behavior Pack Entry Field Name
Array Pack ID String The ID of the resource pack.
Pack Version String The version of the resource pack.
Subpack Name String The subpack name of the resource pack.
Experimental boolean If the sent resource and behavior packs are experimental.
Game Version String The version of the game the sent resource and behavior packs were made for.

Resource Pack Response

Packet ID Bound To Field Name Field Type Notes
0x08 Server rowspan="3" rowspan="3" Status
Pack IDs Size Little Endian short The amount of pack IDs included in this packet.
Pack IDs Array An array of all the Pack IDs.

The values for each status are as follows:

  • 0: None
  • 1: Refused
  • 2: Send packs
  • 3: Have all packs
  • 4: Completed

Text

Packet ID Bound To Field Name Field Type Notes
0x09 Server & Client Type byte The type of chat message sent.
Needs Translation boolean If the message sent is a translation key and needs to be translated.
Chat Type ID Text Derived from above; values sent here change depending on that.
0, 1, or 2 Source Name String The name of the source.
3, 4, or 5 Message String The message sent with the packet.
6, 7, or 8 Message String The message sent with the packet
Parameters Array The parameters sent with the packet. This usually includes translation parameters or similar types depending on what kind of chat type was sent.
XUID Optional String The XUID of the player who sent this message.
Platform Chat ID Optional String The platform chat ID of the sent message.
ID Chat Type
0 Chat
1 Whisper
2 Announcement
3 Raw
4 Tip
5 System
6 Translation
7 Popup
8 Jukebox Popup

Set Time

Packet ID Bound To Field Name Field Type Notes
0x0A Client Time SignedVarInt


Start Game

Packet ID Bound To Field Name Field Type Notes
0x0B Client Entity ID Self SignedVarLong
Runtime Entity ID UnsignedVarLong
Player Gamemode SignedVarInt
Spawn Vector3
Rotation Vector2
Seed SignedVarInt
Dimension SignedVarInt
Generator SignedVarInt
Gamemode SignedVarInt
Difficulty SignedVarInt
X SignedVarInt
Y VarInt
Z SignedVarInt
Has achievements disabled bool
Day cycle stop time SignedVarInt
EDU offer SignedVarInt
Has EDU features enabled bool
Rain level float
Lightning level float
Has Confirmed Platform Locked Content bool
Is Multiplayer bool
Broadcast To LAN bool
Xbox Live Broadcast Mode VarInt
Platform Broadcast Mode VarInt
Enable commands bool
Is texturepacks required bool
GameRules GameRules
Bonus Chest bool
Map Enabled bool
Permission Level SignedVarInt
Server Chunk Tick Range int
Has Locked Behavior Pack bool
Has Locked Resource Pack bool
Is From Locked World Template bool
Use MSA Gamertags Only bool
Is From World Template bool
Is World Template Option Locked bool
Only Spawn V1 Villagers bool
Game Version string
Level ID string
World name string
Premium World Template Id string
Is Trial bool
Is Server Side movement enabled bool
Current Tick long
Enchantment Seed SignedVarInt
Block Palette BlockPalette
Itemstates Itemstates
Multiplayer Correlation ID string


Add Player

Packet ID Bound To Field Name Field Type Notes
0x0C Client UUID UUID
Username string
Entity ID Self SignedVarLong
Runtime Entity ID UnsignedVarLong
Platform Chat ID string
X float
Y float
Z float
Speed X float
Speed Y float
Speed Z float
Pitch float
Yaw float
Head Yaw float
Item Item
Metadata MetadataDictionary
Flags UnsignedVarInt
Command permission UnsignedVarInt
Action Permissions UnsignedVarInt
Permission Level UnsignedVarInt
Custom stored permissions UnsignedVarInt
User Id long
Links Links
Device ID string
Device OS int


Add Entity

Packet ID Bound To Field Name Field Type Notes
0x0D Client Entity ID Self SignedVarLong
Runtime Entity ID UnsignedVarLong
Entity Type string
X float
Y float
Z float
Speed X float
Speed Y float
Speed Z float
Pitch float
Yaw float
Head Yaw float
Attributes EntityAttributes
Metadata MetadataDictionary
Links Links


Remove Entity

Packet ID Bound To Field Name Field Type Notes
0x0E Client Unique Entity Id SignedVarLong


Add Item Entity

Packet ID Bound To Field Name Field Type Notes
0x0F Client Entity ID Self SignedVarLong
Runtime Entity ID UnsignedVarLong
Item Item
X float
Y float
Z float
Speed X float
Speed Y float
Speed Z float
Metadata MetadataDictionary
Is From Fishing bool


Take Item Entity

Packet ID Bound To Field Name Field Type Notes
0x11 Client Item Runtime Entity Id UnsignedVarLong
Runtime Entity Id UnsignedVarLong


Move Entity Absolute

Packet ID Bound To Field Name Field Type Notes
0x12 Server & Client Runtime entity id UnsignedVarLong
Position Position
Rotation Position
On ground boolean
Teleported boolean

This packet is sent serverbound when riding a horse/donkey.

Move Player

Packet ID Bound To Field Name Field Type Notes
0x13 Server & Client Runtime entity id UnsignedVarLong
Position Position
Rotation Position
Mode float
On ground float
Riding runtime entity id float
Teleportation cause float
Entity type byte
On Ground bool
Other Runtime Entity ID UnsignedVarLong

Modes:

  • 0: Normal
  • 1: Reset
  • 2: Teleport
  • 3: Rotation

Teleportation causes:

  • 0: Unknown
  • 1: Projectile
  • 2: Chorus fruit
  • 3: Command
  • 4: Behavior

Rider Jump

Packet ID Bound To Field Name Field Type Notes
0x14 Server & Client Jump Strength SignedVarInt


Update Block

Packet ID Bound To Field Name Field Type Notes
0x15 Client Coordinates BlockCoordinates
Block Runtime ID UnsignedVarInt
Block Priority UnsignedVarInt
Storage UnsignedVarInt


Add Painting

Packet ID Bound To Field Name Field Type Notes
0x16 Client Unique Entity Id SignedVarLong
Runtime Entity Id UnsignedVarLong
Position X BlockCoordinates
Position Y SignedVarInt
Position Z string
Direction int
Name String


Tick Sync

Packet ID Bound To Field Name Field Type Notes
0x17 Server & Client Request Timestamp long
Response Timestamp long


Level Sound Event (1)

Packet ID Bound To Field Name Field Type Notes
0x18 Server & Client Sound ID byte
Position Vector3
Block Id SignedVarInt
Entity Type SignedVarInt
Is baby mob bool
Is global bool


Level Event

Packet ID Bound To Field Name Field Type Notes
0x19 Client Event ID SignedVarInt
Position Vector3
Data SignedVarInt


Block Event

Packet ID Bound To Field Name Field Type Notes
0x1A Client Block Position Position
Event Type SignedVarInt
Event Data SignedVarInt


Entity Event

Packet ID Bound To Field Name Field Type Notes
0x1B Server & Client Runtime Entity ID UnsignedVarLong
Event ID byte
Data SignedVarInt


Mob Effect

Packet ID Bound To Field Name Field Type Notes
0x1C Client Runtime entity id UnsignedVarLong
Event byte
Effect id SignedVarInt
Amplifier SignedVarInt
Particles bool
Duration SignedVarInt

Events:

  • 0: None
  • 1: Add
  • 2: Modify
  • 3: Remove

Update Attributes

Packet ID Bound To Field Name Field Type Notes
0x1D Client Runtime Entity ID UnsignedVarLong
Attributes PlayerAttributes


Inventory Transaction

Packet ID Bound To Field Name Field Type Notes
0x1E Server & Client Transaction Transaction


Mob Equipment

Packet ID Bound To Field Name Field Type Notes
0x1F Server & Client Runtime Entity ID UnsignedVarLong
Item Item
Slot byte
Selected Slot byte
Windows Id byte


Mob Armor Equipment

Packet ID Bound To Field Name Field Type Notes
0x20 Server & Client Runtime Entity ID UnsignedVarLong
Helmet Item
Chestplate Item
Leggings Item
Boots Item


Interact

Packet ID Bound To Field Name Field Type Notes
0x21 Server & Client Action ID byte
Target Runtime Entity ID UnsignedVarLong


Block Pick Request

Packet ID Bound To Field Name Field Type Notes
0x22 Server Block Position X SignedVarInt
Block Position Y SignedVarInt
Block Position Z SignedVarInt
Add User Data bool Whether there should be NBT data in the picked block (activated by pressing Ctrl on default keyboard controls)
Hotbar Slot byte

The Bedrock client sends the position of the block. It expects the server to decide the block to pick and add it to the inventory or switch the hotbar slot if needed.

Entity Pick Request

Packet ID Bound To Field Name Field Type Notes
0x23 Server Runtime Entity Id ulong
Hotbar Slot byte


Player Action

Packet ID Bound To Field Name Field Type Notes
0x24 Server Runtime Entity ID UnsignedVarLong
Action ID SignedVarInt
Coordinates BlockCoordinates
Face SignedVarInt


Entity Fall

Packet ID Bound To Field Name Field Type Notes
0x25 Server Runtime Entity Id UnsignedVarLong
Fall Distance float
In Void bool


Hurt Armor

Packet ID Bound To Field Name Field Type Notes
0x26 Client Health SignedVarInt


Set Entity Data

Packet ID Bound To Field Name Field Type Notes
0x27 Server & Client Runtime Entity ID UnsignedVarLong
Metadata MetadataDictionary


Set Entity Motion

Packet ID Bound To Field Name Field Type Notes
0x28 Server & Client Runtime Entity Id UnsignedVarLong
Motion X Vector3
Motion Y float
Motion Z float


Set Entity Link

Packet ID Bound To Field Name Field Type Notes
0x29 Client Ridden ID SignedVarLong
Rider ID SignedVarLong
Link Type byte
Unknown byte


Set Health

Packet ID Bound To Field Name Field Type Notes
0x2A Client Health SignedVarInt


Set Spawn Position

Packet ID Bound To Field Name Field Type Notes
0x2B Client Spawn Type SignedVarInt
Coordinates BlockCoordinates
Forced bool


Animate

Packet ID Bound To Field Name Field Type Notes
0x2C Server & Client Action ID SignedVarInt
Runtime Entity ID UnsignedVarLong


Respawn

Packet ID Bound To Field Name Field Type Notes
0x2D Server & Client Position X float
Position Y float
Position Z float
Runtime Entity Id byte
Runtime Entity ID UnsignedVarLong


Container Open

Packet ID Bound To Field Name Field Type Notes
0x2E Client Window Id byte
Type byte
Block Position Position
Unique Entity Id SignedVarLong


Container Close

Packet ID Bound To Field Name Field Type Notes
0x2F Server & Client Window Id byte


Player Hotbar

Packet ID Bound To Field Name Field Type Notes
0x30 Server & Client Selected Hotbar Slot UnsignedVarInt
Container Id byte
Select Hotbar Slot bool


Inventory Content

Packet ID Bound To Field Name Field Type Notes
0x31 Server & Client Inventory Id UnsignedVarInt
Input ItemStacks


Inventory Slot

Packet ID Bound To Field Name Field Type Notes
0x32 Server & Client Inventory Id UnsignedVarInt
Slot UnsignedVarInt
Item Item


Container Set Data

Packet ID Bound To Field Name Field Type Notes
0x33 Client Window Id byte
Property SignedVarInt
Value SignedVarInt


Crafting Data

Packet ID Bound To Field Name Field Type Notes
0x34 Client Recipes Recipes
Potion type recipes PotionTypeRecipe[]
potion container recipes PotionContainerChangeRecipe[]
Is Clean bool


Crafting Event

Packet ID Bound To Field Name Field Type Notes
0x35 Server & Client Window ID byte
Recipe Type SignedVarInt
Recipe ID UUID
Input ItemStacks
Result ItemStacks


Gui Data Pick Item

Packet ID Bound To Field Name Field Type Notes
0x36 Client


Adventure Settings

Packet ID Bound To Field Name Field Type Notes
0x37 Server & Client Flags UnsignedVarInt
Command permission UnsignedVarInt
Action permissions UnsignedVarInt
Permission level UnsignedVarInt
Custom stored permissions UnsignedVarInt
User Id long


Block Entity Data

Packet ID Bound To Field Name Field Type Notes
0x38 Server & Client Coordinates BlockCoordinates
NamedTag Nbt


Player Input

Packet ID Bound To Field Name Field Type Notes
0x39 Server Motion X float
Motion Z float
Jumping bool
Sneaking bool


Level Chunk

Packet ID Bound To Field Name Field Type Notes
0x3A Client Chunk X SignedVarInt
Chunk Z SignedVarInt
Sub Chunk Count UnsignedVarInt
Cache Enabled bool
Chunk Data ByteArray


Set Commands Enabled

Packet ID Bound To Field Name Field Type Notes
0x3B Client Commands enabled bool


Set Difficulty

Packet ID Bound To Field Name Field Type Notes
0x3C Client Difficulty UnsignedVarInt


Change Dimension

Packet ID Bound To Field Name Field Type Notes
0x3D Client Dimension SignedVarInt
Position X Vector3
Position Y bool
Position Z float
Respawn boolean


Set Player Game Type

Packet ID Bound To Field Name Field Type Notes
0x3E Server & Client Game mode SignedVarInt


Player List

Packet ID Bound To Field Name Field Type Notes
0x3F Client Records PlayerRecords


Simple Event

Packet ID Bound To Field Name Field Type Notes
0x40 Client Event Type ushort


Event

Packet ID Bound To Field Name Field Type Notes
0x41 Client Runtime Entity ID UnsignedVarLong
Event data SignedVarInt
Event type byte


Spawn Experience Orb

Packet ID Bound To Field Name Field Type Notes
0x42 Client Position X Vector3
Position Y SignedVarInt
Position Z float
Amount int


Map Item Data

Packet ID Bound To Field Name Field Type Notes
0x43 Client MapInfo MapInfo


Map Info Request

Packet ID Bound To Field Name Field Type Notes
0x44 Server & Client Unique Map Id SignedVarLong


Request Chunk Radius

Packet ID Bound To Field Name Field Type Notes
0x45 Server & Client Chunk radius SignedVarInt


Chunk Radius Updated

Packet ID Bound To Field Name Field Type Notes
0x46 Client Chunk radius SignedVarInt


ItemFrame Drop Item

Packet ID Bound To Field Name Field Type Notes
0x47 Server & Client Block Position X BlockCoordinates
Block Position Y int See note below.
Block Position Z int

According to the NukkitX Protocol, the server sends the Y coordinate divided by two, and negative if needs to be subtracted by one. Example:

   int y;
   if (packet.getBlockPosition().getY() > 0) {
       y = packet.getBlockPosition().getY() * 2;
   } else {
       y = (packet.getBlockPosition().getY() * -2) - 1;
   }

Game Rules Changed

Packet ID Bound To Field Name Field Type Notes
0x48 Client Rules GameRules


Camera

Packet ID Bound To Field Name Field Type Notes
0x49 Client Camera Unique Entity Id SignedVarLong
Player Unique Entity Id SignedVarLong


Boss Event

Packet ID Bound To Field Name Field Type Notes
0x4A Client Boss Entity ID SignedVarLong
Event Type UnsignedVarInt


Show Credits

Packet ID Bound To Field Name Field Type Notes
0x4B Client Runtime Entity ID UnsignedVarLong
Status SignedVarInt


Available Commands

Packet ID Bound To Field Name Field Type Notes
0x4C Client


Command Request

Packet ID Bound To Field Name Field Type Notes
0x4D Server Command string
Command type UnsignedVarInt
Unknown UUID UUID
Request ID string
Unknown bool


CommandBlock Update

Packet ID Bound To Field Name Field Type Notes
0x4E Server Is Block bool


Command Output

Packet ID Bound To Field Name Field Type Notes
0x4F Client


Update Trade

Packet ID Bound To Field Name Field Type Notes
0x50 Client Window ID byte
Window Type byte
Unknown0 VarInt
Unknown1 VarInt
Unknown2 VarInt
Is Willing bool
Trader Entity ID SignedVarLong
Player Entity ID SignedVarLong
Display Name string
NamedTag Nbt


Update Equip

Packet ID Bound To Field Name Field Type Notes
0x51 Client Window ID byte
Window Type byte
Unknown byte
Entity ID SignedVarLong
NamedTag Nbt


Resource Pack Data Info

Packet ID Bound To Field Name Field Type Notes
0x52 Client Package ID string
Max Chunk Size uint
Chunk Count uint
Compressed Package Size ulong
Hash ByteArray
Is Premium bool
Pack Type byte


Resource Pack Chunk Data

Packet ID Bound To Field Name Field Type Notes
0x53 Client Package ID string
Chunk Index uint
Progress ulong
Payload ByteArray


Resource Pack Chunk Request

Packet ID Bound To Field Name Field Type Notes
0x54 Server Package ID string
Chunk Index uint


Transfer

Packet ID Bound To Field Name Field Type Notes
0x55 Client Address string
Port ushort


Play Sound

Packet ID Bound To Field Name Field Type Notes
0x56 Client Sound name string
Sound position Position
Volume float
Pitch float


Stop Sound

Packet ID Bound To Field Name Field Type Notes
0x57 Client Sound Name string
Stopping All Sound bool


Set Title

Packet ID Bound To Field Name Field Type Notes
0x58 Client Type SignedVarInt
Text string
Fade In Time SignedVarInt
Stay Time SignedVarInt
Fade Out Time SignedVarInt


Add Behavior Tree

Packet ID Bound To Field Name Field Type Notes
0x59 Client Behavior Tree Json string


Structure Block Update

Packet ID Bound To Field Name Field Type Notes
0x5A Client


Show Store Offer

Packet ID Bound To Field Name Field Type Notes
0x5B Client Offer Id string
Shown To All bool


Purchase Receipt

Packet ID Bound To Field Name Field Type Notes
0x5C Server


Player Skin

Packet ID Bound To Field Name Field Type Notes
0x5D Server & Client UUID UUID
Skin Skin
Skin Name string
Old Skin Name string


Sub Client Login

Packet ID Bound To Field Name Field Type Notes
0x5E Client


Automation Client Connect

Packet ID Bound To Field Name Field Type Notes
0x5F Client Address string


Set Last Hurt By

Packet ID Bound To Field Name Field Type Notes
0x60 Client Entity Type Id VarInt


Book Edit

Packet ID Bound To Field Name Field Type Notes
0x61 Client


Npc Request

Packet ID Bound To Field Name Field Type Notes
0x62 Server & Client Runtime Entity ID UnsignedVarLong
Unknown0 byte
Unknown1 string
Unknown2 byte


Photo Transfer

Packet ID Bound To Field Name Field Type Notes
0x63 Server File name string
Image data string
Unknown2 string


Model Form Request

Packet ID Bound To Field Name Field Type Notes
0x64 Client Form Id UnsignedVarInt
Form Data string


Model Form Response

Packet ID Bound To Field Name Field Type Notes
0x65 Server Form Id UnsignedVarInt
Form Data string


Server Settings Request

Packet ID Bound To Field Name Field Type Notes
0x66 Server


Server Settings Response

Packet ID Bound To Field Name Field Type Notes
0x67 Client Form Id UnsignedVarLong
Form Data string


Show Profile

Packet ID Bound To Field Name Field Type Notes
0x68 Client Xuid string


Set Default Game Type

Packet ID Bound To Field Name Field Type Notes
0x69 Client Game mode VarInt


Remove Objective

Packet ID Bound To Field Name Field Type Notes
0x6A Client Objective Id string


Set Display Objective

Packet ID Bound To Field Name Field Type Notes
0x6B Client Display Slot string
Objective Id string
Display Name string
Criteria string
Sort Order SignedVarInt


Set Score

Packet ID Bound To Field Name Field Type Notes
0x6C Client Entries ScoreEntries


Lab Table

Packet ID Bound To Field Name Field Type Notes
0x6D Server & Client Unknown Byte 0 byte
Block Entity Position X VarInt
Block Entity Position Y VarInt
Block Entity Position Z VarInt
Reaction Type byte


Update Block Synced

Packet ID Bound To Field Name Field Type Notes
0x6E Client Coordinates BlockCoordinates
Block Runtime ID UnsignedVarInt
Block Priority UnsignedVarInt
Data Layer ID UnsignedVarInt
Unknown0 UnsignedVarLong
Unknown1 UnsignedVarLong


Move Entity Delta

Packet ID Bound To Field Name Field Type Notes
0x6F Client Runtime Entity ID UnsignedVarLong
Flags ushort


Set Scoreboard Identity

Packet ID Bound To Field Name Field Type Notes
0x70 Client Entries ScoreboardIdentityEntries


Set Local Player As Initialized

Packet ID Bound To Field Name Field Type Notes
0x71 Server Runtime Entity Id UnsignedVarLong


Update Soft Enum

Packet ID Bound To Field Name Field Type Notes
0x72 Client


Network Stack Latency

Packet ID Bound To Field Name Field Type Notes
0x73 Server & Client Timestamp ulong
Send Back byte


Script Custom Event

Packet ID Bound To Field Name Field Type Notes
0x75 Server & Client Event Name string
Data string


Spawn Particle Effect

Packet ID Bound To Field Name Field Type Notes
0x76 Client Dimension Id byte
Unique Entity Id SignedVarLong
Position X Vector3
Position Y string
Position Z float
Identifier String


Available Entity Identifiers

Packet ID Bound To Field Name Field Type Notes
0x77 Client NamedTag Nbt


Level Sound Event (2)

Packet ID Bound To Field Name Field Type Notes
0x78 Server & Client Sound ID byte
Position Vector3
Block Id SignedVarInt
Entity Type string
Is baby mob bool
Is global bool


Network Chunk Publisher Update

Packet ID Bound To Field Name Field Type Notes
0x79 Client Position X BlockCoordinates
Position Y UnsignedVarInt
Position Z int
Radius uint


Biome Definition List

Packet ID Bound To Field Name Field Type Notes
0x7A Client NamedTag Nbt


Level Sound Event (3)

Packet ID Bound To Field Name Field Type Notes
0x7B Server & Client Sound ID UnsignedVarInt
Position Vector3
Block Id SignedVarInt
Entity Type string
Is baby mob bool
Is global bool


Level Event Generic

Packet ID Bound To Field Name Field Type Notes
0x7C Client


Lectern Update

Packet ID Bound To Field Name Field Type Notes
0x7D Client Page byte
Total Pages byte
Block Position Position
Dropping Book boolean


Video Stream Connect

Packet ID Bound To Field Name Field Type Notes
0x7E Client Server URI string
Frame Send Frequency float
Action byte
Resolution X int
Resolution Y int


Client Cache Status

Packet ID Bound To Field Name Field Type Notes
0x81 Server & Client Supported bool


On Screen Texture Animation

Packet ID Bound To Field Name Field Type Notes
0x82 Client


Map Create Locked Copy

Packet ID Bound To Field Name Field Type Notes
0x83 Client Original Map Id long
New Map Id long


Structure Template Data Export Request

Packet ID Bound To Field Name Field Type Notes
0x84 Client


Structure Template Data Export Response

Packet ID Bound To Field Name Field Type Notes
0x85 Client


Update Block Properties

Packet ID Bound To Field Name Field Type Notes
0x86 Client Unknown byte
NamedTag Nbt


Client Cache Blob Status

Packet ID Bound To Field Name Field Type Notes
0x87 Client


Client Cache Miss Response

Packet ID Bound To Field Name Field Type Notes
0x88 Client


Network Settings

Packet ID Bound To Field Name Field Type Notes
0x8F Client Unknown byte
Compression threshold short