]> git.lizzy.rs Git - minetest.git/blobdiff - src/network/networkprotocol.h
Bump protocol version
[minetest.git] / src / network / networkprotocol.h
index ba934957d7b70ca31cb67e74127a8f4ee3f7f34a..3ab839f8dc5527f486a9a5d7aef09acfde39a094 100644 (file)
@@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#ifndef NETWORKPROTOCOL_HEADER
-#define NETWORKPROTOCOL_HEADER
+#pragma once
+
 #include "util/string.h"
 
 /*
@@ -50,6 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
                ContentFeatures and NodeDefManager use a different serialization
                    format; better for future version cross-compatibility
                Many things
+               Obsolete TOCLIENT_PLAYERITEM
        PROTOCOL_VERSION 10:
                TOCLIENT_PRIVILEGES
                Version raised to force 'fly' and 'fast' privileges into effect.
@@ -69,8 +70,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        PROTOCOL_VERSION 14:
                Added transfer of player pressed keys to the server
                Added new messages for mesh and bone animation, as well as attachments
-               GENERIC_CMD_SET_ANIMATION
-               GENERIC_CMD_SET_BONE_POSITION
+               AO_CMD_SET_ANIMATION
+               AO_CMD_SET_BONE_POSITION
                GENERIC_CMD_SET_ATTACHMENT
        PROTOCOL_VERSION 15:
                Serialization format changes
@@ -86,7 +87,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
                damageGroups added to ToolCapabilities
                sound_place added to ItemDefinition
        PROTOCOL_VERSION 19:
-               GENERIC_CMD_SET_PHYSICS_OVERRIDE
+               AO_CMD_SET_PHYSICS_OVERRIDE
        PROTOCOL_VERSION 20:
                TOCLIENT_HUDADD
                TOCLIENT_HUDRM
@@ -104,7 +105,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        PROTOCOL_VERSION 22:
                add swap_node
        PROTOCOL_VERSION 23:
-               TOSERVER_CLIENT_READY
+               Obsolete TOSERVER_RECEIVED_MEDIA
+               Server: Stop using TOSERVER_CLIENT_READY
        PROTOCOL_VERSION 24:
                ContentFeatures version 7
                ContentFeatures: change number of special tiles to 6 (CF_SPECIAL_COUNT)
@@ -120,21 +122,106 @@ with this program; if not, write to the Free Software Foundation, Inc.,
                        permit translation
                Add TOCLIENT_DELETE_PARTICLESPAWNER (0x53), fixing the u16 read and
                        reading u32
-               Add TOSERVER_INIT new opcode (0x02) for client presentation to server
-               Add TOSERVER_AUTH new opcode (0x03) for client authentication
+               Add new opcode TOSERVER_INIT for client presentation to server
+               Add new opcodes TOSERVER_FIRST_SRP, TOSERVER_SRP_BYTES_A,
+                       TOSERVER_SRP_BYTES_M, TOCLIENT_SRP_BYTES_S_B
+                       for the three supported auth mechanisms around srp
+               Add new opcodes TOCLIENT_ACCEPT_SUDO_MODE and TOCLIENT_DENY_SUDO_MODE
+                       for sudo mode handling (auth mech generic way of changing password).
                Add TOCLIENT_HELLO for presenting server to client after client
                        presentation
-               Add TOCLIENT_AUTH_ACCEPT to accept connexion from client
+               Add TOCLIENT_AUTH_ACCEPT to accept connection from client
+               Rename GENERIC_CMD_SET_ATTACHMENT to AO_CMD_ATTACH_TO
+       PROTOCOL_VERSION 26:
+               Add TileDef tileable_horizontal, tileable_vertical flags
+       PROTOCOL_VERSION 27:
+               backface_culling: backwards compatibility for playing with
+               newer client on pre-27 servers.
+               Add nodedef v3 - connected nodeboxes
+       PROTOCOL_VERSION 28:
+               CPT2_MESHOPTIONS
+       PROTOCOL_VERSION 29:
+               Server doesn't accept TOSERVER_BREATH anymore
+               serialization of TileAnimation params changed
+               TAT_SHEET_2D
+               Removed client-sided chat perdiction
+       PROTOCOL VERSION 30:
+               New ContentFeatures serialization version
+               Add node and tile color and palette
+               Fix plantlike visual_scale being applied squared and add compatibility
+                       with pre-30 clients by sending sqrt(visual_scale)
+       PROTOCOL VERSION 31:
+               Add tile overlay
+               Stop sending TOSERVER_CLIENT_READY
+       PROTOCOL VERSION 32:
+               Add fading sounds
+       PROTOCOL VERSION 33:
+               Add TOCLIENT_UPDATE_PLAYER_LIST and send the player list to the client,
+                       instead of guessing based on the active object list.
+       PROTOCOL VERSION 34:
+               Add sound pitch
+       PROTOCOL VERSION 35:
+               Rename TOCLIENT_CHAT_MESSAGE to TOCLIENT_CHAT_MESSAGE_OLD (0x30)
+               Add TOCLIENT_CHAT_MESSAGE (0x2F)
+                       This chat message is a signalisation message containing various
+                       informations:
+                       * timestamp
+                       * sender
+                       * type (RAW, NORMAL, ANNOUNCE, SYSTEM)
+                       * content
+               Add TOCLIENT_CSM_RESTRICTION_FLAGS to define which CSM features should be
+                       limited
+               Add settable player collisionbox. Breaks compatibility with older
+                       clients as a 1-node vertical offset has been removed from player's
+                       position
+               Add settable player stepheight using existing object property.
+                       Breaks compatibility with older clients.
+       PROTOCOL VERSION 36:
+               Backwards compatibility drop
+               Add 'can_zoom' to player object properties
+               Add glow to object properties
+               Change TileDef serialization format.
+               Add world-aligned tiles.
+               Mod channels
+               Raise ObjectProperties version to 3 for removing 'can_zoom' and adding
+                       'zoom_fov'.
+               Nodebox version 5
+               Add disconnected nodeboxes
+               Add TOCLIENT_FORMSPEC_PREPEND
+       PROTOCOL VERSION 37:
+               Redo detached inventory sending
+               Add TOCLIENT_NODEMETA_CHANGED
+               New network float format
+               ContentFeatures version 13
+               Add full Euler rotations instead of just yaw
+               Add TOCLIENT_PLAYER_SPEED
+       PROTOCOL VERSION 38:
+               Incremental inventory sending mode
+               Unknown inventory serialization fields no longer throw an error
+               Mod-specific formspec version
+               Player FOV override API
+               "ephemeral" added to TOCLIENT_PLAY_SOUND
+       PROTOCOL VERSION 39:
+               Updated set_sky packet
+               Adds new sun, moon and stars packets
+               Minimap modes
+       PROTOCOL VERSION 40:
+               TOCLIENT_MEDIA_PUSH changed, TOSERVER_HAVE_MEDIA added
+               Added new particlespawner parameters
+               [scheduled bump for 5.6.0]
 */
 
