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