2013-07-29 07:13:03 -04:00
// Protocol125.h
// Interfaces to the cProtocol125 class representing the release 1.2.5 protocol (#29)
# pragma once
# include "Protocol.h"
# include "../ByteBuffer.h"
2014-03-09 12:48:17 -04:00
# include "../Entities/Painting.h"
2013-07-29 07:13:03 -04:00
class cProtocol125 :
public cProtocol
{
typedef cProtocol super ;
public :
cProtocol125 ( cClientHandle * a_Client ) ;
/// Called when client sends some data:
2014-03-07 14:04:25 -05:00
virtual void DataReceived ( const char * a_Data , size_t a_Size ) override ;
2013-07-29 07:13:03 -04:00
/// Sending stuff to clients (alphabetically sorted):
2013-07-30 16:48:59 -04:00
virtual void SendAttachEntity ( const cEntity & a_Entity , const cEntity * a_Vehicle ) override ;
virtual void SendBlockAction ( int a_BlockX , int a_BlockY , int a_BlockZ , char a_Byte1 , char a_Byte2 , BLOCKTYPE a_BlockType ) override ;
virtual void SendBlockBreakAnim ( int a_EntityID , int a_BlockX , int a_BlockY , int a_BlockZ , char a_Stage ) override ;
virtual void SendBlockChange ( int a_BlockX , int a_BlockY , int a_BlockZ , BLOCKTYPE a_BlockType , NIBBLETYPE a_BlockMeta ) override ;
virtual void SendBlockChanges ( int a_ChunkX , int a_ChunkZ , const sSetBlockVector & a_Changes ) override ;
virtual void SendChat ( const AString & a_Message ) override ;
2014-02-15 17:16:44 -05:00
virtual void SendChat ( const cCompositeChat & a_Message ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendChunkData ( int a_ChunkX , int a_ChunkZ , cChunkDataSerializer & a_Serializer ) override ;
2014-06-27 14:56:29 -04:00
virtual void SendCollectEntity ( const cEntity & a_Entity , const cPlayer & a_Player ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendDestroyEntity ( const cEntity & a_Entity ) override ;
virtual void SendDisconnect ( const AString & a_Reason ) override ;
virtual void SendEditSign ( int a_BlockX , int a_BlockY , int a_BlockZ ) override ; ///< Request the client to open up the sign editor for the sign (1.6+)
2013-12-14 12:03:00 -05:00
virtual void SendEntityEffect ( const cEntity & a_Entity , int a_EffectID , int a_Amplifier , short a_Duration ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendEntityEquipment ( const cEntity & a_Entity , short a_SlotNum , const cItem & a_Item ) override ;
virtual void SendEntityHeadLook ( const cEntity & a_Entity ) override ;
virtual void SendEntityLook ( const cEntity & a_Entity ) override ;
virtual void SendEntityMetadata ( const cEntity & a_Entity ) override ;
virtual void SendEntityProperties ( const cEntity & a_Entity ) override ;
virtual void SendEntityRelMove ( const cEntity & a_Entity , char a_RelX , char a_RelY , char a_RelZ ) override ;
virtual void SendEntityRelMoveLook ( const cEntity & a_Entity , char a_RelX , char a_RelY , char a_RelZ ) override ;
virtual void SendEntityStatus ( const cEntity & a_Entity , char a_Status ) override ;
virtual void SendEntityVelocity ( const cEntity & a_Entity ) override ;
virtual void SendExplosion ( double a_BlockX , double a_BlockY , double a_BlockZ , float a_Radius , const cVector3iArray & a_BlocksAffected , const Vector3d & a_PlayerMotion ) override ;
virtual void SendGameMode ( eGameMode a_GameMode ) override ;
virtual void SendHealth ( void ) override ;
virtual void SendInventorySlot ( char a_WindowID , short a_SlotNum , const cItem & a_Item ) override ;
virtual void SendKeepAlive ( int a_PingID ) override ;
virtual void SendLogin ( const cPlayer & a_Player , const cWorld & a_World ) override ;
2014-04-14 16:52:59 -04:00
virtual void SendLoginSuccess ( void ) override ;
2014-02-13 10:13:09 -05:00
virtual void SendMapColumn ( int a_ID , int a_X , int a_Y , const Byte * a_Colors , unsigned int a_Length ) override ;
2014-02-18 13:50:08 -05:00
virtual void SendMapDecorators ( int a_ID , const cMapDecoratorList & a_Decorators ) override ;
2014-04-14 16:52:59 -04:00
virtual void SendMapInfo ( int a_ID , unsigned int a_Scale ) override ;
2013-12-22 08:45:25 -05:00
virtual void SendParticleEffect ( const AString & a_ParticleName , float a_SrcX , float a_SrcY , float a_SrcZ , float a_OffsetX , float a_OffsetY , float a_OffsetZ , float a_ParticleData , int a_ParticleAmmount ) override ;
2014-04-14 16:52:59 -04:00
virtual void SendPaintingSpawn ( const cPainting & a_Painting ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendPickupSpawn ( const cPickup & a_Pickup ) override ;
2013-11-01 11:20:15 -04:00
virtual void SendPlayerAbilities ( void ) override { } // This protocol doesn't support such message
2013-12-06 18:47:07 -05:00
virtual void SendEntityAnimation ( const cEntity & a_Entity , char a_Animation ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendPlayerListItem ( const cPlayer & a_Player , bool a_IsOnline ) override ;
virtual void SendPlayerMaxSpeed ( void ) override ;
virtual void SendPlayerMoveLook ( void ) override ;
virtual void SendPlayerPosition ( void ) override ;
virtual void SendPlayerSpawn ( const cPlayer & a_Player ) override ;
2014-01-09 05:39:42 -05:00
virtual void SendPluginMessage ( const AString & a_Channel , const AString & a_Message ) override ;
2013-12-14 12:03:00 -05:00
virtual void SendRemoveEntityEffect ( const cEntity & a_Entity , int a_EffectID ) override ;
2014-07-18 15:12:27 -04:00
virtual void SendRespawn ( eDimension a_Dimension , bool a_ShouldIgnoreDimensionChecks ) override ;
2013-11-15 10:32:04 -05:00
virtual void SendExperience ( void ) override ;
2013-11-25 15:43:43 -05:00
virtual void SendExperienceOrb ( const cExpOrb & a_ExpOrb ) override ;
2014-04-14 16:52:59 -04:00
virtual void SendScoreboardObjective ( const AString & a_Name , const AString & a_DisplayName , Byte a_Mode ) override ;
2014-07-17 16:15:34 -04:00
virtual void SendScoreUpdate ( const AString & a_Objective , const AString & a_Player , cObjective : : Score a_Score , Byte a_Mode ) override { } // This protocol doesn't support such message
virtual void SendDisplayObjective ( const AString & a_Objective , cScoreboard : : eDisplaySlot a_Display ) override { } // This protocol doesn't support such message
2014-07-12 20:08:02 -04:00
virtual void SendSoundEffect ( const AString & a_SoundName , double a_X , double a_Y , double a_Z , float a_Volume , float a_Pitch ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendSoundParticleEffect ( int a_EffectID , int a_SrcX , int a_SrcY , int a_SrcZ , int a_Data ) override ;
virtual void SendSpawnFallingBlock ( const cFallingBlock & a_FallingBlock ) override ;
virtual void SendSpawnMob ( const cMonster & a_Mob ) override ;
virtual void SendSpawnObject ( const cEntity & a_Entity , char a_ObjectType , int a_ObjectData , Byte a_Yaw , Byte a_Pitch ) override ;
2013-08-29 08:47:22 -04:00
virtual void SendSpawnVehicle ( const cEntity & a_Vehicle , char a_VehicleType , char a_VehicleSubType ) override ;
2014-05-11 07:57:06 -04:00
virtual void SendStatistics ( const cStatManager & a_Manager ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendTabCompletionResults ( const AStringVector & a_Results ) override ;
virtual void SendTeleportEntity ( const cEntity & a_Entity ) override ;
virtual void SendThunderbolt ( int a_BlockX , int a_BlockY , int a_BlockZ ) override ;
virtual void SendTimeUpdate ( Int64 a_WorldAge , Int64 a_TimeOfDay ) override ;
virtual void SendUnloadChunk ( int a_ChunkX , int a_ChunkZ ) override ;
2014-07-22 18:36:13 -04:00
virtual void SendUpdateBlockEntity ( cBlockEntity & a_BlockEntity ) override { }
2013-07-30 16:48:59 -04:00
virtual void SendUpdateSign ( int a_BlockX , int a_BlockY , int a_BlockZ , const AString & a_Line1 , const AString & a_Line2 , const AString & a_Line3 , const AString & a_Line4 ) override ;
2014-07-21 09:19:48 -04:00
virtual void SendUseBed ( const cEntity & a_Entity , int a_BlockX , int a_BlockY , int a_BlockZ ) override ;
2013-07-30 16:48:59 -04:00
virtual void SendWeather ( eWeather a_Weather ) override ;
2014-01-21 08:58:17 -05:00
virtual void SendWholeInventory ( const cWindow & a_Window ) override ;
virtual void SendWindowClose ( const cWindow & a_Window ) override ;
2013-11-08 15:32:14 -05:00
virtual void SendWindowOpen ( const cWindow & a_Window ) override ;
2014-05-01 16:58:58 -04:00
virtual void SendWindowProperty ( const cWindow & a_Window , int a_Property , int a_Value ) override ;
2013-07-29 07:13:03 -04:00
virtual AString GetAuthServerID ( void ) override ;
protected :
/// Results of packet-parsing:
2014-08-03 01:56:08 -04:00
enum eParseResult
2014-07-19 09:23:40 -04:00
{
2013-07-29 07:13:03 -04:00
PARSE_OK = 1 ,
PARSE_ERROR = - 1 ,
PARSE_UNKNOWN = - 2 ,
PARSE_INCOMPLETE = - 3 ,
} ;
2013-10-30 18:24:46 -04:00
cByteBuffer m_ReceivedData ; ///< Buffer for the received data
2013-07-29 07:13:03 -04:00
2013-10-30 18:24:46 -04:00
AString m_Username ; ///< Stored in ParseHandshake(), compared to Login username
2014-06-08 15:58:08 -04:00
/** The dimension that was last sent to a player in a Respawn or Login packet.
Used to avoid Respawning into the same dimension , which confuses the client . */
eDimension m_LastSentDimension ;
2013-07-29 07:13:03 -04:00
2014-04-04 04:13:25 -04:00
virtual void SendData ( const char * a_Data , size_t a_Size ) override ;
2013-07-29 07:13:03 -04:00
/// Sends the Handshake packet
void SendHandshake ( const AString & a_ConnectionHash ) ;
2014-07-21 09:19:48 -04:00
/// Parse the packet of the specified type from m_ReceivedData (switch into ParseXYZ())
2013-07-29 07:13:03 -04:00
virtual int ParsePacket ( unsigned char a_PacketType ) ;
// Specific packet parsers:
virtual int ParseArmAnim ( void ) ;
virtual int ParseBlockDig ( void ) ;
virtual int ParseBlockPlace ( void ) ;
virtual int ParseChat ( void ) ;
virtual int ParseCreativeInventoryAction ( void ) ;
virtual int ParseDisconnect ( void ) ;
virtual int ParseEntityAction ( void ) ;
virtual int ParseHandshake ( void ) ;
virtual int ParseKeepAlive ( void ) ;
virtual int ParseLogin ( void ) ;
virtual int ParsePing ( void ) ;
virtual int ParsePlayerAbilities ( void ) ;
virtual int ParsePlayerLook ( void ) ;
virtual int ParsePlayerMoveLook ( void ) ;
virtual int ParsePlayerOnGround ( void ) ;
virtual int ParsePlayerPosition ( void ) ;
virtual int ParsePluginMessage ( void ) ;
virtual int ParseRespawn ( void ) ;
virtual int ParseSlotSelected ( void ) ;
virtual int ParseUpdateSign ( void ) ;
virtual int ParseUseEntity ( void ) ;
2014-01-31 13:46:51 -05:00
virtual int ParseEnchantItem ( void ) ;
2013-07-29 07:13:03 -04:00
virtual int ParseWindowClick ( void ) ;
virtual int ParseWindowClose ( void ) ;
// Utility functions:
/// Writes a "pre-chunk" packet
void SendPreChunk ( int a_ChunkX , int a_ChunkZ , bool a_ShouldLoad ) ;
/// Writes a "set window items" packet with the specified params
void SendWindowSlots ( char a_WindowID , int a_NumItems , const cItem * a_Items ) ;
/// Writes one item, "slot" as the protocol wiki calls it
virtual void WriteItem ( const cItem & a_Item ) ;
/// Parses one item, "slot" as the protocol wiki calls it, from m_ReceivedData; returns the usual ParsePacket() codes
virtual int ParseItem ( cItem & a_Item ) ;
2013-10-10 19:41:54 -04:00
/// Writes the COMMON entity metadata
void WriteCommonMetadata ( const cEntity & a_Entity ) ;
/// Writes normal entity metadata
void WriteEntityMetadata ( const cEntity & a_Entity ) ;
/// Writes mobile entity metadata
void WriteMobMetadata ( const cMonster & a_Mob ) ;
2013-07-29 07:13:03 -04:00
} ;