-#define LATEST_PROTOCOL_VERSION 24
+#define LATEST_PROTOCOL_VERSION 41
+#define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION)
 
 // Server's supported network protocol range
-#define SERVER_PROTOCOL_VERSION_MIN 13
+#define SERVER_PROTOCOL_VERSION_MIN 37
 #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
 
 // Client's supported network protocol range
-#define CLIENT_PROTOCOL_VERSION_MIN 13
+// The minimal version depends on whether
+// send_pre_v25_init is enabled or not
+#define CLIENT_PROTOCOL_VERSION_MIN 37
 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
 
 // Constant that differentiates the protocol from random data and other protocols
@@ -143,41 +230,55 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define PASSWORD_SIZE 28       // Maximum password length. Allows for
                                // base64-encoded SHA-1 (27+\0).
 
-#define FORMSPEC_API_VERSION 1
-#define FORMSPEC_VERSION_STRING "formspec_version[" TOSTRING(FORMSPEC_API_VERSION) "]"
+// See also formspec [Version History] in doc/lua_api.txt
+#define FORMSPEC_API_VERSION 6
 
 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
 
+typedef u16 session_t;
+
 enum ToClientCommand
 {
        TOCLIENT_HELLO = 0x02,
-       TOCLIENT_AUTH_ACCEPT = 0x03,
-       TOCLIENT_ACCESS_DENIED = 0x0A,
        /*
-               u16 command
-               u16 reason_length
-               wstring reason
-       */
+               Sent after TOSERVER_INIT.
 
-       TOCLIENT_INIT_LEGACY = 0x10,
+               u8 deployed serialisation version
+               u16 deployed network compression mode
+               u16 deployed protocol version
+               u32 supported auth methods
+               std::string username that should be used for legacy hash (for proper casing)
+       */
+       TOCLIENT_AUTH_ACCEPT = 0x03,
        /*
-               Server's reply to TOSERVER_INIT.
-               Sent second after connected.
+               Message from server to accept auth.
 
-               [0] u16 TOSERVER_INIT
-               [2] u8 deployed version
-               [3] v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
-               [12] u64 map seed (new as of 2011-02-27)
-               [20] f1000 recommended send interval (in seconds) (new as of 14)
-
-               NOTE: The position in here is deprecated; position is
-                     explicitly sent afterwards
+               v3s16 player's position + v3f(0,BS/2,0) floatToInt'd
+               u64 map seed
+               f1000 recommended send interval
+               u32 : supported auth methods for sudo mode
+                     (where the user can change their password)
+       */
+       TOCLIENT_ACCEPT_SUDO_MODE = 0x04,
+       /*
+               Sent to client to show it is in sudo mode now.
+       */
+       TOCLIENT_DENY_SUDO_MODE = 0x05,
+       /*
+               Signals client that sudo mode auth failed.
+       */
+       TOCLIENT_ACCESS_DENIED = 0x0A,
+       /*
+               u8 reason
+               std::string custom reason (if needed, otherwise "")
+               u8 (bool) reconnect
        */
 
+       TOCLIENT_INIT_LEGACY = 0x10, // Obsolete
+
        TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
        TOCLIENT_ADDNODE = 0x21,
        /*
-               u16 command
                v3s16 position
                serialized mapnode
                u8 keep_metadata // Added in protocol version 22
@@ -185,34 +286,9 @@ enum ToClientCommand
        TOCLIENT_REMOVENODE = 0x22,
 
        TOCLIENT_PLAYERPOS = 0x23, // Obsolete
-       /*
-               [0] u16 command
-               // Followed by an arbitary number of these:
-               // Number is determined from packet length.
-               [N] u16 peer_id
-               [N+2] v3s32 position*100
-               [N+2+12] v3s32 speed*100
-               [N+2+12+12] s32 pitch*100
-               [N+2+12+12+4] s32 yaw*100
-       */
-
        TOCLIENT_PLAYERINFO = 0x24, // Obsolete
-       /*
-               [0] u16 command
-               // Followed by an arbitary number of these:
-               // Number is determined from packet length.
-               [N] u16 peer_id
-               [N] char[20] name
-       */
-
        TOCLIENT_OPT_BLOCK_NOT_FOUND = 0x25, // Obsolete
-
        TOCLIENT_SECTORMETA = 0x26, // Obsolete
-       /*
-               [0] u16 command
-               [2] u8 sector count
-               [3...] v2s16 pos + sector metadata
-       */
 
        TOCLIENT_INVENTORY = 0x27,
        /*
@@ -221,43 +297,48 @@ enum ToClientCommand
        */
 
        TOCLIENT_OBJECTDATA = 0x28, // Obsolete
-       /*
-               Sent as unreliable.
-
-               u16 command
-               u16 number of player positions
-               for each player:
-                       u16 peer_id
-                       v3s32 position*100
-                       v3s32 speed*100
-                       s32 pitch*100
-                       s32 yaw*100
-               u16 count of blocks
-               for each block:
-                       v3s16 blockpos
-                       block objects
-       */
 
        TOCLIENT_TIME_OF_DAY = 0x29,
        /*
-               u16 command
                u16 time (0-23999)
                Added in a later version:
                f1000 time_speed
        */
 
+       TOCLIENT_CSM_RESTRICTION_FLAGS = 0x2A,
+       /*
+               u32 CSMRestrictionFlags byteflag
+        */
+
+       TOCLIENT_PLAYER_SPEED = 0x2B,
+       /*
+               v3f added_vel
+        */
+
+       TOCLIENT_MEDIA_PUSH = 0x2C,
+       /*
+               std::string raw_hash
+               std::string filename
+               u32 callback_token
+               bool should_be_cached
+       */
+
        // (oops, there is some gap here)
 
-       TOCLIENT_CHAT_MESSAGE = 0x30,
+       TOCLIENT_CHAT_MESSAGE = 0x2F,
        /*
-               u16 command
+               u8 version
+               u8 message_type
+               u16 sendername length
+               wstring sendername
                u16 length
                wstring message
        */
 
+       TOCLIENT_CHAT_MESSAGE_OLD = 0x30, // Obsolete
+
        TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
        /*
-               u16 command
                u16 count of removed objects
                for all removed objects {
                        u16 id
@@ -273,7 +354,6 @@ enum ToClientCommand
 
        TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32,
        /*
-               u16 command
                for all objects
                {
                        u16 id
@@ -284,13 +364,11 @@ enum ToClientCommand
 
        TOCLIENT_HP = 0x33,
        /*
-               u16 command
                u8 hp
        */
 
        TOCLIENT_MOVE_PLAYER = 0x34,
        /*
-               u16 command
                v3f1000 player position
                f1000 player pitch
                f1000 player yaw
@@ -298,32 +376,27 @@ enum ToClientCommand
 
        TOCLIENT_ACCESS_DENIED_LEGACY = 0x35,
        /*
-               u16 command
                u16 reason_length
                wstring reason
        */
 
-       TOCLIENT_PLAYERITEM = 0x36, // Obsolete
+       TOCLIENT_FOV = 0x36,
        /*
-               u16 command
-               u16 count of player items
-               for all player items {
-                       u16 peer id
-                       u16 length of serialized item
-                       string serialized item
-               }
+               Sends an FOV override/multiplier to client.
+
+               f32 fov
+               bool is_multiplier
+               f32 transition_time
        */
 
        TOCLIENT_DEATHSCREEN = 0x37,
        /*
-               u16 command
                u8 bool set camera point target
                v3f1000 camera point target (to point the death cause or whatever)
        */
 
        TOCLIENT_MEDIA = 0x38,
        /*
-               u16 command
                u16 total number of texture bunches
                u16 index of this bunch
                u32 number of files in this bunch
@@ -339,21 +412,18 @@ enum ToClientCommand
 
        TOCLIENT_TOOLDEF = 0x39,
        /*
-               u16 command
                u32 length of the next item
                serialized ToolDefManager
        */
 
        TOCLIENT_NODEDEF = 0x3a,
        /*
-               u16 command
                u32 length of the next item
                serialized NodeDefManager
        */
 
        TOCLIENT_CRAFTITEMDEF = 0x3b,
        /*
-               u16 command
                u32 length of the next item
                serialized CraftiItemDefManager
        */
@@ -361,7 +431,6 @@ enum ToClientCommand
        TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
 
        /*
-               u16 command
                u32 number of files
                for each texture {
                        u16 length of name
@@ -373,14 +442,12 @@ enum ToClientCommand
 
        TOCLIENT_ITEMDEF = 0x3d,
        /*
-               u16 command
                u32 length of next item
                serialized ItemDefManager
        */
 
        TOCLIENT_PLAY_SOUND = 0x3f,
        /*
-               u16 command
                s32 sound_id
                u16 len
                u8[len] sound name
@@ -389,17 +456,16 @@ enum ToClientCommand
                s32[3] pos_nodes*10000
                u16 object_id
                u8 loop (bool)
+               u8 ephemeral (bool)
        */
 
        TOCLIENT_STOP_SOUND = 0x40,
        /*
-               u16 command
                s32 sound_id
        */
 
        TOCLIENT_PRIVILEGES = 0x41,
        /*
-               u16 command
                u16 number of privileges
                for each privilege
                        u16 len
@@ -408,7 +474,6 @@ enum ToClientCommand
 
        TOCLIENT_INVENTORY_FORMSPEC = 0x42,
        /*
-               u16 command
                u32 len
                u8[len] formspec
        */
@@ -432,7 +497,6 @@ enum ToClientCommand
 
        TOCLIENT_MOVEMENT = 0x45,
        /*
-               u16 command
                f1000 movement_acceleration_default
                f1000 movement_acceleration_air
                f1000 movement_acceleration_fast
@@ -449,56 +513,119 @@ enum ToClientCommand
 
        TOCLIENT_SPAWN_PARTICLE = 0x46,
        /*
-               u16 command
-               v3f1000 pos
-               v3f1000 velocity
-               v3f1000 acceleration
-               f1000 expirationtime
-               f1000 size
+               -- struct range<T> { T min, T max, f32 bias };
+               v3f pos
+               v3f velocity
+               v3f acceleration
+               f32 expirationtime
+               f32 size
                u8 bool collisiondetection
-               u8 bool vertical
                u32 len
                u8[len] texture
+               u8 bool vertical
+               u8 collision_removal
+               TileAnimation animation
+               u8 glow
+               u8 object_collision
+               v3f drag
+               range<v3f> bounce
        */
 
        TOCLIENT_ADD_PARTICLESPAWNER = 0x47,
        /*
-               u16 command
+               -- struct range<T> { T min, T max, f32 bias };
+               -- struct tween<T> { T start, T end };
                u16 amount
-               f1000 spawntime
-               v3f1000 minpos
-               v3f1000 maxpos
-               v3f1000 minvel
-               v3f1000 maxvel
-               v3f1000 minacc
-               v3f1000 maxacc
-               f1000 minexptime
-               f1000 maxexptime
-               f1000 minsize
-               f1000 maxsize
+               f32 spawntime
+               v3f minpos
+               v3f maxpos
+               v3f minvel
+               v3f maxvel
+               v3f minacc
+               v3f maxacc
+               f32 minexptime
+               f32 maxexptime
+               f32 minsize
+               f32 maxsize
                u8 bool collisiondetection
-               u8 bool vertical
                u32 len
                u8[len] texture
+               u8 bool vertical
+               u8 collision_removal
                u32 id
-       */
+               TileAnimation animation
+               u8 glow
+               u8 object_collision
+
+               f32 pos_start_bias
+               f32 vel_start_bias
+               f32 acc_start_bias
+               f32 exptime_start_bias
+               f32 size_start_bias
+
+               range<v3f> pos_end
+               -- i.e v3f pos_end_min
+               --     v3f pos_end_max
+               --     f32 pos_end_bias
+               range<v3f> vel_end
+               range<v3f> acc_end
+
+               tween<range<v3f>> drag
+               -- i.e. v3f drag_start_min
+               --      v3f drag_start_max
+               --      f32 drag_start_bias
+               --      v3f drag_end_min
+               --      v3f drag_end_max
+               --      f32 drag_end_bias
+               tween<range<v3f>> jitter
+               tween<range<f32>> bounce
+
+               u8 attraction_kind
+                       none  = 0
+                       point = 1
+                       line  = 2
+                       plane = 3
+
+               if attraction_kind > none {
+                       tween<range<f32>> attract_strength
+                       tween<v3f>        attractor_origin
+                       u16               attractor_origin_attachment_object_id
+                       u8                spawner_flags
+                           bit 1: attractor_kill (particles dies on contact)
+                       if attraction_mode > point {
+                               tween<v3f> attractor_angle
+                               u16        attractor_origin_attachment_object_id
+                       }
+               }
+
+               tween<range<v3f>> radius
+               tween<range<v3f>> drag
+
+               u16 texpool_sz
+               texpool_sz.times {
+                       u8 flags
+                       -- bit 0: animated
+                       -- other bits free & ignored as of proto v40
+                       tween<f32> alpha
+                       tween<v2f> scale
+                       if flags.animated {
+                               TileAnimation animation
+                       }
+               }
 
-       TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48,
-       /*
-               u16 command
-               u16 id
        */
 
+       TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, // Obsolete
+
        TOCLIENT_HUDADD = 0x49,
        /*
-               u16 command
                u32 id
                u8 type
                v2f1000 pos
-               u32 len
+               u16 len
                u8[len] name
                v2f1000 scale
-               u32 len2
+               u16 len2
                u8[len2] text
                u32 number
                u32 item
@@ -507,17 +634,18 @@ enum ToClientCommand
                v2f1000 offset
                v3f1000 world_pos
                v2s32 size
+               s16 z_index
+               u16 len3
+               u8[len3] text2
        */
 
        TOCLIENT_HUDRM = 0x4a,
        /*
-               u16 command
                u32 id
        */
 
        TOCLIENT_HUDCHANGE = 0x4b,
        /*
-               u16 command
                u32 id
                u8 stat
                [v2f1000 data |
@@ -528,14 +656,12 @@ enum ToClientCommand
 
        TOCLIENT_HUD_SET_FLAGS = 0x4c,
        /*
-               u16 command
                u32 flags
                u32 mask
        */
 
        TOCLIENT_HUD_SET_PARAM = 0x4d,
        /*
-               u16 command
                u16 param
                u16 len
                u8[len] value
@@ -543,32 +669,48 @@ enum ToClientCommand
 
        TOCLIENT_BREATH = 0x4e,
        /*
-               u16 command
                u16 breath
        */
 
        TOCLIENT_SET_SKY = 0x4f,
        /*
-               u16 command
-               u8[4] color (ARGB)
+               Protocol 38:
+               u8[4] base_color (ARGB)
                u8 len
                u8[len] type
                u16 count
                foreach count:
                        u8 len
                        u8[len] param
+               u8 clouds (boolean)
+
+               Protocol 39:
+               u8[4] bgcolor (ARGB)
+               std::string type
+               int texture_count
+               std::string[6] param
+               bool clouds
+               bool bgcolor_fog
+               u8[4] day_sky (ARGB)
+               u8[4] day_horizon (ARGB)
+               u8[4] dawn_sky (ARGB)
+               u8[4] dawn_horizon (ARGB)
+               u8[4] night_sky (ARGB)
+               u8[4] night_horizon (ARGB)
+               u8[4] indoors (ARGB)
+               u8[4] fog_sun_tint (ARGB)
+               u8[4] fog_moon_tint (ARGB)
+               std::string fog_tint_type
        */
 
        TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50,
        /*
-               u16 command
                u8 do_override (boolean)
                u16 day-night ratio 0...65535
        */
 
        TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51,
        /*
-               u16 command
                v2s32 stand/idle
                v2s32 walk
                v2s32 dig
@@ -578,52 +720,136 @@ enum ToClientCommand
 
        TOCLIENT_EYE_OFFSET = 0x52,
        /*
-               u16 command
                v3f1000 first
                v3f1000 third
        */
 
        TOCLIENT_DELETE_PARTICLESPAWNER = 0x53,
        /*
-               u16 command
                u32 id
        */
 
-       TOCLIENT_NUM_MSG_TYPES = 0x54,
-};
+       TOCLIENT_CLOUD_PARAMS = 0x54,
+       /*
+               f1000 density
+               u8[4] color_diffuse (ARGB)
+               u8[4] color_ambient (ARGB)
+               f1000 height
+               f1000 thickness
+               v2f1000 speed
+       */
 
