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 CLIENTSERVER_HEADER
21 #define CLIENTSERVER_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,
565 Sent first after connected.
567 [0] u16 TOSERVER_INIT
568 [2] u8 SER_FMT_VER_HIGHEST_READ
569 [3] u8[20] player_name
570 [23] u8[28] password (new in some version)
571 [51] u16 minimum supported network protocol version (added sometime)
572 [53] u16 maximum supported network protocol version (added later than the previous one)
575 TOSERVER_INIT2 = 0x11,
577 Sent as an ACK for TOCLIENT_INIT.
578 After this, the server can send data.
580 [0] u16 TOSERVER_INIT2
583 TOSERVER_GETBLOCK=0x20, // Obsolete
584 TOSERVER_ADDNODE = 0x21, // Obsolete
585 TOSERVER_REMOVENODE = 0x22, // Obsolete
587 TOSERVER_PLAYERPOS = 0x23,
590 [2] v3s32 position*100
591 [2+12] v3s32 speed*100
592 [2+12+12] s32 pitch*100
593 [2+12+12+4] s32 yaw*100
594 [2+12+12+4+4] u32 keyPressed
597 TOSERVER_GOTBLOCKS = 0x24,
606 TOSERVER_DELETEDBLOCKS = 0x25,
615 TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
622 TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
626 [2] u8 button (0=left, 1=right)
632 TOSERVER_GROUND_ACTION = 0x28, // Obsolete
637 [3] v3s16 nodepos_undersurface
638 [9] v3s16 nodepos_abovesurface
641 0: start digging (from undersurface)
642 1: place block (to abovesurface)
643 2: stop digging (all parameters ignored)
647 TOSERVER_RELEASE = 0x29, // Obsolete
649 // (oops, there is some gap here)
651 TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
660 TOSERVER_INVENTORY_ACTION = 0x31,
662 See InventoryAction in inventory.h
665 TOSERVER_CHAT_MESSAGE = 0x32,
672 TOSERVER_SIGNNODETEXT = 0x33, // obsolete
680 TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
684 [2] u8 button (0=left, 1=right)
689 TOSERVER_DAMAGE = 0x35,
695 TOSERVER_PASSWORD=0x36,
697 Sent to change password.
699 [0] u16 TOSERVER_PASSWORD
700 [2] u8[28] old password
701 [30] u8[28] new password
704 TOSERVER_PLAYERITEM=0x37,
706 Sent to change selected item.
708 [0] u16 TOSERVER_PLAYERITEM
712 TOSERVER_RESPAWN=0x38,
717 TOSERVER_INTERACT = 0x39,
722 [5] u32 length of the next item
723 [9] serialized PointedThing
725 0: start digging (from undersurface) or use
726 1: stop digging (all parameters ignored)
728 3: place block or item (to abovesurface)
731 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
734 TOSERVER_REMOVED_SOUNDS = 0x3a,
741 TOSERVER_NODEMETA_FIELDS = 0x3b,
746 u8[len] form name (reserved for future use)
755 TOSERVER_INVENTORY_FIELDS = 0x3c,
759 u8[len] form name (reserved for future use)
768 TOSERVER_REQUEST_MEDIA = 0x40,
771 u16 number of files requested
778 TOSERVER_RECEIVED_MEDIA = 0x41,
783 TOSERVER_BREATH = 0x42,
789 TOSERVER_CLIENT_READY = 0x43,
796 u8[len] full_version_string