3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #ifndef NETWORKPROTOCOL_HEADER
21 #define NETWORKPROTOCOL_HEADER
22 #include "util/string.h"
25 changes by PROTOCOL_VERSION:
28 Base for writing changes here
33 Add TOCLIENT_CRAFTITEMDEF
35 Obsolete TOSERVER_CLICK_ACTIVEOBJECT
36 Obsolete TOSERVER_GROUND_ACTION
38 Make players to be handled mostly as ActiveObjects
40 Only non-cached textures are sent
43 Obsolete TOCLIENT_TOOLDEF
44 Obsolete TOCLIENT_CRAFTITEMDEF
45 Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
47 Digging based on item groups
50 ContentFeatures and NodeDefManager use a different serialization
51 format; better for future version cross-compatibility
55 Version raised to force 'fly' and 'fast' privileges into effect.
56 Node metadata change (came in later; somewhat incompatible)
58 TileDef in ContentFeatures
61 TOCLIENT_INVENTORY_FORMSPEC
64 TOSERVER_INVENTORY_FIELDS
66 TOCLIENT_DETACHED_INVENTORY
68 InventoryList field "Width" (deserialization fails with old versions)
70 Added transfer of player pressed keys to the server
71 Added new messages for mesh and bone animation, as well as attachments
72 GENERIC_CMD_SET_ANIMATION
73 GENERIC_CMD_SET_BONE_POSITION
74 GENERIC_CMD_SET_ATTACHMENT
76 Serialization format changes
78 TOCLIENT_SHOW_FORMSPEC
80 Serialization format change: include backface_culling flag in TileDef
81 Added rightclickable field in nodedef
82 TOCLIENT_SPAWN_PARTICLE
83 TOCLIENT_ADD_PARTICLESPAWNER
84 TOCLIENT_DELETE_PARTICLESPAWNER
86 damageGroups added to ToolCapabilities
87 sound_place added to ItemDefinition
89 GENERIC_CMD_SET_PHYSICS_OVERRIDE
94 TOCLIENT_HUD_SET_FLAGS
98 range added to ItemDefinition
99 drowning, leveled and liquid_range added to ContentFeatures
100 stepheight and collideWithObjects added to object properties
101 version, heat and humidity transfer in MapBock
102 automatic_face_movement_dir and automatic_face_movement_dir_offset
103 added to object properties
107 TOSERVER_CLIENT_READY
109 ContentFeatures version 7
110 ContentFeatures: change number of special tiles to 6 (CF_SPECIAL_COUNT)
113 #define LATEST_PROTOCOL_VERSION 24
115 // Server's supported network protocol range
116 #define SERVER_PROTOCOL_VERSION_MIN 13
117 #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
119 // Client's supported network protocol range
120 #define CLIENT_PROTOCOL_VERSION_MIN 13
121 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
123 // Constant that differentiates the protocol from random data and other protocols
124 #define PROTOCOL_ID 0x4f457403
126 #define PASSWORD_SIZE 28 // Maximum password length. Allows for
127 // base64-encoded SHA-1 (27+\0).
129 #define FORMSPEC_API_VERSION 1
130 #define FORMSPEC_VERSION_STRING "formspec_version[" TOSTRING(FORMSPEC_API_VERSION) "]"
132 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
136 TOCLIENT_INIT = 0x10,
138 Server's reply to TOSERVER_INIT.
139 Sent second after connected.
141 [0] u16 TOSERVER_INIT
142 [2] u8 deployed version
143 [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
144 [12] u64 map seed (new as of 2011-02-27)
145 [20] f1000 recommended send interval (in seconds) (new as of 14)
147 NOTE: The position in here is deprecated; position is
148 explicitly sent afterwards
151 TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
152 TOCLIENT_ADDNODE = 0x21,
157 u8 keep_metadata // Added in protocol version 22
159 TOCLIENT_REMOVENODE = 0x22,
161 TOCLIENT_PLAYERPOS = 0x23, // Obsolete
164 // Followed by an arbitary number of these:
165 // Number is determined from packet length.
167 [N+2] v3s32 position*100
168 [N+2+12] v3s32 speed*100
169 [N+2+12+12] s32 pitch*100
170 [N+2+12+12+4] s32 yaw*100
173 TOCLIENT_PLAYERINFO = 0x24, // Obsolete
176 // Followed by an arbitary number of these:
177 // Number is determined from packet length.
182 TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
184 TOCLIENT_SECTORMETA = 0x26, // Obsolete
188 [3...] v2s16 pos + sector metadata
191 TOCLIENT_INVENTORY = 0x27,
194 [2] serialized inventory
197 TOCLIENT_OBJECTDATA = 0x28, // Obsolete
202 u16 number of player positions
215 TOCLIENT_TIME_OF_DAY = 0x29,
219 Added in a later version:
223 // (oops, there is some gap here)
225 TOCLIENT_CHAT_MESSAGE = 0x30,
232 TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
235 u16 count of removed objects
236 for all removed objects {
239 u16 count of added objects
240 for all added objects {
243 u32 initialization data length
244 string initialization data
248 TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
265 TOCLIENT_MOVE_PLAYER = 0x34,
268 v3f1000 player position
273 TOCLIENT_ACCESS_DENIED = 0x35,
280 TOCLIENT_PLAYERITEM = 0x36, // Obsolete
283 u16 count of player items
284 for all player items {
286 u16 length of serialized item
287 string serialized item
291 TOCLIENT_DEATHSCREEN = 0x37,
294 u8 bool set camera point target
295 v3f1000 camera point target (to point the death cause or whatever)
298 TOCLIENT_MEDIA = 0x38,
301 u16 total number of texture bunches
302 u16 index of this bunch
303 u32 number of files in this bunch
310 u16 length of remote media server url (if applicable)
314 TOCLIENT_TOOLDEF = 0x39,
317 u32 length of the next item
318 serialized ToolDefManager
321 TOCLIENT_NODEDEF = 0x3a,
324 u32 length of the next item
325 serialized NodeDefManager
328 TOCLIENT_CRAFTITEMDEF = 0x3b,
331 u32 length of the next item
332 serialized CraftiItemDefManager
335 TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
343 u16 length of sha1_digest
348 TOCLIENT_ITEMDEF = 0x3d,
351 u32 length of next item
352 serialized ItemDefManager
355 TOCLIENT_PLAY_SOUND = 0x3f,
362 u8 type (0=local, 1=positional, 2=object)
363 s32[3] pos_nodes*10000
368 TOCLIENT_STOP_SOUND = 0x40,
374 TOCLIENT_PRIVILEGES = 0x41,
377 u16 number of privileges
383 TOCLIENT_INVENTORY_FORMSPEC = 0x42,
390 TOCLIENT_DETACHED_INVENTORY = 0x43,
395 [2] serialized inventory
398 TOCLIENT_SHOW_FORMSPEC = 0x44,
407 TOCLIENT_MOVEMENT = 0x45,
410 f1000 movement_acceleration_default
411 f1000 movement_acceleration_air
412 f1000 movement_acceleration_fast
413 f1000 movement_speed_walk
414 f1000 movement_speed_crouch
415 f1000 movement_speed_fast
416 f1000 movement_speed_climb
417 f1000 movement_speed_jump
418 f1000 movement_liquid_fluidity
419 f1000 movement_liquid_fluidity_smooth
420 f1000 movement_liquid_sink
421 f1000 movement_gravity
424 TOCLIENT_SPAWN_PARTICLE = 0x46,
432 u8 bool collisiondetection
438 TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
453 u8 bool collisiondetection
460 TOCLIENT_DELETE_PARTICLESPAWNER = 0x48,
466 TOCLIENT_HUDADD = 0x49,
486 TOCLIENT_HUDRM = 0x4a,
492 TOCLIENT_HUDCHANGE = 0x4b,
503 TOCLIENT_HUD_SET_FLAGS = 0x4c,
510 TOCLIENT_HUD_SET_PARAM = 0x4d,
518 TOCLIENT_BREATH = 0x4e,
524 TOCLIENT_SET_SKY = 0x4f,
536 TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50,
539 u8 do_override (boolean)
540 u16 day-night ratio 0...65535
543 TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51,
553 TOCLIENT_EYE_OFFSET = 0x52,
560 TOCLIENT_NUM_MSG_TYPES = 0x53,
567 Sent first after connected.
569 [0] u16 TOSERVER_INIT
570 [2] u8 SER_FMT_VER_HIGHEST_READ
571 [3] u8[20] player_name
572 [23] u8[28] password (new in some version)
573 [51] u16 minimum supported network protocol version (added sometime)
574 [53] u16 maximum supported network protocol version (added later than the previous one)
577 TOSERVER_INIT2 = 0x11,
579 Sent as an ACK for TOCLIENT_INIT.
580 After this, the server can send data.
582 [0] u16 TOSERVER_INIT2
585 TOSERVER_GETBLOCK=0x20, // Obsolete
586 TOSERVER_ADDNODE = 0x21, // Obsolete
587 TOSERVER_REMOVENODE = 0x22, // Obsolete
589 TOSERVER_PLAYERPOS = 0x23,
592 [2] v3s32 position*100
593 [2+12] v3s32 speed*100
594 [2+12+12] s32 pitch*100
595 [2+12+12+4] s32 yaw*100
596 [2+12+12+4+4] u32 keyPressed
599 TOSERVER_GOTBLOCKS = 0x24,
608 TOSERVER_DELETEDBLOCKS = 0x25,
617 TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
624 TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
628 [2] u8 button (0=left, 1=right)
634 TOSERVER_GROUND_ACTION = 0x28, // Obsolete
639 [3] v3s16 nodepos_undersurface
640 [9] v3s16 nodepos_abovesurface
643 0: start digging (from undersurface)
644 1: place block (to abovesurface)
645 2: stop digging (all parameters ignored)
649 TOSERVER_RELEASE = 0x29, // Obsolete
651 // (oops, there is some gap here)
653 TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
662 TOSERVER_INVENTORY_ACTION = 0x31,
664 See InventoryAction in inventorymanager.h
667 TOSERVER_CHAT_MESSAGE = 0x32,
674 TOSERVER_SIGNNODETEXT = 0x33, // obsolete
682 TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
686 [2] u8 button (0=left, 1=right)
691 TOSERVER_DAMAGE = 0x35,
697 TOSERVER_PASSWORD=0x36,
699 Sent to change password.
701 [0] u16 TOSERVER_PASSWORD
702 [2] u8[28] old password
703 [30] u8[28] new password
706 TOSERVER_PLAYERITEM=0x37,
708 Sent to change selected item.
710 [0] u16 TOSERVER_PLAYERITEM
714 TOSERVER_RESPAWN=0x38,
719 TOSERVER_INTERACT = 0x39,
724 [5] u32 length of the next item
725 [9] serialized PointedThing
727 0: start digging (from undersurface) or use
728 1: stop digging (all parameters ignored)
730 3: place block or item (to abovesurface)
733 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
736 TOSERVER_REMOVED_SOUNDS = 0x3a,
743 TOSERVER_NODEMETA_FIELDS = 0x3b,
748 u8[len] form name (reserved for future use)
757 TOSERVER_INVENTORY_FIELDS = 0x3c,
761 u8[len] form name (reserved for future use)
770 TOSERVER_REQUEST_MEDIA = 0x40,
773 u16 number of files requested
780 TOSERVER_RECEIVED_MEDIA = 0x41,
785 TOSERVER_BREATH = 0x42,
791 TOSERVER_CLIENT_READY = 0x43,
798 u8[len] full_version_string
801 TOSERVER_NUM_MSG_TYPES = 0x44,