Difference between revisions of "Pre-release protocol"

From wiki.vg
Jump to navigation Jump to search
(Update metadata format.)
 
(1.21.2 packet ID changes (apart from regular shifts).)
Line 1: Line 1:
This page documents the changes from the [[Protocol|last stable Minecraft release]] (currently 1.3.2) to the current pre-release (or weekly release).
+
This page documents the changes from release 1.21.1 (protocol 767) to the current release (1.21.3, protocol 768). The stable protocol documentation is currently lagging behind, and the changes documented here will be merged soon, once they are complete. The current pre-release (snapshot 24w44a) is not yet documented.
  
== New packets ==
+
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.
  
-None-
+
== Contents ==
  
== Changed packets ==
+
<div style="float:right;">__TOC__</div>
  
=== Time Update (0x04) ===
+
=== Data types ===
  
''Server to Client''
+
No changes so far.
  
Time is based on ticks, where 20 ticks happen every second. There are 24000 ticks in a day, making Minecraft days exactly 20 minutes long.
+
=== Packets ===
 
 
The time of day is based on the timestamp modulo 24000. 0 is sunrise, 6000 is noon, 12000 is sunset, and 18000 is midnight.
 
 
 
The default SMP server increments both by 20 every second.
 
 
 
The &#39;Time&#39; is the Age of the world. It is not changing on server commands and will increased by 20 every second.
 
 
 
{| class="wikitable"
 
|- class="row0"
 
! class="col0" | Packet ID
 
! class="col1" | Field Name
 
! class="col2" | Field Type
 
! class="col3" | Example
 
! class="col4" | Notes
 
|- class="row1"
 
| class="col0 centeralign" rowspan="2" | 0x04
 
| class="col1 centeralign" | Time
 
| class="col2 centeralign" | long
 
| class="col3 centeralign" | 45464654
 
| class="col4" | The &#39;Age of the world&#39;, in ticks
 
 
 
|- class="row2"
 
| class="col0 centeralign" | Day Time
 
| class="col1 centeralign" | long
 
| class="col2 centeralign" | 21321
 
| class="col3" | The world (or region) time, in ticks
 
|- class="row3"
 
! class="col0" | Total Size:
 
| class="col1 rightalign" colspan="4" | 17 Bytes
 
|}
 
 
 
=== Spawn Named Entity (0x14) ===
 
 
 
