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