-enum ToServerCommand
-{
-       TOSERVER_INIT = 0x02,
+       TOCLIENT_FADE_SOUND = 0x55,
        /*
-               Sent first after connected.
+               s32 sound_id
+               float step
+               float gain
+       */
+       TOCLIENT_UPDATE_PLAYER_LIST = 0x56,
+       /*
+               u8 type
+               u16 number of players
+               for each player
+                       u16 len
+                       u8[len] player name
+       */
+
+       TOCLIENT_MODCHANNEL_MSG = 0x57,
+       /*
+               u16 channel name length
+               std::string channel name
+               u16 channel name sender
+               std::string channel name
+               u16 message length
+               std::string message
+       */
+
+       TOCLIENT_MODCHANNEL_SIGNAL = 0x58,
+       /*
+               u8 signal id
+               u16 channel name length
+               std::string channel name
+       */
+
+       TOCLIENT_NODEMETA_CHANGED = 0x59,
+       /*
+               serialized and compressed node metadata
+       */
+
+       TOCLIENT_SET_SUN = 0x5a,
+       /*
+               bool visible
+               std::string texture
+               std::string tonemap
+               std::string sunrise
+               f32 scale
+       */
+
+       TOCLIENT_SET_MOON = 0x5b,
+       /*
+               bool visible
+               std::string texture
+               std::string tonemap
+               f32 scale
+       */
+
+       TOCLIENT_SET_STARS = 0x5c,
+       /*
+               bool visible
+               u32 count
+               u8[4] starcolor (ARGB)
+               f32 scale
+               f32 day_opacity
+       */
+
+       TOCLIENT_SRP_BYTES_S_B = 0x60,
+       /*
+               Belonging to AUTH_MECHANISM_SRP.
+
+               std::string bytes_s
+               std::string bytes_B
+       */
 
-               [0] u16 TOSERVER_INIT
-               [2] u8 SER_FMT_VER_HIGHEST_READ
-               [3] u8 compression_modes
+       TOCLIENT_FORMSPEC_PREPEND = 0x61,
+       /*
+               u16 len
+               u8[len] formspec
        */
 
-       TOSERVER_AUTH = 0x03,
+       TOCLIENT_MINIMAP_MODES = 0x62,
        /*
-               Sent first after presentation (INIT).
-               [0] std::string player_name
-               [0+*] std::string password (new in some version)
-               [0+*+*] u16 minimum supported network protocol version (added sometime)
-               [0+*+*+2] u16 maximum supported network protocol version (added later than the previous one)
+               u16 count // modes
+               u16 mode  // wanted current mode index after change
+               for each mode
+                       u16 type
+                       std::string label
+                       u16 size
+                       std::string extra
        */
 
-       TOSERVER_INIT_LEGACY = 0x10,
+       TOCLIENT_SET_LIGHTING = 0x63,
+       /*
+               f32 shadow_intensity
+       */
+
+       TOCLIENT_NUM_MSG_TYPES = 0x64,
+};
+
+enum ToServerCommand
+{
+       TOSERVER_INIT = 0x02,
        /*
                Sent first after connected.
 
-               [0] u16 TOSERVER_INIT_LEGACY
-               [2] u8 SER_FMT_VER_HIGHEST_READ
-               [3] u8[20] player_name
-               [23] u8[28] password (new in some version)
-               [51] u16 minimum supported network protocol version (added sometime)
-               [53] u16 maximum supported network protocol version (added later than the previous one)
+               u8 serialisation version (=SER_FMT_VER_HIGHEST_READ)
+               u16 supported network compression modes
+               u16 minimum supported network protocol version
+               u16 maximum supported network protocol version
+               std::string player name
        */
 
+       TOSERVER_INIT_LEGACY = 0x10, // Obsolete
+
        TOSERVER_INIT2 = 0x11,
        /*
                Sent as an ACK for TOCLIENT_INIT.
@@ -632,7 +858,27 @@ enum ToServerCommand
                [0] u16 TOSERVER_INIT2
        */
 
-       TOSERVER_GETBLOCK=0x20, // Obsolete
+       TOSERVER_MODCHANNEL_JOIN = 0x17,
+       /*
+               u16 channel name length
+               std::string channel name
+        */
+
+       TOSERVER_MODCHANNEL_LEAVE = 0x18,
+       /*
+               u16 channel name length
+               std::string channel name
+        */
+
+       TOSERVER_MODCHANNEL_MSG = 0x19,
+       /*
+               u16 channel name length
+               std::string channel name
+               u16 message length
+               std::string message
+        */
+
+       TOSERVER_GETBLOCK = 0x20, // Obsolete
        TOSERVER_ADDNODE = 0x21, // Obsolete
        TOSERVER_REMOVENODE = 0x22, // Obsolete
 
@@ -644,6 +890,8 @@ enum ToServerCommand
                [2+12+12] s32 pitch*100
                [2+12+12+4] s32 yaw*100
                [2+12+12+4+4] u32 keyPressed
+               [2+12+12+4+4+1] u8 fov*80
+               [2+12+12+4+4+4+1] u8 ceil(wanted_range / MAP_BLOCKSIZE)
        */
 
        TOSERVER_GOTBLOCKS = 0x24,
@@ -665,49 +913,10 @@ enum ToServerCommand
        */
 
        TOSERVER_ADDNODE_FROM_INVENTORY = 0x26, // Obsolete
-       /*
-               [0] u16 command
-               [2] v3s16 pos
-               [8] u16 i
-       */
-
        TOSERVER_CLICK_OBJECT = 0x27, // Obsolete
-       /*
-               length: 13
-               [0] u16 command
-               [2] u8 button (0=left, 1=right)
-               [3] v3s16 blockpos
-               [9] s16 id
-               [11] u16 item
-       */
-
        TOSERVER_GROUND_ACTION = 0x28, // Obsolete
-       /*
-               length: 17
-               [0] u16 command
-               [2] u8 action
-               [3] v3s16 nodepos_undersurface
-               [9] v3s16 nodepos_abovesurface
-               [15] u16 item
-               actions:
-               0: start digging (from undersurface)
-               1: place block (to abovesurface)
-               2: stop digging (all parameters ignored)
-               3: digging completed
-       */
-
        TOSERVER_RELEASE = 0x29, // Obsolete
-
-       // (oops, there is some gap here)
-
-       TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete
-       /*
-               u16 command
-               v3s16 blockpos
-               s16 id
-               u16 textlen
-               textdata
-       */
+       TOSERVER_SIGNTEXT = 0x30, // Obsolete
 
        TOSERVER_INVENTORY_ACTION = 0x31,
        /*
@@ -716,42 +925,19 @@ enum ToServerCommand
 
        TOSERVER_CHAT_MESSAGE = 0x32,
        /*
-               u16 command
                u16 length
                wstring message
        */
 
-       TOSERVER_SIGNNODETEXT = 0x33, // obsolete
-       /*
-               u16 command
-               v3s16 p
-               u16 textlen
-               textdata
-       */
-
+       TOSERVER_SIGNNODETEXT = 0x33, // Obsolete
        TOSERVER_CLICK_ACTIVEOBJECT = 0x34, // Obsolete
-       /*
-               length: 7
-               [0] u16 command
-               [2] u8 button (0=left, 1=right)
-               [3] u16 id
-               [5] u16 item
-       */
 
        TOSERVER_DAMAGE = 0x35,
        /*
-               u16 command
                u8 amount
        */
 
-       TOSERVER_PASSWORD_LEGACY = 0x36,
-       /*
-               Sent to change password.
-
-               [0] u16 TOSERVER_PASSWORD
-               [2] u8[28] old password
-               [30] u8[28] new password
-       */
+       TOSERVER_PASSWORD_LEGACY = 0x36, // Obsolete
 
        TOSERVER_PLAYERITEM = 0x37,
        /*
@@ -779,20 +965,16 @@ enum ToServerCommand
                2: digging completed
                3: place block or item (to abovesurface)
                4: use item
-
-               (Obsoletes TOSERVER_GROUND_ACTION and TOSERVER_CLICK_ACTIVEOBJECT.)
        */
 
        TOSERVER_REMOVED_SOUNDS = 0x3a,
        /*
-               u16 command
                u16 len
                s32[len] sound_id
        */
 
        TOSERVER_NODEMETA_FIELDS = 0x3b,
        /*
-               u16 command
                v3s16 p
                u16 len
                u8[len] form name (reserved for future use)
@@ -806,7 +988,6 @@ enum ToServerCommand
 
        TOSERVER_INVENTORY_FIELDS = 0x3c,
        /*
-               u16 command
                u16 len
                u8[len] form name (reserved for future use)
                u16 number of fields
@@ -817,36 +998,24 @@ enum ToServerCommand
                        u8[len] field value
        */
 
-       TOSERVER_PASSWORD = 0x3d,
-       /*
-               Sent to change password.
-
-               [0] u16 TOSERVER_PASSWORD
-               [2] std::string old password
-               [2+*] std::string new password
-       */
-
        TOSERVER_REQUEST_MEDIA = 0x40,
        /*
-               u16 command
                u16 number of files requested
                for each file {
                        u16 length of name
                        string name
                }
-        */
-
-       TOSERVER_RECEIVED_MEDIA = 0x41,
-       /*
-               u16 command
        */
 
-       TOSERVER_BREATH = 0x42,
+       TOSERVER_HAVE_MEDIA = 0x41,
        /*
-               u16 command
-               u16 breath
+               u8 number of callback tokens
+               for each:
+                       u32 token
        */
 
+       TOSERVER_BREATH = 0x42, // Obsolete
+
        TOSERVER_CLIENT_READY = 0x43,
        /*
                u8 major
@@ -857,10 +1026,52 @@ enum ToServerCommand
                u8[len] full_version_string
        */
 
-       TOSERVER_NUM_MSG_TYPES = 0x44,
+       TOSERVER_FIRST_SRP = 0x50,
+       /*
+               Belonging to AUTH_MECHANISM_FIRST_SRP.
+
+               std::string srp salt
+               std::string srp verification key
+               u8 is_empty (=1 if password is empty, 0 otherwise)
+       */
+
+       TOSERVER_SRP_BYTES_A = 0x51,
+       /*
+               Belonging to AUTH_MECHANISM_SRP,
+                       depending on current_login_based_on.
+
+               std::string bytes_A
+               u8 current_login_based_on : on which version of the password's
+                                           hash this login is based on (0 legacy hash,
+                                           or 1 directly the password)
+       */
+
+       TOSERVER_SRP_BYTES_M = 0x52,
+       /*
+               Belonging to AUTH_MECHANISM_SRP.
+
+               std::string bytes_M
+       */
+
+       TOSERVER_NUM_MSG_TYPES = 0x53,
+};
+
+enum AuthMechanism
+{
+       // reserved
+       AUTH_MECHANISM_NONE = 0,
+
+       // SRP based on the legacy hash
+       AUTH_MECHANISM_LEGACY_PASSWORD = 1 << 0,
+
+       // SRP based on the srp verification key
+       AUTH_MECHANISM_SRP = 1 << 1,
+
+       // Establishes a srp verification key, for first login and password changing
+       AUTH_MECHANISM_FIRST_SRP = 1 << 2,
 };
 