See the change in metadata [[#metadata|below]]. (Under Protocol History, 2012-08-24)
 
 
 
=== Spawn Dropped Item (0x15) ===
 
 
 
'''''TODO'''''
 
 
 
It includes a new byte array after the "Damage" field, and before the "X" field if certain conditions are met. If the array does not exist, then the length of the array is "-1".
 
 
 
=== Spawn Mob (0x18) ===
 
 
 
See the change in metadata [[#metadata|below]]. (Under Protocol History, 2012-08-24)
 
 
 
=== Entity Metadata (0x28) ===
 
 
 
See the change in metadata [[#metadata|below]]. (Under Protocol History, 2012-08-24)
 
 
 
== Changed data types ==
 
 
 
{{anchor|metadata}}
 
== Entity Metadata Format ==
 
 
 
Note that entity metadata is a totally distinct concept from block metadata.
 
 
 
The entity metadata format is quirky dictionary format, where the key and the value's type are packed in a single byte.
 
 
 
To parse, repeat the following procedure:
 
 
 
# Read an unsigned byte
 
# If this byte == 127, stop reading
 
# Decompose the byte. <br> The bottom 5 bits (0x1F) serve as an identifier (key) for the data to follow. <br> The top 3 bits (0xE0) serve as a type.
 
# Read and unpack based on the type (below)
 
  
 
{| class="wikitable"
 
{| class="wikitable"
|-
+
! ID
! Type
+
! Packet name
! Meaning
+
!colspan="2"| Documentation
|-  
+
|-
| 0
+
!colspan="4"| Play clientbound
| byte
+
{{PacketList|0x20|Synchronize Entity Position|rel=added}}
|-
+
{{PacketList|0x31|Move Minecart Along Track|rel=added}}
| 1
+
{{PacketList|0x41|Update Recipe Book|pre=removed}}
| short
+
{{PacketList|0x43|Player Rotation|rel=added}}
|-
+
{{PacketList|0x44|Recipe Book Add|rel=added}}
| 2
+
{{PacketList|0x45|Recipe Book Remove|rel=added}}
| int
+
{{PacketList|0x46|Recipe Book Settings|rel=added}}
|-
+
{{PacketList|{{change|0x53|0x63}}|Set Held Item|pre=unchanged}}
| 3
+
{{PacketList|0x5a|Set Cursor Item|rel=added}}
| float
+
{{PacketList|0x66|Set Player Inventory Slot|rel=added}}
|-
+
|-
| 4
+
!colspan="4"| Play serverbound
| string16
+
{{PacketList|0x02|Bundle Item Selected|rel=added}}
|-
+
{{PacketList|0x0b|Client Tick End|rel=added}}
| 5
 
| short, byte, short (slot type) - If first short is empty, no further data is sent.
 
|-
 
| 6
 
| int, int, int (x, y, z)
 
 
|}
 
|}
  
In Python-like code:
+
[[Category:Minecraft Modern]]
<source lang="python">
 
#socket is positioned at the beginning of the metadata array. Also note that the method unpack() doesn't exist in socket
 
metadata = {}
 
x = socket.unpack('byte')
 
while x != 127:
 
    index = x & 0x1F # Lower 5 bits
 
    ty    = x >> 5  # Upper 3 bits
 
    if ty == 0: val = socket.unpack('byte')
 
    if ty == 1: val = socket.unpack('short')
 
    if ty == 2: val = socket.unpack('int')
 
    if ty == 3: val = socket.unpack('float')
 
    if ty == 4: val = socket.unpack('string16')
 
    if ty == 5:
 
        val = {}
 
        val["id"] = socket.unpack('short')
 
        if val["id] != -1:
 
            val["count"]  = socket.unpack('byte')
 
            val["damage"] = socket.unpack('short')
 
    if ty == 6:
 
        val = []
 
        for i in range(3):
 
            val.append(socket.unpack('int'))
 
    metadata[index] = (ty, val)
 
    x = socket.unpack('byte')
 
return metadata
 
</source>
 
 
 
== Removed packets ==
 
 
 
-None-
 
 
 
== Protocol History ==
 
 
 
=== 2012-09-06 ===
 
* 12w36a
 
* Protocol version is now 42
 
 
 
=== 2012-08-24 ===
 
* 12w34b
 
* Protocol version is now 41
 
 
 
* Changed Entity Metadata Format
 
 
 
=== 2012-08-09 ===
 
* 12w32a
 
* Protocol version is now 40
 
 
 
* Changed Time Update packet
 

Revision as of 00:48, 1 November 2024

This page documents the changes from release 1.21.1 (protocol 767) to the current release (1.21.3, protocol 768). The stable protocol documentation is currently lagging behind, and the changes documented here will be merged soon, once they are complete. The current pre-release (snapshot 24w44a) is not yet documented.

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

Contents

Data types

No changes so far.

Packets

ID Packet name Documentation
Play clientbound
0x20 Synchronize Entity Position Pre
0x31 Move Minecart Along Track Pre
0x41 Update Recipe Book Current
0x43 Player Rotation Pre
0x44 Recipe Book Add Pre
0x45 Recipe Book Remove Pre
0x46 Recipe Book Settings Pre
0x53 0x63 Set Held Item Current (unchanged)
0x5a Set Cursor Item Pre
0x66 Set Player Inventory Slot Pre
Play serverbound
0x02 Bundle Item Selected Pre
0x0b Client Tick End Pre