/* Minetest Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #pragma once #include "util/string.h" /* changes by PROTOCOL_VERSION: PROTOCOL_VERSION 3: Base for writing changes here PROTOCOL_VERSION 4: Add TOCLIENT_MEDIA Add TOCLIENT_TOOLDEF Add TOCLIENT_NODEDEF Add TOCLIENT_CRAFTITEMDEF Add TOSERVER_INTERACT Obsolete TOSERVER_CLICK_ACTIVEOBJECT Obsolete TOSERVER_GROUND_ACTION PROTOCOL_VERSION 5: Make players to be handled mostly as ActiveObjects PROTOCOL_VERSION 6: Only non-cached textures are sent PROTOCOL_VERSION 7: Add TOCLIENT_ITEMDEF Obsolete TOCLIENT_TOOLDEF Obsolete TOCLIENT_CRAFTITEMDEF Compress the contents of TOCLIENT_ITEMDEF and TOCLIENT_NODEDEF PROTOCOL_VERSION 8: Digging based on item groups Many things PROTOCOL_VERSION 9: 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. Node metadata change (came in later; somewhat incompatible) PROTOCOL_VERSION 11: TileDef in ContentFeatures Nodebox drawtype (some dev snapshot) TOCLIENT_INVENTORY_FORMSPEC (0.4.0, 0.4.1) PROTOCOL_VERSION 12: TOSERVER_INVENTORY_FIELDS 16-bit node ids TOCLIENT_DETACHED_INVENTORY PROTOCOL_VERSION 13: InventoryList field "Width" (deserialization fails with old versions) PROTOCOL_VERSION 14: Added transfer of player pressed keys to the server Added new messages for mesh and bone animation, as well as attachments AO_CMD_SET_ANIMATION AO_CMD_SET_BONE_POSITION GENERIC_CMD_SET_ATTACHMENT PROTOCOL_VERSION 15: Serialization format changes PROTOCOL_VERSION 16: TOCLIENT_SHOW_FORMSPEC PROTOCOL_VERSION 17: Serialization format change: include backface_culling flag in TileDef Added rightclickable field in nodedef TOCLIENT_SPAWN_PARTICLE TOCLIENT_ADD_PARTICLESPAWNER TOCLIENT_DELETE_PARTICLESPAWNER PROTOCOL_VERSION 18: damageGroups added to ToolCapabilities sound_place added to ItemDefinition PROTOCOL_VERSION 19: AO_CMD_SET_PHYSICS_OVERRIDE PROTOCOL_VERSION 20: TOCLIENT_HUDADD TOCLIENT_HUDRM TOCLIENT_HUDCHANGE TOCLIENT_HUD_SET_FLAGS PROTOCOL_VERSION 21: TOCLIENT_BREATH TOSERVER_BREATH range added to ItemDefinition drowning, leveled and liquid_range added to ContentFeatures stepheight and collideWithObjects added to object properties version, heat and humidity transfer in MapBock automatic_face_movement_dir and automatic_face_movement_dir_offset added to object properties PROTOCOL_VERSION 22: add swap_node PROTOCOL_VERSION 23: 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) PROTOCOL_VERSION 25: Rename TOCLIENT_ACCESS_DENIED to TOCLIENT_ACCESS_DENIED_LEGAGY Rename TOCLIENT_DELETE_PARTICLESPAWNER to TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY Rename TOSERVER_PASSWORD to TOSERVER_PASSWORD_LEGACY Rename TOSERVER_INIT to TOSERVER_INIT_LEGACY Rename TOCLIENT_INIT to TOCLIENT_INIT_LEGACY Add TOCLIENT_ACCESS_DENIED new opcode (0x0A), using error codes for standard error, keeping customisation possible. This permit translation Add TOCLIENT_DELETE_PARTICLESPAWNER (0x53), fixing the u16 read and reading u32 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 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 PROTOCOL VERSION 41: Added new particlespawner parameters [scheduled bump for 5.6.0] PROTOCOL VERSION 42: TOSERVER_UPDATE_CLIENT_INFO added new fields for TOCLIENT_SET_LIGHTING and TOCLIENT_SET_SKY Send forgotten TweenedParameter properties [scheduled bump for 5.7.0] PROTOCOL VERSION 43: "start_time" added to TOCLIENT_PLAY_SOUND place_param2 type change u8 -> optional [scheduled bump for 5.8.0] PROTOCOL VERSION 44: AO_CMD_SET_BONE_POSITION extended Add TOCLIENT_MOVE_PLAYER_REL Move default minimap from client-side C++ to server-side builtin Lua [scheduled bump for 5.9.0] PROTOCOL VERSION 45: Minimap HUD element supports negative size values as percentages [bump for 5.9.1] PROTOCOL VERSION 46: Move default hotbar from client-side C++ to server-side builtin Lua [scheduled bump for 5.10.0] */ #define LATEST_PROTOCOL_VERSION 46 #define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION) // Server's supported network protocol range #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 37 #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION #define PASSWORD_SIZE 28 // Maximum password length. Allows for // base64-encoded SHA-1 (27+\0). // See also formspec [Version History] in doc/lua_api.md #define FORMSPEC_API_VERSION 7 #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-" typedef u16 session_t; enum ToClientCommand : u16 { TOCLIENT_HELLO = 0x02, /* Sent after TOSERVER_INIT. u8 deployed serialization 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, /* Message from server to accept auth. 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_BLOCKDATA = 0x20, TOCLIENT_ADDNODE = 0x21, /* v3s16 position serialized mapnode u8 keep_metadata // Added in protocol version 22 */ TOCLIENT_REMOVENODE = 0x22, TOCLIENT_INVENTORY = 0x27, /* [0] u16 command [2] serialized inventory */ TOCLIENT_TIME_OF_DAY = 0x29, /* u16 time (0-23999) 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 */ TOCLIENT_CHAT_MESSAGE = 0x2F, /* u8 version u8 message_type u16 sendername length wstring sendername u16 length wstring message */ TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31, /* u16 count of removed objects for all removed objects { u16 id } u16 count of added objects for all added objects { u16 id u8 type u32 initialization data length string initialization data } */ TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32, /* for all objects { u16 id u16 message length string message } */ TOCLIENT_HP = 0x33, /* u8 hp */ TOCLIENT_MOVE_PLAYER = 0x34, /* v3f1000 player position f1000 player pitch f1000 player yaw */ TOCLIENT_ACCESS_DENIED_LEGACY = 0x35, /* u16 reason_length wstring reason */ TOCLIENT_FOV = 0x36, /* Sends an FOV override/multiplier to client. f32 fov bool is_multiplier f32 transition_time */ TOCLIENT_DEATHSCREEN = 0x37, /* u8 bool set camera point target v3f1000 camera point target (to point the death cause or whatever) */ TOCLIENT_MEDIA = 0x38, /* u16 total number of texture bunches u16 index of this bunch u32 number of files in this bunch for each file { u16 length of name string name u32 length of data data } u16 length of remote media server url (if applicable) string url */ TOCLIENT_NODEDEF = 0x3a, /* u32 length of the next item serialized NodeDefManager */ TOCLIENT_ANNOUNCE_MEDIA = 0x3c, /* u32 number of files for each texture { u16 length of name string name u16 length of sha1_digest string sha1_digest } */ TOCLIENT_ITEMDEF = 0x3d, /* u32 length of next item serialized ItemDefManager */ TOCLIENT_PLAY_SOUND = 0x3f, /* s32 server_id u16 len u8[len] sound name f32 gain u8 type (SoundLocation: 0=local, 1=positional, 2=object) v3f pos_nodes (in BS-space) u16 object_id u8 loop (bool) f32 fade f32 pitch u8 ephemeral (bool) f32 start_time (in seconds) */ TOCLIENT_STOP_SOUND = 0x40, /* s32 sound_id */ TOCLIENT_PRIVILEGES = 0x41, /* u16 number of privileges for each privilege u16 len u8[len] privilege */ TOCLIENT_INVENTORY_FORMSPEC = 0x42, /* u32 len u8[len] formspec */ TOCLIENT_DETACHED_INVENTORY = 0x43, /* [0] u16 command u16 len u8[len] name [2] serialized inventory */ TOCLIENT_SHOW_FORMSPEC = 0x44, /* [0] u16 command u32 len u8[len] formspec u16 len u8[len] formname */ TOCLIENT_MOVEMENT = 0x45, /* f1000 movement_acceleration_default f1000 movement_acceleration_air f1000 movement_acceleration_fast f1000 movement_speed_walk f1000 movement_speed_crouch f1000 movement_speed_fast f1000 movement_speed_climb f1000 movement_speed_jump f1000 movement_liquid_fluidity f1000 movement_liquid_fluidity_smooth f1000 movement_liquid_sink f1000 movement_gravity */ TOCLIENT_SPAWN_PARTICLE = 0x46, /* using range = RangedParameter { T min, max f32 bias } using tween = TweenedParameter { u8 style u16 reps f32 beginning T start, end } v3f pos v3f velocity v3f acceleration f32 expirationtime f32 size u8 bool collisiondetection u32 len u8[len] texture u8 bool vertical u8 bool collision_removal TileAnimation animation u8 glow u8 bool object_collision u16 node_param0 u8 node_param2 u8 node_tile v3f drag range jitter range bounce texture { u8 flags (ParticleTextureFlags) -- bit 0: animated -- next bits: blend mode (BlendMode) tween alpha tween scale } */ TOCLIENT_ADD_PARTICLESPAWNER = 0x47, /* using range = RangedParameter { T min, max f32 bias } using tween = TweenedParameter { u8 style u16 reps f32 beginning T start, end } u16 amount f32 spawntime if PROTOCOL_VERSION >= 42 { tween> pos, vel, acc, exptime, size } else { v3f minpos v3f maxpos v3f minvel v3f maxvel v3f minacc v3f maxacc f32 minexptime f32 maxexptime f32 minsize f32 maxsize } u8 bool collisiondetection u32 len u8[len] texture u32 spawner_id u8 bool vertical u8 bool collision_removal u32 attached_id TileAnimation animation u8 glow u8 bool object_collision u16 node_param0 u8 node_param2 u8 node_tile if PROTOCOL_VERSION < 42 { f32 pos_start_bias f32 vel_start_bias f32 acc_start_bias f32 exptime_start_bias f32 size_start_bias range pos_end -- i.e v3f pos_end_min -- v3f pos_end_max -- f32 pos_end_bias range vel_end range acc_end range exptime_end range size_end } texture { u8 flags (ParticleTextureFlags) -- bit 0: animated -- next bits: blend mode (BlendMode) tween alpha tween scale if (flags.animated) TileAnimation animation } tween> 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> jitter tween> bounce u8 attraction_kind none = 0 point = 1 line = 2 plane = 3 if attraction_kind > none { tween> attract_strength tween attractor_origin u16 attractor_origin_attachment_object_id u8 spawner_flags bit 1: attractor_kill (particles dies on contact) if attraction_mode > point { tween attractor_direction u16 attractor_direction_attachment_object_id } } tween> radius u16 texpool_size texpool_size.times { u8 flags (ParticleTextureFlags) -- bit 0: animated -- next bits: blend mode (BlendMode) tween alpha tween scale u32 len u8[len] texture if (flags.animated) TileAnimation animation } */ TOCLIENT_HUDADD = 0x49, /* u32 id u8 type v2f1000 pos u16 len u8[len] name v2f1000 scale u16 len2 u8[len2] text u32 number u32 item u32 dir v2f1000 align v2f1000 offset v3f1000 world_pos v2s32 size s16 z_index u16 len3 u8[len3] text2 */ TOCLIENT_HUDRM = 0x4a, /* u32 id */ TOCLIENT_HUDCHANGE = 0x4b, /* u32 id u8 stat [v2f1000 data | u32 len u8[len] data | u32 data] */ TOCLIENT_HUD_SET_FLAGS = 0x4c, /* u32 flags u32 mask */ TOCLIENT_HUD_SET_PARAM = 0x4d, /* u16 param u16 len u8[len] value */ TOCLIENT_BREATH = 0x4e, /* u16 breath */ TOCLIENT_SET_SKY = 0x4f, /* 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 float body_orbit_tilt */ TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50, /* u8 do_override (boolean) u16 day-night ratio 0...65535 */ TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51, /* v2s32 stand/idle v2s32 walk v2s32 dig v2s32 walk+dig f1000 frame_speed */ TOCLIENT_EYE_OFFSET = 0x52, /* v3f1000 first v3f1000 third v3f1000 third_front */ TOCLIENT_DELETE_PARTICLESPAWNER = 0x53, /* u32 id */ TOCLIENT_CLOUD_PARAMS = 0x54, /* f1000 density u8[4] color_diffuse (ARGB) u8[4] color_ambient (ARGB) f1000 height f1000 thickness v2f1000 speed */ TOCLIENT_FADE_SOUND = 0x55, /* 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_MOVE_PLAYER_REL = 0x5d, /* v3f added_pos */ TOCLIENT_SRP_BYTES_S_B = 0x60, /* Belonging to AUTH_MECHANISM_SRP. std::string bytes_s std::string bytes_B */ TOCLIENT_FORMSPEC_PREPEND = 0x61, /* u16 len u8[len] formspec */ TOCLIENT_MINIMAP_MODES = 0x62, /* u16 count // modes u16 mode // wanted current mode index after change for each mode u16 type std::string label u16 size std::string extra */ TOCLIENT_SET_LIGHTING = 0x63, /* f32 shadow_intensity f32 saturation exposure parameters f32 luminance_min f32 luminance_max f32 exposure_correction f32 speed_dark_bright f32 speed_bright_dark f32 center_weight_power */ TOCLIENT_NUM_MSG_TYPES = 0x64, }; enum ToServerCommand : u16 { TOSERVER_INIT = 0x02, /* Sent first after connected. u8 serialization 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_INIT2 = 0x11, /* Sent as an ACK for TOCLIENT_AUTH_ACCEPT. After this, the server can send data. */ 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_PLAYERPOS = 0x23, /* [0] u16 command [2] v3s32 position*100 [2+12] v3s32 speed*100 [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+4] u8 fov*80 [2+12+12+4+4+4+1] u8 ceil(wanted_range / MAP_BLOCKSIZE) [2+12+12+4+4+4+1+1] u8 camera_inverted (bool) */ TOSERVER_GOTBLOCKS = 0x24, /* [0] u16 command [2] u8 count [3] v3s16 pos_0 [3+6] v3s16 pos_1 ... */ TOSERVER_DELETEDBLOCKS = 0x25, /* [0] u16 command [2] u8 count [3] v3s16 pos_0 [3+6] v3s16 pos_1 ... */ TOSERVER_INVENTORY_ACTION = 0x31, /* See InventoryAction in inventorymanager.h */ TOSERVER_CHAT_MESSAGE = 0x32, /* u16 length wstring message */ TOSERVER_DAMAGE = 0x35, /* u8 amount */ TOSERVER_PLAYERITEM = 0x37, /* Sent to change selected item. [0] u16 TOSERVER_PLAYERITEM [2] u16 item */ TOSERVER_RESPAWN = 0x38, /* u16 TOSERVER_RESPAWN */ TOSERVER_INTERACT = 0x39, /* [0] u16 command [2] u8 action [3] u16 item [5] u32 length of the next item [9] serialized PointedThing actions: 0: start digging (from undersurface) or use 1: stop digging (all parameters ignored) 2: digging completed 3: place block or item (to abovesurface) 4: use item */ TOSERVER_REMOVED_SOUNDS = 0x3a, /* u16 len s32[len] sound_id */ TOSERVER_NODEMETA_FIELDS = 0x3b, /* v3s16 p u16 len u8[len] form name (reserved for future use) u16 number of fields for each field: u16 len u8[len] field name u32 len u8[len] field value */ TOSERVER_INVENTORY_FIELDS = 0x3c, /* u16 len u8[len] form name (reserved for future use) u16 number of fields for each field: u16 len u8[len] field name u32 len u8[len] field value */ TOSERVER_REQUEST_MEDIA = 0x40, /* u16 number of files requested for each file { u16 length of name string name } */ TOSERVER_HAVE_MEDIA = 0x41, /* u8 number of callback tokens for each: u32 token */ TOSERVER_CLIENT_READY = 0x43, /* u8 major u8 minor u8 patch u8 reserved u16 len u8[len] full_version_string */ 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_UPDATE_CLIENT_INFO = 0x53, /* v2s16 render_target_size f32 gui_scaling f32 hud_scaling v2f32 max_fs_info */ TOSERVER_NUM_MSG_TYPES = 0x54, }; 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 : u8 { SERVER_ACCESSDENIED_WRONG_PASSWORD, SERVER_ACCESSDENIED_UNEXPECTED_DATA, SERVER_ACCESSDENIED_SINGLEPLAYER, SERVER_ACCESSDENIED_WRONG_VERSION, SERVER_ACCESSDENIED_WRONG_CHARS_IN_NAME, SERVER_ACCESSDENIED_WRONG_NAME, SERVER_ACCESSDENIED_TOO_MANY_USERS, SERVER_ACCESSDENIED_EMPTY_PASSWORD, 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_NONE = 0, }; 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") };