]> git.lizzy.rs Git - dragonfireclient.git/blob - src/clientserver.h
Add support for setting stepheight for entities
[dragonfireclient.git] / src / clientserver.h
1 /*
2 Minetest
3 Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
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.
9
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.
14
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.
18 */
19
20 #ifndef CLIENTSERVER_HEADER
21 #define CLIENTSERVER_HEADER
22
23 #include "util/pointer.h"
24
25 SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
26
27 /*
28         changes by PROTOCOL_VERSION:
29
30         PROTOCOL_VERSION 3:
31                 Base for writing changes here
32         PROTOCOL_VERSION 4:
33                 Add TOCLIENT_MEDIA
34                 Add TOCLIENT_TOOLDEF
35                 Add TOCLIENT_NODEDEF
36                 Add TOCLIENT_CRAFTITEMDEF
37                 Add TOSERVER_INTERACT
38                 Obsolete TOSERVER_CLICK_ACTIVEOBJECT
39                 Obsolete TOSERVER_GROUND_ACTION
40         PROTOCOL_VERSION 5:
41                 Make players to be handled mostly as ActiveObjects
42         PROTOCOL_VERSION 6:
43                 Only non-cached textures are sent
44         PROTOCOL_VERSION 7:
45                 Add TOCLIENT_ITEMDEF
46                 Obsolete TOCLIENT_TOOLDEF
47                 Obsolete TOCLIENT_CRAFTITEMDEF
48                 Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF
49         PROTOCOL_VERSION 8:
50                 Digging based on item groups
51                 Many things
52         PROTOCOL_VERSION 9:
53                 ContentFeatures and NodeDefManager use a different serialization
54                     format; better for future version cross-compatibility
55                 Many things
56         PROTOCOL_VERSION 10:
57                 TOCLIENT_PRIVILEGES
58                 Version raised to force 'fly' and 'fast' privileges into effect.
59                 Node metadata change (came in later; somewhat incompatible)
60         PROTOCOL_VERSION 11:
61                 TileDef in ContentFeatures
62                 Nodebox drawtype
63                 (some dev snapshot)
64                 TOCLIENT_INVENTORY_FORMSPEC
65                 (0.4.0, 0.4.1)
66         PROTOCOL_VERSION 12:
67                 TOSERVER_INVENTORY_FIELDS
68                 16-bit node ids
69                 TOCLIENT_DETACHED_INVENTORY
70         PROTOCOL_VERSION 13:
71                 InventoryList field "Width" (deserialization fails with old versions)
72         PROTOCOL_VERSION 14:
73                 Added transfer of player pressed keys to the server
74                 Added new messages for mesh and bone animation, as well as attachments
75                 GENERIC_CMD_SET_ANIMATION
76                 GENERIC_CMD_SET_BONE_POSITION
77                 GENERIC_CMD_SET_ATTACHMENT
78         PROTOCOL_VERSION 15:
79                 Serialization format changes
80         PROTOCOL_VERSION 16:
81                 TOCLIENT_SHOW_FORMSPEC
82         PROTOCOL_VERSION 17:
83                 Serialization format change: include backface_culling flag in TileDef
84                 Added rightclickable field in nodedef
85                 TOCLIENT_SPAWN_PARTICLE
86                 TOCLIENT_ADD_PARTICLESPAWNER
87                 TOCLIENT_DELETE_PARTICLESPAWNER
88         PROTOCOL_VERSION 18:
89                 damageGroups added to ToolCapabilities
90                 sound_place added to ItemDefinition
91         PROTOCOL_VERSION 19:
92                 GENERIC_CMD_SET_PHYSICS_OVERRIDE
93         PROTOCOL_VERSION 20:
94                 TOCLIENT_HUDADD
95                 TOCLIENT_HUDRM
96                 TOCLIENT_HUDCHANGE
97                 TOCLIENT_HUD_SET_FLAGS
98         PROTOCOL_VERSION 21:
99                 TOCLIENT_BREATH
100                 TOSERVER_BREATH
101                 range added to ItemDefinition
102                 drowning, leveled and liquid_range added to ContentFeatures
103                 stepheight and collideWithObjects added to object properties
104 */
105
106 #define LATEST_PROTOCOL_VERSION 21
107
108 // Server's supported network protocol range
109 #define SERVER_PROTOCOL_VERSION_MIN 13
110 #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
111
112 // Client's supported network protocol range
113 #define CLIENT_PROTOCOL_VERSION_MIN 13
114 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
115
116 // Constant that differentiates the protocol from random data and other protocols
117 #define PROTOCOL_ID 0x4f457403
118
119 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
120                                // base64-encoded SHA-1 (27+\0).
121
122 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
123
124 enum ToClientCommand
125 {
126         TOCLIENT_INIT = 0x10,
127         /*
128                 Server's reply to TOSERVER_INIT.
129                 Sent second after connected.
130
131                 [0] u16 TOSERVER_INIT
132                 [2] u8 deployed version
133                 [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd 
134                 [12] u64 map seed (new as of 2011-02-27)
135                 [20] f1000 recommended send interval (in seconds) (new as of 14)
136
137                 NOTE: The position in here is deprecated; position is
138                       explicitly sent afterwards
139         */
140
141         TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
142         TOCLIENT_ADDNODE = 0x21,
143         TOCLIENT_REMOVENODE = 0x22,
144         
145         TOCLIENT_PLAYERPOS = 0x23, // Obsolete
146         /*
147                 [0] u16 command
148                 // Followed by an arbitary number of these:
149                 // Number is determined from packet length.
150                 [N] u16 peer_id
151                 [N+2] v3s32 position*100
152                 [N+2+12] v3s32 speed*100
153                 [N+2+12+12] s32 pitch*100
154                 [N+2+12+12+4] s32 yaw*100
155         */
156
157         TOCLIENT_PLAYERINFO = 0x24, // Obsolete
158         /*
159                 [0] u16 command
160                 // Followed by an arbitary number of these:
161                 // Number is determined from packet length.
162                 [N] u16 peer_id
163                 [N] char[20] name
164         */
165         
166         TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
167
168         TOCLIENT_SECTORMETA = 0x26, // Obsolete
169         /*
170                 [0] u16 command
171                 [2] u8 sector count
172                 [3...] v2s16 pos + sector metadata
173         */
174
175         TOCLIENT_INVENTORY = 0x27,
176         /*
177                 [0] u16 command
178                 [2] serialized inventory
179         */
180         
181         TOCLIENT_OBJECTDATA = 0x28, // Obsolete
182         /*
183                 Sent as unreliable.
184
185                 u16 command
186                 u16 number of player positions
187                 for each player:
188                         u16 peer_id
189                         v3s32 position*100
190                         v3s32 speed*100
191                         s32 pitch*100
192                         s32 yaw*100
193                 u16 count of blocks
194                 for each block:
195                         v3s16 blockpos
196                         block objects
197         */
198
199         TOCLIENT_TIME_OF_DAY = 0x29,
200         /*
201                 u16 command
202                 u16 time (0-23999)
203                 Added in a later version:
204                 f1000 time_speed
205         */
206
207         // (oops, there is some gap here)
208
209         TOCLIENT_CHAT_MESSAGE = 0x30,
210         /*
211                 u16 command
212                 u16 length
213                 wstring message
214         */
215
216         TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
217         /*
218                 u16 command
219                 u16 count of removed objects
220                 for all removed objects {
221                         u16 id
222                 }
223                 u16 count of added objects
224                 for all added objects {
225                         u16 id
226                         u8 type
227                         u32 initialization data length
228                         string initialization data
229                 }
230         */
231         
232         TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
233         /*
234                 u16 command
235                 for all objects
236                 {
237                         u16 id
238                         u16 message length
239                         string message
240                 }
241         */
242
243         TOCLIENT_HP = 0x33,
244         /*
245                 u16 command
246                 u8 hp
247         */
248
249         TOCLIENT_MOVE_PLAYER = 0x34,
250         /*
251                 u16 command
252                 v3f1000 player position
253                 f1000 player pitch
254                 f1000 player yaw
255         */
256
257         TOCLIENT_ACCESS_DENIED = 0x35,
258         /*
259                 u16 command
260                 u16 reason_length
261                 wstring reason
262         */
263
264         TOCLIENT_PLAYERITEM = 0x36, // Obsolete
265         /*
266                 u16 command
267                 u16 count of player items
268                 for all player items {
269                         u16 peer id
270                         u16 length of serialized item
271                         string serialized item
272                 }
273         */
274
275         TOCLIENT_DEATHSCREEN = 0x37,
276         /*
277                 u16 command
278                 u8 bool set camera point target
279                 v3f1000 camera point target (to point the death cause or whatever)
280         */
281
282         TOCLIENT_MEDIA = 0x38,
283         /*
284                 u16 command
285                 u16 total number of texture bunches
286                 u16 index of this bunch
287                 u32 number of files in this bunch
288                 for each file {
289                         u16 length of name
290                         string name
291                         u32 length of data
292                         data
293                 }
294                 u16 length of remote media server url (if applicable)
295                 string url
296         */
297         
298         TOCLIENT_TOOLDEF = 0x39,
299         /*
300                 u16 command
301                 u32 length of the next item
302                 serialized ToolDefManager
303         */
304         
305         TOCLIENT_NODEDEF = 0x3a,
306         /*
307                 u16 command
308                 u32 length of the next item
309                 serialized NodeDefManager
310         */
311         
312         TOCLIENT_CRAFTITEMDEF = 0x3b,
313         /*
314                 u16 command
315                 u32 length of the next item
316                 serialized CraftiItemDefManager
317         */
318
319         TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
320
321         /*
322                 u16 command
323                 u32 number of files
324                 for each texture {
325                         u16 length of name
326                         string name
327                         u16 length of sha1_digest
328                         string sha1_digest
329                 }
330         */
331
332         TOCLIENT_ITEMDEF = 0x3d,
333         /*
334                 u16 command
335                 u32 length of next item
336                 serialized ItemDefManager
337         */
338         
339         TOCLIENT_PLAY_SOUND = 0x3f,
340         /*
341                 u16 command
342                 s32 sound_id
343                 u16 len
344                 u8[len] sound name
345                 s32 gain*1000
346                 u8 type (0=local, 1=positional, 2=object)
347                 s32[3] pos_nodes*10000
348                 u16 object_id
349                 u8 loop (bool)
350         */
351
352         TOCLIENT_STOP_SOUND = 0x40,
353         /*
354                 u16 command
355                 s32 sound_id
356         */
357
358         TOCLIENT_PRIVILEGES = 0x41,
359         /*
360                 u16 command
361                 u16 number of privileges
362                 for each privilege
363                         u16 len
364                         u8[len] privilege
365         */
366
367         TOCLIENT_INVENTORY_FORMSPEC = 0x42,
368         /*
369                 u16 command
370                 u32 len
371                 u8[len] formspec
372         */
373
374         TOCLIENT_DETACHED_INVENTORY = 0x43,
375         /*
376                 [0] u16 command
377                 u16 len
378                 u8[len] name
379                 [2] serialized inventory
380         */
381
382         TOCLIENT_SHOW_FORMSPEC = 0x44,
383         /*
384                 [0] u16 command
385                 u32 len
386                 u8[len] formspec
387                 u16 len
388                 u8[len] formname
389         */
390
391         TOCLIENT_MOVEMENT = 0x45,
392         /*
393                 u16 command
394                 f1000 movement_acceleration_default
395                 f1000 movement_acceleration_air
396                 f1000 movement_acceleration_fast
397                 f1000 movement_speed_walk
398                 f1000 movement_speed_crouch
399                 f1000 movement_speed_fast
400                 f1000 movement_speed_climb
401                 f1000 movement_speed_jump
402                 f1000 movement_liquid_fluidity
403                 f1000 movement_liquid_fluidity_smooth
404                 f1000 movement_liquid_sink
405                 f1000 movement_gravity
406         */
407
408         TOCLIENT_SPAWN_PARTICLE = 0x46,
409         /*
410                 u16 command
411                 v3f1000 pos
412                 v3f1000 velocity
413                 v3f1000 acceleration
414                 f1000 expirationtime
415                 f1000 size
416                 u8 bool collisiondetection
417                 u32 len
418                 u8[len] texture
419         */
420
421         TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
422         /*
423                 u16 command
424                 u16 amount
425                 f1000 spawntime
426                 v3f1000 minpos
427                 v3f1000 maxpos
428                 v3f1000 minvel
429                 v3f1000 maxvel
430                 v3f1000 minacc
431                 v3f1000 maxacc
432                 f1000 minexptime
433                 f1000 maxexptime
434                 f1000 minsize
435                 f1000 maxsize
436                 u8 bool collisiondetection
437                 u32 len
438                 u8[len] texture
439                 u32 id
440         */
441
442         TOCLIENT_DELETE_PARTICLESPAWNER = 0x48,
443         /*
444                 u16 command
445                 u32 id
446         */
447
448         TOCLIENT_HUDADD = 0x49,
449         /*
450                 u16 command
451                 u32 id
452                 u8 type
453                 v2f1000 pos
454                 u32 len
455                 u8[len] name
456                 v2f1000 scale
457                 u32 len2
458                 u8[len2] text
459                 u32 number
460                 u32 item
461                 u32 dir
462                 v2f1000 align
463                 v2f1000 offset
464         */
465
466         TOCLIENT_HUDRM = 0x4a,
467         /*
468                 u16 command
469                 u32 id
470         */
471
472         TOCLIENT_HUDCHANGE = 0x4b,
473         /*
474                 u16 command
475                 u32 id
476                 u8 stat
477                 [v2f1000 data |
478                  u32 len
479                  u8[len] data |
480                  u32 data]
481         */
482
483         TOCLIENT_HUD_SET_FLAGS = 0x4c,
484         /*
485                 u16 command
486                 u32 flags
487                 u32 mask
488         */
489
490         TOCLIENT_HUD_SET_PARAM = 0x4d,
491         /*
492                 u16 command
493                 u16 param
494                 u16 len
495                 u8[len] value
496         */
497
498         TOCLIENT_BREATH = 0x4e,
499         /*
500                 u16 command
501                 u16 breath
502         */
503 };
504
505 enum ToServerCommand
506 {
507         TOSERVER_INIT=0x10,
508         /*
509                 Sent first after connected.
510
511                 [0] u16 TOSERVER_INIT
512                 [2] u8 SER_FMT_VER_HIGHEST
513                 [3] u8[20] player_name
514                 [23] u8[28] password (new in some version)
515                 [51] u16 minimum supported network protocol version (added sometime)
516                 [53] u16 maximum supported network protocol version (added later than the previous one)
517         */
518
519         TOSERVER_INIT2 = 0x11,
520         /*
521                 Sent as an ACK for TOCLIENT_INIT.
522                 After this, the server can send data.
523
524                 [0] u16 TOSERVER_INIT2
525         */
526
527         TOSERVER_GETBLOCK=0x20, // Obsolete
528         TOSERVER_ADDNODE = 0x21, // Obsolete
529         TOSERVER_REMOVENODE = 0x22, // Obsolete
530
531         TOSERVER_PLAYERPOS = 0x23,
532         /*
533                 [0] u16 command
534                 [2] v3s32 position*100
535                 [2+12] v3s32 speed*100
536                 [2+12+12] s32 pitch*100
537                 [2+12+12+4] s32 yaw*100
538                 [2+12+12+4+4] u32 keyPressed
539         */
540
541         TOSERVER_GOTBLOCKS = 0x24,
542         /*
543                 [0] u16 command
544                 [2] u8 count
545                 [3] v3s16 pos_0
546                 [3+6] v3s16 pos_1
547                 ...
548         */
549
550         TOSERVER_DELETEDBLOCKS = 0x25,
551         /*
552                 [0] u16 command
553                 [2] u8 count
554                 [3] v3s16 pos_0
555                 [3+6] v3s16 pos_1
556                 ...
557         */
558
559         TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
560         /*
561                 [0] u16 command
562                 [2] v3s16 pos
563                 [8] u16 i
564         */
565
566         TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
567         /*
568                 length: 13
569                 [0] u16 command
570                 [2] u8 button (0=left, 1=right)
571                 [3] v3s16 blockpos
572                 [9] s16 id
573                 [11] u16 item
574         */
575
576         TOSERVER_GROUND_ACTION = 0x28, // Obsolete
577         /*
578                 length: 17
579                 [0] u16 command
580                 [2] u8 action
581                 [3] v3s16 nodepos_undersurface
582                 [9] v3s16 nodepos_abovesurface
583                 [15] u16 item
584                 actions:
585                 0: start digging (from undersurface)
586                 1: place block (to abovesurface)
587                 2: stop digging (all parameters ignored)
588                 3: digging completed
589         */
590         
591         TOSERVER_RELEASE = 0x29, // Obsolete
592
593         // (oops, there is some gap here)
594
595         TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
596         /*
597                 u16 command
598                 v3s16 blockpos
599                 s16 id
600                 u16 textlen
601                 textdata
602         */
603
604         TOSERVER_INVENTORY_ACTION = 0x31,
605         /*
606                 See InventoryAction in inventory.h
607         */
608
609         TOSERVER_CHAT_MESSAGE = 0x32,
610         /*
611                 u16 command
612                 u16 length
613                 wstring message
614         */
615
616         TOSERVER_SIGNNODETEXT = 0x33, // obsolete
617         /*
618                 u16 command
619                 v3s16 p
620                 u16 textlen
621                 textdata
622         */
623
624         TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
625         /*
626                 length: 7
627                 [0] u16 command
628                 [2] u8 button (0=left, 1=right)
629                 [3] u16 id
630                 [5] u16 item
631         */
632         
633         TOSERVER_DAMAGE = 0x35,
634         /*
635                 u16 command
636                 u8 amount
637         */
638
639         TOSERVER_PASSWORD=0x36,
640         /*
641                 Sent to change password.
642
643                 [0] u16 TOSERVER_PASSWORD
644                 [2] u8[28] old password
645                 [30] u8[28] new password
646         */
647
648         TOSERVER_PLAYERITEM=0x37,
649         /*
650                 Sent to change selected item.
651
652                 [0] u16 TOSERVER_PLAYERITEM
653                 [2] u16 item
654         */
655         
656         TOSERVER_RESPAWN=0x38,
657         /*
658                 u16 TOSERVER_RESPAWN
659         */
660
661         TOSERVER_INTERACT = 0x39,
662         /*
663                 [0] u16 command
664                 [2] u8 action
665                 [3] u16 item
666                 [5] u32 length of the next item
667                 [9] serialized PointedThing
668                 actions:
669                 0: start digging (from undersurface) or use
670                 1: stop digging (all parameters ignored)
671                 2: digging completed
672                 3: place block or item (to abovesurface)
673                 4: use item
674
675                 (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
676         */
677         
678         TOSERVER_REMOVED_SOUNDS = 0x3a,
679         /*
680                 u16 command
681                 u16 len
682                 s32[len] sound_id
683         */
684
685         TOSERVER_NODEMETA_FIELDS = 0x3b,
686         /*
687                 u16 command
688                 v3s16 p
689                 u16 len
690                 u8[len] form name (reserved for future use)
691                 u16 number of fields
692                 for each field:
693                         u16 len
694                         u8[len] field name
695                         u32 len
696                         u8[len] field value
697         */
698
699         TOSERVER_INVENTORY_FIELDS = 0x3c,
700         /*
701                 u16 command
702                 u16 len
703                 u8[len] form name (reserved for future use)
704                 u16 number of fields
705                 for each field:
706                         u16 len
707                         u8[len] field name
708                         u32 len
709                         u8[len] field value
710         */
711
712         TOSERVER_REQUEST_MEDIA = 0x40,
713         /*
714                 u16 command
715                 u16 number of files requested
716                 for each file {
717                         u16 length of name
718                         string name
719                 }
720          */
721
722         TOSERVER_RECEIVED_MEDIA = 0x41,
723         /*
724                 u16 command
725         */
726
727         TOSERVER_BREATH = 0x42,
728         /*
729                 u16 command
730                 u16 breath
731         */
732 };
733
734 #endif
735