Pre-release protocol

From wiki.vg
Revision as of 22:20, 29 July 2015 by Niko (talk | contribs) (Client Status is now sent when the client opens the inventory, Entity Action was used before.)
Jump to navigation Jump to search

This page documents the changes from the last stable Minecraft release (currently 1.8.8, protocol 47) to the current pre-release (currently 15w31a, protocol 49). Note that this page contains bleeding-edge information that may not be completely or correctly documented.

One who wishes to commandeer the merging of this into Protocol when an update is made must be sure to respect any changes that may have occurred to the respective packets there.

Protocol history

None so far.

New/modified data types

None so far.

Handshaking

Clientbound

No changes so far.

Serverbound

Handshake

This causes the server to switch into the target state.

Packet ID State Bound To Field Name Field Type Notes
0x00 Handshaking Server Protocol Version VarInt See protocol version numbers (currently 47 49)
Server Address String hostname or IP, e.g. localhost or 127.0.0.1
Server Port Unsigned Short default is 25565
Next State VarInt 1 for status, 2 for login

Play

Clientbound

No changes so far.

Serverbound

Player Digging

Sent when the player mines a block. A Notchian server only accepts digging packets with coordinates within a 6-unit radius of the player's position.

Packet ID State Bound To Field Name Field Type Notes
0x07 Play Server Status Byte The action the player is taking against the block (see below)
Location Position Block position
Face Byte The face being hit (see below)

Status can (currently) be one of six values:

Meaning Value
Started digging 0
Cancelled digging 1
Finished digging 2
Drop item stack 3
Drop item 4
Shoot arrow / finish eating 5
Swap item in Hand 6

Notchian clients send a 0 (started digging) when they start digging and a 2 (finished digging) once they think they are finished. If digging is aborted, the client simply send a 1 (cancel digging).

Status code 4 (drop item) is a special case. In-game, when you use the Drop Item command (keypress 'q'), a dig packet with a status of 4, and all other values set to 0, is sent from client to server. Status code 3 is similar, but drops the entire stack.

Status code 5 (shoot arrow / finish eating) is also a special case. The x, y and z fields are all set to 0 like above, with the exception of the face field, which is set to 255.

Status code 6 is another special case. Used to swap or assign an item to the second hand. The rest of the fields (x, y, z and face) are all set to 0.

The face can be one of six values, representing the face being hit:

Value 0 1 2 3 4 5
Offset -Y +Y -Z +Z -X +X


Held Item Change

Sent when the player changes the slot selection

Packet ID State Bound To Field Name Field Type Notes
0x09 0x0A Play Server Slot Short The slot which the player has selected (0–8)


Animation

Sent when the player's arm swings

Packet ID State Bound To Field Name Field Type Notes
0x0A 0x0B Play Server Hand Byte Hand used for the animation.


Entity Action

Sent at least when crouching, leaving a bed, or sprinting. To send action animation to client use 0x28. The client will send this with Action ID = 3 when “Leave Bed” is clicked.

Packet ID State Bound To Field Name Field Type Notes
0x0B 0x0C Play Server Entity ID VarInt Player ID
Action ID VarInt The ID of the action, see below
Jump Boost VarInt Horse jump boost. Ranged from 0 -> 100.

Action ID can be one of the following values:

ID Action
0 Crouch
1 Uncrouch
2 Leave bed
3 Start sprinting
4 Stop sprinting
5 Jump with horse
6 Open inventory


Steer Vehicle

Packet ID State Bound To Field Name Field Type Notes
0x0C 0x0D Play Server Sideways Float Positive to the left of the player
Forward Float Positive forward
Flags Unsigned Byte Bit mask. 0x1: jump, 0x2: unmount

Close Window

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

Note, Notchian clients send a close window message with Window ID 0 to close their inventory even though there is never an Open Window message for inventory.

Packet ID State Bound To Field Name Field Type Notes
0x0D 0x0E Play Server Window ID Unsigned Byte This is the ID of the window that was closed. 0 for inventory.

Click Window

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

Packet ID State Bound To Field Name Field Type Notes
0x0E 0x0F Play Server Window ID Unsigned Byte The ID of the window which was clicked. 0 for player inventory.
Slot Short The clicked slot Nr., see below
Button Byte The button used in the click, see below
Action Number Short A unique number for the action, implemented by Notchian as a counter, starting at 1. Used by the server to send back a Confirm Transaction.
Mode Byte Inventory operation mode, see below
Clicked item Slot The clicked slot. Has to be empty (item ID = -1) for drop mode.

