summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/ClientHandle.cpp13
-rw-r--r--source/ClientHandle.h1
-rw-r--r--source/Protocol/Protocol16x.cpp32
-rw-r--r--source/Protocol/Protocol16x.h6
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;
} ;