diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/ClientHandle.cpp | 13 | ||||
-rw-r--r-- | source/ClientHandle.h | 1 | ||||
-rw-r--r-- | source/Protocol/Protocol16x.cpp | 32 | ||||
-rw-r--r-- | source/Protocol/Protocol16x.h | 6 |
4 files changed, 52 insertions, 0 deletions
diff --git a/source/ClientHandle.cpp b/source/ClientHandle.cpp index 138209a73..4d4f40745 100644 --- a/source/ClientHandle.cpp +++ b/source/ClientHandle.cpp @@ -1200,6 +1200,19 @@ void cClientHandle::HandleEntityAction(int a_EntityID, char a_ActionID) +void cClientHandle::HandleUnmount(void) +{ + if (m_Player == NULL) + { + return; + } + m_Player->Detach(); +} + + + + + void cClientHandle::SendData(const char * a_Data, int a_Size) { { diff --git a/source/ClientHandle.h b/source/ClientHandle.h index c02924ebf..053174a56 100644 --- a/source/ClientHandle.h +++ b/source/ClientHandle.h @@ -178,6 +178,7 @@ public: void HandleKeepAlive (int a_KeepAliveID); bool HandleHandshake (const AString & a_Username); void HandleEntityAction (int a_EntityID, char a_ActionID); + void HandleUnmount (void); /** Called when the protocol has finished logging the user in. Return true to allow the user in; false to kick them. diff --git a/source/Protocol/Protocol16x.cpp b/source/Protocol/Protocol16x.cpp index 8c93d6052..d7237b47a 100644 --- a/source/Protocol/Protocol16x.cpp +++ b/source/Protocol/Protocol16x.cpp @@ -37,6 +37,7 @@ enum {
PACKET_CHAT = 0x03,
PACKET_UPDATE_HEALTH = 0x08,
+ PACKET_STEER_VEHICLE = 0x1b,
PACKET_ATTACH_ENTITY = 0x27,
PACKET_ENTITY_PROPERTIES = 0x2c,
PACKET_WINDOW_OPEN = 0x64,
@@ -161,3 +162,34 @@ int cProtocol161::ParsePlayerAbilities(void) +
+int cProtocol161::ParseSteerVehicle(void)
+{
+ HANDLE_PACKET_READ(ReadBEFloat, float, Sideways);
+ HANDLE_PACKET_READ(ReadBEFloat, float, Forward);
+ HANDLE_PACKET_READ(ReadBool, bool, Jump);
+ HANDLE_PACKET_READ(ReadBool, bool, Unmount);
+ // TODO: m_Client->HandleSteerVehicle(...);
+ if (Unmount)
+ {
+ m_Client->HandleUnmount();
+ }
+ return PARSE_OK;
+}
+
+
+
+
+
+int cProtocol161::ParsePacket(unsigned char a_PacketType)
+{
+ switch (a_PacketType)
+ {
+ case PACKET_STEER_VEHICLE: return ParseSteerVehicle();
+ default: return super::ParsePacket(a_PacketType);
+ }
+}
+
+
+
+
diff --git a/source/Protocol/Protocol16x.h b/source/Protocol/Protocol16x.h index 5bc924c6d..b3d051a14 100644 --- a/source/Protocol/Protocol16x.h +++ b/source/Protocol/Protocol16x.h @@ -37,6 +37,12 @@ public: virtual int ParseEntityAction (void) override;
virtual int ParsePlayerAbilities(void) override;
+
+ // New packets:
+ virtual int ParseSteerVehicle(void);
+
+ // Enable new packets' handling
+ virtual int ParsePacket(unsigned char a_PacketType) override;
} ;
|