-enum AccessDeniedCode {
+enum AccessDeniedCode : u8 {
        SERVER_ACCESSDENIED_WRONG_PASSWORD,
        SERVER_ACCESSDENIED_UNEXPECTED_DATA,
        SERVER_ACCESSDENIED_SINGLEPLAYER,
@@ -872,25 +1083,59 @@ enum AccessDeniedCode {
        SERVER_ACCESSDENIED_ALREADY_CONNECTED,
        SERVER_ACCESSDENIED_SERVER_FAIL,
        SERVER_ACCESSDENIED_CUSTOM_STRING,
+       SERVER_ACCESSDENIED_SHUTDOWN,
+       SERVER_ACCESSDENIED_CRASH,
        SERVER_ACCESSDENIED_MAX,
 };
 
 enum NetProtoCompressionMode {
-       NETPROTO_COMPRESSION_ZLIB = 0,
+       NETPROTO_COMPRESSION_NONE = 0,
 };
 
 const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = {
        "Invalid password",
-       "Your client sent something the server didn't expect.  Try reconnecting or updating your client",
+       "Your client sent something the server didn't expect.  Try reconnecting or updating your client.",
        "The server is running in simple singleplayer mode.  You cannot connect.",
-       "Your client's version is not supported.\nPlease contact server administrator.",
-       "Player name contains disallowed characters.",
-       "Player name not allowed.",
-       "Too many users.",
+       "Your client's version is not supported.\nPlease contact the server administrator.",
+       "Player name contains disallowed characters",
+       "Player name not allowed",
+       "Too many users",
        "Empty passwords are disallowed.  Set a password and try again.",
        "Another client is connected with this name.  If your client closed unexpectedly, try again in a minute.",
-       "Server authention failed.  This is likely a server error."
+       "Internal server error",
        "",
+       "Server shutting down",
+       "The server has experienced an internal error.  You will now be disconnected."
 };
 
-#endif
+enum PlayerListModifer : u8
+{
+       PLAYER_LIST_INIT,
+       PLAYER_LIST_ADD,
+       PLAYER_LIST_REMOVE,
+};
+
+enum CSMRestrictionFlags : u64 {
+       CSM_RF_NONE = 0x00000000,
+       // Until server-sent CSM and verifying of builtin are complete,
+       // 'CSM_RF_LOAD_CLIENT_MODS' also disables loading 'builtin'.
+       // When those are complete, this should return to only being a restriction on the
+       // loading of client mods.
+       CSM_RF_LOAD_CLIENT_MODS = 0x00000001, // Don't load client-provided mods or 'builtin'
+       CSM_RF_CHAT_MESSAGES = 0x00000002,    // Disable chat message sending from CSM
+       CSM_RF_READ_ITEMDEFS = 0x00000004,    // Disable itemdef lookups
+       CSM_RF_READ_NODEDEFS = 0x00000008,    // Disable nodedef lookups
+       CSM_RF_LOOKUP_NODES = 0x00000010,     // Limit node lookups
+       CSM_RF_READ_PLAYERINFO = 0x00000020,  // Disable player info lookups
+       CSM_RF_ALL = 0xFFFFFFFF,
+};
+
+enum InteractAction : u8
+{
+       INTERACT_START_DIGGING,     // 0: start digging (from undersurface) or use
+       INTERACT_STOP_DIGGING,      // 1: stop digging (all parameters ignored)
+       INTERACT_DIGGING_COMPLETED, // 2: digging completed
+       INTERACT_PLACE,             // 3: place block or item (to abovesurface)
+       INTERACT_USE,               // 4: use item
+       INTERACT_ACTIVATE           // 5: rightclick air ("activate")
+};