Difference between revisions of "Pre-release protocol"

From wiki.vg
Jump to navigation Jump to search
(Close Window and Click Window are the same, the new slot is number 45 and there isn't a new mode for the new key (it does nothing in the inventory).)
(Added Main Hand to Client Settings.)
Line 445: Line 445:
  
 
The server will send back a [[#Confirm Transaction_2|Confirm Transaction]] packet. If the click was not accepted, the client must reflect that packet before sending more [[#Click Window|Click Window]] packets, otherwise the server will reject them silently. The Notchian server also sends a [[#Window Items|Window Items]] packet for the open window and [[#Set Slot|Set Slot]] packets for the clicked and cursor slot, but only when the click was not accepted, probably to resynchronize client and server.
 
The server will send back a [[#Confirm Transaction_2|Confirm Transaction]] packet. If the click was not accepted, the client must reflect that packet before sending more [[#Click Window|Click Window]] packets, otherwise the server will reject them silently. The Notchian server also sends a [[#Window Items|Window Items]] packet for the open window and [[#Set Slot|Set Slot]] packets for the clicked and cursor slot, but only when the click was not accepted, probably to resynchronize client and server.
 +
 +
 +
==== Client Settings ====
 +
 +
Sent when the player connects, or when settings are changed.
 +
 +
{| class="wikitable"
 +
! Packet ID
 +
! State
 +
! Bound To
 +
! Field Name
 +
! Field Type
 +
! Notes
 +
|-
 +
|rowspan="6"| {{Change|0x15|0x16}}
 +
|rowspan="6"| Play
 +
|rowspan="6"| 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.
  
 
== Status ==
 
== Status ==

Revision as of 22:08, 29 July 2015

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.


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.

Status

Clientbound

No changes so far.

Serverbound

No changes so far.

Login

Clientbound

No changes so far.

Serverbound

No changes so far.