See inventory windows for further information about how slots are indexed.

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

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

Mode Button Slot Trigger
0 0 Normal Left mouse click
1 Normal Right mouse click
1 0 Normal Shift + left mouse click
1 Normal Shift + right mouse click (identical behavior)
2 0 Normal Number key 1
1 Normal Number key 2
2 Normal Number key 3
8 Normal Number key 9
3 2 Normal Middle click
4 0 Normal* Drop key (Q) (* Clicked item is different, see above)
1 Normal* Ctrl + Drop key (Ctrl-Q) (drops full stack)
0 -999 Left click outside inventory holding nothing (no-op)
1 -999 Right click outside inventory holding nothing (no-op)
5 0 -999 Starting left mouse drag (or middle mouse)
4 -999 Starting right mouse drag
1 Normal Add slot for left-mouse drag
5 Normal Add slot for right-mouse drag
2 -999 Ending left mouse drag
6 -999 Ending right mouse drag
6 0 Normal Double click

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

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

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

The server will send back a Confirm Transaction packet. If the click was not accepted, the client must reflect that packet before sending more Click Window packets, otherwise the server will reject them silently. The Notchian server also sends a Window Items packet for the open window and Set Slot packets for the clicked and cursor slot, but only when the click was not accepted, probably to resynchronize client and server.


Creative Inventory Action

While the user is in the standard inventory (i.e., not a crafting bench) in Creative mode, the player will send this packet.

Clicking in the creative inventory menu is quite different from non-creative inventory management. Picking up an item with the mouse actually deletes the item from the server, and placing an item into a slot or dropping it out of the inventory actually tells the server to create the item from scratch. (This can be verified by clicking an item that you don't mind deleting, then severing the connection to the server; the item will be nowhere to be found when you log back in.) As a result of this implementation strategy, the "Destroy Item" slot is just a client-side implementation detail that means "I don't intend to recreate this item.". Additionally, the long listings of items (by category, etc.) are a client-side interface for choosing which item to create. Picking up an item from such listings sends no packets to the server; only when you put it somewhere does it tell the server to create the item in that location.

This action can be described as "set inventory slot". Picking up an item sets the slot to item ID -1. Placing an item into an inventory slot sets the slot to the specified item. Dropping an item (by clicking outside the window) effectively sets slot -1 to the specified item, which causes the server to spawn the item entity, etc.. All other inventory slots are numbered the same as the non-creative inventory (including slots for the 2x2 crafting menu, even though they aren't visible in the vanilla client).

Packet ID State Bound To Field Name Field Type Notes
0x10 0x11 Play Server Slot Short Inventory slot
Clicked Item Slot

Enchant Item

Packet ID State Bound To Field Name Field Type Notes
0x11 0x12 Play Server Window ID Byte The ID of the enchantment table window sent by Open Window
Enchantment Byte The position of the enchantment on the enchantment table window, starting with 0 as the topmost one

Tab-Complete

Sent when the user presses tab while writing text.

Packet ID State Bound To Field Name Field Type Notes
0x14 0x15 Play Server Text String All text behind the cursor
Has Position Boolean
Looked At Block Optional Position The position of the block being looked at. Only sent if Has Position is true

Client Settings

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

Packet ID State Bound To Field Name Field Type Notes
0x15 0x16 Play Server Locale String e.g. en_GB
View Distance Byte Client-side render distance, in chunks
Chat Mode Byte 0: enabled, 1: commands only, 2: hidden
Chat Colors Boolean “Colors” multiplayer setting
Displayed Skin Parts Unsigned Byte Skin parts, see note below
Main Hand Byte 0: Left, 1: Right

Displayed Skin Parts flags:

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

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

Client Status

Sent when the client is ready to complete login and when the client is ready to respawn after death.

Packet ID State Bound To Field Name Field Type Notes
0x16 0x17 Play Server Action ID VarInt See below

Action ID values:

Action ID Action
0 Perform respawn
1 Request stats
2 Taking Inventory achievement Open Inventory

Status

Clientbound

No changes so far.

Serverbound

No changes so far.

Login

Clientbound

No changes so far.

Serverbound

No changes so far.