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