ProtoProxy: Added PACKET_SPAWN_NAMED_ENTITY and PACKET_PLAYER_ANIMATION parsing
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1552 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
9c4f8f033c
commit
5fe0c3d375
@ -114,8 +114,9 @@ enum
|
|||||||
PACKET_BLOCK_DIG = 0x0e,
|
PACKET_BLOCK_DIG = 0x0e,
|
||||||
PACKET_BLOCK_PLACE = 0x0f,
|
PACKET_BLOCK_PLACE = 0x0f,
|
||||||
PACKET_SLOT_SELECT = 0x10,
|
PACKET_SLOT_SELECT = 0x10,
|
||||||
PACKET_ANIMATION = 0x12,
|
PACKET_PLAYER_ANIMATION = 0x12,
|
||||||
PACKET_ENTITY_ACTION = 0x13,
|
PACKET_ENTITY_ACTION = 0x13,
|
||||||
|
PACKET_SPAWN_NAMED_ENTITY = 0x14,
|
||||||
PACKET_SPAWN_PICKUP = 0x15,
|
PACKET_SPAWN_PICKUP = 0x15,
|
||||||
PACKET_COLLECT_PICKUP = 0x16,
|
PACKET_COLLECT_PICKUP = 0x16,
|
||||||
PACKET_SPAWN_OBJECT_VEHICLE = 0x17,
|
PACKET_SPAWN_OBJECT_VEHICLE = 0x17,
|
||||||
@ -315,6 +316,15 @@ void cConnection::DataLog(const void * a_Data, int a_Size, const char * a_Format
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cConnection::LogFlush(void)
|
||||||
|
{
|
||||||
|
fflush(m_LogFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cConnection::ConnectToServer(void)
|
bool cConnection::ConnectToServer(void)
|
||||||
{
|
{
|
||||||
m_ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
m_ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||||
@ -509,7 +519,6 @@ bool cConnection::DecodeClientsPackets(const char * a_Data, int a_Size)
|
|||||||
m_ClientBuffer.ReadByte(PacketType);
|
m_ClientBuffer.ReadByte(PacketType);
|
||||||
switch (PacketType)
|
switch (PacketType)
|
||||||
{
|
{
|
||||||
case PACKET_ANIMATION: HANDLE_CLIENT_READ(HandleClientAnimation); break;
|
|
||||||
case PACKET_BLOCK_DIG: HANDLE_CLIENT_READ(HandleClientBlockDig); break;
|
case PACKET_BLOCK_DIG: HANDLE_CLIENT_READ(HandleClientBlockDig); break;
|
||||||
case PACKET_BLOCK_PLACE: HANDLE_CLIENT_READ(HandleClientBlockPlace); break;
|
case PACKET_BLOCK_PLACE: HANDLE_CLIENT_READ(HandleClientBlockPlace); break;
|
||||||
case PACKET_CHAT_MESSAGE: HANDLE_CLIENT_READ(HandleClientChatMessage); break;
|
case PACKET_CHAT_MESSAGE: HANDLE_CLIENT_READ(HandleClientChatMessage); break;
|
||||||
@ -522,6 +531,7 @@ bool cConnection::DecodeClientsPackets(const char * a_Data, int a_Size)
|
|||||||
case PACKET_LOCALE_AND_VIEW: HANDLE_CLIENT_READ(HandleClientLocaleAndView); break;
|
case PACKET_LOCALE_AND_VIEW: HANDLE_CLIENT_READ(HandleClientLocaleAndView); break;
|
||||||
case PACKET_PING: HANDLE_CLIENT_READ(HandleClientPing); break;
|
case PACKET_PING: HANDLE_CLIENT_READ(HandleClientPing); break;
|
||||||
case PACKET_PLAYER_ABILITIES: HANDLE_CLIENT_READ(HandleClientPlayerAbilities); break;
|
case PACKET_PLAYER_ABILITIES: HANDLE_CLIENT_READ(HandleClientPlayerAbilities); break;
|
||||||
|
case PACKET_PLAYER_ANIMATION: HANDLE_CLIENT_READ(HandleClientAnimation); break;
|
||||||
case PACKET_PLAYER_LOOK: HANDLE_CLIENT_READ(HandleClientPlayerLook); break;
|
case PACKET_PLAYER_LOOK: HANDLE_CLIENT_READ(HandleClientPlayerLook); break;
|
||||||
case PACKET_PLAYER_ON_GROUND: HANDLE_CLIENT_READ(HandleClientPlayerOnGround); break;
|
case PACKET_PLAYER_ON_GROUND: HANDLE_CLIENT_READ(HandleClientPlayerOnGround); break;
|
||||||
case PACKET_PLAYER_POSITION: HANDLE_CLIENT_READ(HandleClientPlayerPosition); break;
|
case PACKET_PLAYER_POSITION: HANDLE_CLIENT_READ(HandleClientPlayerPosition); break;
|
||||||
@ -589,6 +599,7 @@ bool cConnection::DecodeServersPackets(const char * a_Data, int a_Size)
|
|||||||
unsigned char PacketType;
|
unsigned char PacketType;
|
||||||
m_ServerBuffer.ReadByte(PacketType);
|
m_ServerBuffer.ReadByte(PacketType);
|
||||||
Log("Decoding server's packets, there are now %d bytes in the queue; next packet is 0x%x", m_ServerBuffer.GetReadableSpace(), PacketType);
|
Log("Decoding server's packets, there are now %d bytes in the queue; next packet is 0x%x", m_ServerBuffer.GetReadableSpace(), PacketType);
|
||||||
|
LogFlush();
|
||||||
switch (PacketType)
|
switch (PacketType)
|
||||||
{
|
{
|
||||||
case PACKET_ATTACH_ENTITY: HANDLE_SERVER_READ(HandleServerAttachEntity); break;
|
case PACKET_ATTACH_ENTITY: HANDLE_SERVER_READ(HandleServerAttachEntity); break;
|
||||||
@ -620,6 +631,7 @@ bool cConnection::DecodeServersPackets(const char * a_Data, int a_Size)
|
|||||||
case PACKET_MULTI_BLOCK_CHANGE: HANDLE_SERVER_READ(HandleServerMultiBlockChange); break;
|
case PACKET_MULTI_BLOCK_CHANGE: HANDLE_SERVER_READ(HandleServerMultiBlockChange); break;
|
||||||
case PACKET_NAMED_SOUND_EFFECT: HANDLE_SERVER_READ(HandleServerNamedSoundEffect); break;
|
case PACKET_NAMED_SOUND_EFFECT: HANDLE_SERVER_READ(HandleServerNamedSoundEffect); break;
|
||||||
case PACKET_PLAYER_ABILITIES: HANDLE_SERVER_READ(HandleServerPlayerAbilities); break;
|
case PACKET_PLAYER_ABILITIES: HANDLE_SERVER_READ(HandleServerPlayerAbilities); break;
|
||||||
|
case PACKET_PLAYER_ANIMATION: HANDLE_SERVER_READ(HandleServerPlayerAnimation); break;
|
||||||
case PACKET_PLAYER_LIST_ITEM: HANDLE_SERVER_READ(HandleServerPlayerListItem); break;
|
case PACKET_PLAYER_LIST_ITEM: HANDLE_SERVER_READ(HandleServerPlayerListItem); break;
|
||||||
case PACKET_PLAYER_POSITION_LOOK: HANDLE_SERVER_READ(HandleServerPlayerPositionLook); break;
|
case PACKET_PLAYER_POSITION_LOOK: HANDLE_SERVER_READ(HandleServerPlayerPositionLook); break;
|
||||||
case PACKET_SET_EXPERIENCE: HANDLE_SERVER_READ(HandleServerSetExperience); break;
|
case PACKET_SET_EXPERIENCE: HANDLE_SERVER_READ(HandleServerSetExperience); break;
|
||||||
@ -627,6 +639,7 @@ bool cConnection::DecodeServersPackets(const char * a_Data, int a_Size)
|
|||||||
case PACKET_SLOT_SELECT: HANDLE_SERVER_READ(HandleServerSlotSelect); break;
|
case PACKET_SLOT_SELECT: HANDLE_SERVER_READ(HandleServerSlotSelect); break;
|
||||||
case PACKET_SOUND_EFFECT: HANDLE_SERVER_READ(HandleServerSoundEffect); break;
|
case PACKET_SOUND_EFFECT: HANDLE_SERVER_READ(HandleServerSoundEffect); break;
|
||||||
case PACKET_SPAWN_MOB: HANDLE_SERVER_READ(HandleServerSpawnMob); break;
|
case PACKET_SPAWN_MOB: HANDLE_SERVER_READ(HandleServerSpawnMob); break;
|
||||||
|
case PACKET_SPAWN_NAMED_ENTITY: HANDLE_SERVER_READ(HandleServerSpawnNamedEntity); break;
|
||||||
case PACKET_SPAWN_OBJECT_VEHICLE: HANDLE_SERVER_READ(HandleServerSpawnObjectVehicle); break;
|
case PACKET_SPAWN_OBJECT_VEHICLE: HANDLE_SERVER_READ(HandleServerSpawnObjectVehicle); break;
|
||||||
case PACKET_SPAWN_PAINTING: HANDLE_SERVER_READ(HandleServerSpawnPainting); break;
|
case PACKET_SPAWN_PAINTING: HANDLE_SERVER_READ(HandleServerSpawnPainting); break;
|
||||||
case PACKET_SPAWN_PICKUP: HANDLE_SERVER_READ(HandleServerSpawnPickup); break;
|
case PACKET_SPAWN_PICKUP: HANDLE_SERVER_READ(HandleServerSpawnPickup); break;
|
||||||
@ -1277,7 +1290,7 @@ bool cConnection::HandleServerEntityMetadata(void)
|
|||||||
CreateHexDump(HexDump, Metadata.data(), Metadata.size(), 32);
|
CreateHexDump(HexDump, Metadata.data(), Metadata.size(), 32);
|
||||||
Log("Received a PACKET_ENTITY_METADATA from the server:");
|
Log("Received a PACKET_ENTITY_METADATA from the server:");
|
||||||
Log(" EntityID = %d", EntityID);
|
Log(" EntityID = %d", EntityID);
|
||||||
Log(" Metadata, length = %d (0x%x): %s", Metadata.length(), Metadata.length(), HexDump.c_str());
|
Log(" Metadata, length = %d (0x%x):\n%s", Metadata.length(), Metadata.length(), HexDump.c_str());
|
||||||
LogMetadata(Metadata, 4);
|
LogMetadata(Metadata, 4);
|
||||||
COPY_TO_CLIENT();
|
COPY_TO_CLIENT();
|
||||||
return true;
|
return true;
|
||||||
@ -1649,6 +1662,21 @@ bool cConnection::HandleServerPlayerAbilities(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cConnection::HandleServerPlayerAnimation(void)
|
||||||
|
{
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, PlayerID);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, AnimationID);
|
||||||
|
Log("Received a PACKET_PLAYER_ANIMATION from the server:");
|
||||||
|
Log(" PlayerID: %d (0x%x)", PlayerID, PlayerID);
|
||||||
|
Log(" Animation: %d", AnimationID);
|
||||||
|
COPY_TO_CLIENT();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cConnection::HandleServerPlayerListItem(void)
|
bool cConnection::HandleServerPlayerListItem(void)
|
||||||
{
|
{
|
||||||
HANDLE_SERVER_PACKET_READ(ReadBEUTF16String16, AString, PlayerName);
|
HANDLE_SERVER_PACKET_READ(ReadBEUTF16String16, AString, PlayerName);
|
||||||
@ -1776,13 +1804,49 @@ bool cConnection::HandleServerSpawnMob(void)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
AString HexDump;
|
||||||
|
CreateHexDump(HexDump, Metadata.data(), Metadata.size(), 32);
|
||||||
Log("Received a PACKET_SPAWN_MOB from the server:");
|
Log("Received a PACKET_SPAWN_MOB from the server:");
|
||||||
Log(" EntityID = %d", EntityID);
|
Log(" EntityID = %d", EntityID);
|
||||||
Log(" MobType = %d", MobType);
|
Log(" MobType = %d", MobType);
|
||||||
Log(" Pos = <%d, %d, %d> ~ {%d, %d, %d}", PosX, PosY, PosZ, PosX / 32, PosY / 32, PosZ / 32);
|
Log(" Pos = <%d, %d, %d> ~ {%d, %d, %d}", PosX, PosY, PosZ, PosX / 32, PosY / 32, PosZ / 32);
|
||||||
Log(" Angles = [%d, %d, %d]", Yaw, Pitch, HeadYaw);
|
Log(" Angles = [%d, %d, %d]", Yaw, Pitch, HeadYaw);
|
||||||
Log(" Velocity = <%d, %d, %d>", VelocityX, VelocityY, VelocityZ);
|
Log(" Velocity = <%d, %d, %d>", VelocityX, VelocityY, VelocityZ);
|
||||||
Log(" Metadata size = %d", Metadata.size());
|
Log(" Metadata, length = %d (0x%x):\n%s", Metadata.length(), Metadata.length(), HexDump.c_str());
|
||||||
|
LogMetadata(Metadata, 4);
|
||||||
|
COPY_TO_CLIENT();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cConnection::HandleServerSpawnNamedEntity(void)
|
||||||
|
{
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, EntityID);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEUTF16String16, AString, EntityName);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, PosX);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, PosY);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEInt, int, PosZ);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, Yaw);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadByte, Byte, Pitch);
|
||||||
|
HANDLE_SERVER_PACKET_READ(ReadBEShort, short, CurrentItem);
|
||||||
|
AString Metadata;
|
||||||
|
if (!ParseMetadata(m_ServerBuffer, Metadata))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
AString HexDump;
|
||||||
|
CreateHexDump(HexDump, Metadata.data(), Metadata.size(), 32);
|
||||||
|
Log("Received a PACKET_SPAWN_NAMED_ENTITY from the server:");
|
||||||
|
Log(" EntityID = %d (0x%x)", EntityID, EntityID);
|
||||||
|
Log(" Name = %s", EntityName.c_str());
|
||||||
|
Log(" Pos = <%d, %d, %d> ~ {%d, %d, %d}", PosX, PosY, PosZ, PosX / 32, PosY / 32, PosZ / 32);
|
||||||
|
Log(" Rotation = <yaw %d, pitch %d>", Yaw, Pitch);
|
||||||
|
Log(" CurrentItem = %d", CurrentItem);
|
||||||
|
Log(" Metadata, length = %d (0x%x):\n%s", Metadata.length(), Metadata.length(), HexDump.c_str());
|
||||||
|
LogMetadata(Metadata, 4);
|
||||||
COPY_TO_CLIENT();
|
COPY_TO_CLIENT();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@ public:
|
|||||||
|
|
||||||
void Log(const char * a_Format, ...);
|
void Log(const char * a_Format, ...);
|
||||||
void DataLog(const void * a_Data, int a_Size, const char * a_Format, ...);
|
void DataLog(const void * a_Data, int a_Size, const char * a_Format, ...);
|
||||||
|
void LogFlush(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef CFB_Mode<AES>::Encryption Encryptor;
|
typedef CFB_Mode<AES>::Encryption Encryptor;
|
||||||
@ -157,6 +158,7 @@ protected:
|
|||||||
bool HandleServerMultiBlockChange(void);
|
bool HandleServerMultiBlockChange(void);
|
||||||
bool HandleServerNamedSoundEffect(void);
|
bool HandleServerNamedSoundEffect(void);
|
||||||
bool HandleServerPlayerAbilities(void);
|
bool HandleServerPlayerAbilities(void);
|
||||||
|
bool HandleServerPlayerAnimation(void);
|
||||||
bool HandleServerPlayerListItem(void);
|
bool HandleServerPlayerListItem(void);
|
||||||
bool HandleServerPlayerPositionLook(void);
|
bool HandleServerPlayerPositionLook(void);
|
||||||
bool HandleServerSetExperience(void);
|
bool HandleServerSetExperience(void);
|
||||||
@ -164,6 +166,7 @@ protected:
|
|||||||
bool HandleServerSlotSelect(void);
|
bool HandleServerSlotSelect(void);
|
||||||
bool HandleServerSoundEffect(void);
|
bool HandleServerSoundEffect(void);
|
||||||
bool HandleServerSpawnMob(void);
|
bool HandleServerSpawnMob(void);
|
||||||
|
bool HandleServerSpawnNamedEntity(void);
|
||||||
bool HandleServerSpawnObjectVehicle(void);
|
bool HandleServerSpawnObjectVehicle(void);
|
||||||
bool HandleServerSpawnPainting(void);
|
bool HandleServerSpawnPainting(void);
|
||||||
bool HandleServerSpawnPickup(void);
|
bool HandleServerSpawnPickup(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user