mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 07:25:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			594 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			594 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| Minetest-c55
 | |
| Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>
 | |
| 
 | |
| 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.
 | |
| */
 | |
| 
 | |
| #ifndef CLIENTSERVER_HEADER
 | |
| #define CLIENTSERVER_HEADER
 | |
| 
 | |
| #include "util/pointer.h"
 | |
| 
 | |
| SharedBuffer<u8> makePacket_TOCLIENT_TIME_OF_DAY(u16 time, float time_speed);
 | |
| 
 | |
| /*
 | |
| 	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
 | |
| 	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
 | |
| 		GENERIC_CMD_SET_ANIMATION
 | |
| 		GENERIC_CMD_SET_BONE_POSITION
 | |
| 		GENERIC_CMD_SET_ATTACHMENT
 | |
| 	PROTOCOL_VERSION 15:
 | |
| 		Serialization format changes
 | |
| 	PROTOCOL_VERSION 16:
 | |
| 		TOCLIENT_SHOW_FORMSPEC
 | |
| */
 | |
| 
 | |
| #define LATEST_PROTOCOL_VERSION 16
 | |
| 
 | |
| // Server's supported network protocol range
 | |
| #define SERVER_PROTOCOL_VERSION_MIN 13
 | |
| #define SERVER_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
 | |
| 
 | |
| // Client's supported network protocol range
 | |
| #define CLIENT_PROTOCOL_VERSION_MIN 13
 | |
| #define CLIENT_PROTOCOL_VERSION_MAX LATEST_PROTOCOL_VERSION
 | |
| 
 | |
| // Constant that differentiates the protocol from random data and other protocols
 | |
| #define PROTOCOL_ID 0x4f457403
 | |
| 
 | |
| #define PASSWORD_SIZE 28       // Maximum password length. Allows for
 | |
|                                // base64-encoded SHA-1 (27+\0).
 | |
| 
 | |
| #define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."
 | |
| 
 | |
| enum ToClientCommand
 | |
| {
 | |
| 	TOCLIENT_INIT = 0x10,
 | |
| 	/*
 | |
| 		Server's reply to TOSERVER_INIT.
 | |
| 		Sent second after connected.
 | |
| 
 | |
| 		[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
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
 | |
| 	TOCLIENT_ADDNODE = 0x21,
 | |
| 	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,
 | |
| 	/*
 | |
| 		[0] u16 command
 | |
| 		[2] serialized inventory
 | |
| 	*/
 | |
| 	
 | |
| 	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
 | |
| 	*/
 | |
| 
 | |
| 	// (oops, there is some gap here)
 | |
| 
 | |
| 	TOCLIENT_CHAT_MESSAGE = 0x30,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u16 length
 | |
| 		wstring message
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		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,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		for all objects
 | |
| 		{
 | |
| 			u16 id
 | |
| 			u16 message length
 | |
| 			string message
 | |
| 		}
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_HP = 0x33,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u8 hp
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_MOVE_PLAYER = 0x34,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		v3f1000 player position
 | |
| 		f1000 player pitch
 | |
| 		f1000 player yaw
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_ACCESS_DENIED = 0x35,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u16 reason_length
 | |
| 		wstring reason
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_PLAYERITEM = 0x36, // Obsolete
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u16 count of player items
 | |
| 		for all player items {
 | |
| 			u16 peer id
 | |
| 			u16 length of serialized item
 | |
| 			string serialized item
 | |
| 		}
 | |
| 	*/
 | |
| 
 | |
| 	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
 | |
| 		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_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
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_ANNOUNCE_MEDIA = 0x3c,
 | |
| 
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u32 number of files
 | |
| 		for each texture {
 | |
| 			u16 length of name
 | |
| 			string name
 | |
| 			u16 length of sha1_digest
 | |
| 			string sha1_digest
 | |
| 		}
 | |
| 	*/
 | |
| 
 | |
| 	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
 | |
| 		s32 gain*1000
 | |
| 		u8 type (0=local, 1=positional, 2=object)
 | |
| 		s32[3] pos_nodes*10000
 | |
| 		u16 object_id
 | |
| 		u8 loop (bool)
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_STOP_SOUND = 0x40,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		s32 sound_id
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_PRIVILEGES = 0x41,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u16 number of privileges
 | |
| 		for each privilege
 | |
| 			u16 len
 | |
| 			u8[len] privilege
 | |
| 	*/
 | |
| 
 | |
| 	TOCLIENT_INVENTORY_FORMSPEC = 0x42,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		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
 | |
| 	*/
 | |
| };
 | |
| 
 | |
| enum ToServerCommand
 | |
| {
 | |
| 	TOSERVER_INIT=0x10,
 | |
| 	/*
 | |
| 		Sent first after connected.
 | |
| 
 | |
| 		[0] u16 TOSERVER_INIT
 | |
| 		[2] u8 SER_FMT_VER_HIGHEST
 | |
| 		[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)
 | |
| 	*/
 | |
| 
 | |
| 	TOSERVER_INIT2 = 0x11,
 | |
| 	/*
 | |
| 		Sent as an ACK for TOCLIENT_INIT.
 | |
| 		After this, the server can send data.
 | |
| 
 | |
| 		[0] u16 TOSERVER_INIT2
 | |
| 	*/
 | |
| 
 | |
| 	TOSERVER_GETBLOCK=0x20, // Obsolete
 | |
| 	TOSERVER_ADDNODE = 0x21, // Obsolete
 | |
| 	TOSERVER_REMOVENODE = 0x22, // Obsolete
 | |
| 
 | |
| 	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
 | |
| 	*/
 | |
| 
 | |
| 	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_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_INVENTORY_ACTION = 0x31,
 | |
| 	/*
 | |
| 		See InventoryAction in inventory.h
 | |
| 	*/
 | |
| 
 | |
| 	TOSERVER_CHAT_MESSAGE = 0x32,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		u16 length
 | |
| 		wstring message
 | |
| 	*/
 | |
| 
 | |
| 	TOSERVER_SIGNNODETEXT = 0x33, // obsolete
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		v3s16 p
 | |
| 		u16 textlen
 | |
| 		textdata
 | |
| 	*/
 | |
| 
 | |
| 	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=0x36,
 | |
| 	/*
 | |
| 		Sent to change password.
 | |
| 
 | |
| 		[0] u16 TOSERVER_PASSWORD
 | |
| 		[2] u8[28] old password
 | |
| 		[30] u8[28] new password
 | |
| 	*/
 | |
| 
 | |
| 	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
 | |
| 
 | |
| 		(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)
 | |
| 		u16 number of fields
 | |
| 		for each field:
 | |
| 			u16 len
 | |
| 			u8[len] field name
 | |
| 			u32 len
 | |
| 			u8[len] field value
 | |
| 	*/
 | |
| 
 | |
| 	TOSERVER_INVENTORY_FIELDS = 0x3c,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 		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 command
 | |
| 		u16 number of files requested
 | |
| 		for each file {
 | |
| 			u16 length of name
 | |
| 			string name
 | |
| 		}
 | |
| 	 */
 | |
| 
 | |
| 	TOSERVER_RECEIVED_MEDIA = 0x41,
 | |
| 	/*
 | |
| 		u16 command
 | |
| 	*/
 | |
| };
 | |
| 
 | |
| #endif
 | |
| 
 |