summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ClientHandle.cpp58
-rw-r--r--src/ClientHandle.h4
-rw-r--r--src/Protocol/Protocol125.cpp23
-rw-r--r--src/Protocol/Protocol16x.cpp23
-rw-r--r--src/Protocol/Protocol17x.cpp22
5 files changed, 98 insertions, 32 deletions
diff --git a/src/ClientHandle.cpp b/src/ClientHandle.cpp
index 870568cdf..79fdc5e04 100644
--- a/src/ClientHandle.cpp
+++ b/src/ClientHandle.cpp
@@ -1453,7 +1453,7 @@ bool cClientHandle::HandleHandshake(const AString & a_Username)
-void cClientHandle::HandleEntityAction(int a_EntityID, char a_ActionID)
+void cClientHandle::HandleEntityCrouch(int a_EntityID, bool a_IsCrouching)
{
if (a_EntityID != m_Player->GetUniqueID())
{
@@ -1461,35 +1461,37 @@ void cClientHandle::HandleEntityAction(int a_EntityID, char a_ActionID)
return;
}
- switch (a_ActionID)
+ m_Player->SetCrouch(a_IsCrouching);
+}
+
+
+
+
+
+void cClientHandle::HandleEntityLeaveBed(int a_EntityID)
+{
+ if (a_EntityID != m_Player->GetUniqueID())
{
- case 1: // Crouch
- {
- m_Player->SetCrouch(true);
- break;
- }
- case 2: // Uncrouch
- {
- m_Player->SetCrouch(false);
- break;
- }
- case 3: // Leave bed
- {
- m_Player->GetWorld()->BroadcastEntityAnimation(*m_Player, 2);
- break;
- }
- case 4: // Start sprinting
- {
- m_Player->SetSprint(true);
- break;
- }
- case 5: // Stop sprinting
- {
- m_Player->SetSprint(false);
- SendPlayerMaxSpeed();
- break;
- }
+ // We should only receive entity actions from the entity that is performing the action
+ return;
}
+
+ m_Player->GetWorld()->BroadcastEntityAnimation(*m_Player, 2);
+}
+
+
+
+
+
+void cClientHandle::HandleEntitySprinting(int a_EntityID, bool a_IsSprinting)
+{
+ if (a_EntityID != m_Player->GetUniqueID())
+ {
+ // We should only receive entity actions from the entity that is performing the action
+ return;
+ }
+
+ m_Player->SetSprint(a_IsSprinting);
}
diff --git a/src/ClientHandle.h b/src/ClientHandle.h
index 194533402..035fadfe4 100644
--- a/src/ClientHandle.h
+++ b/src/ClientHandle.h
@@ -188,7 +188,9 @@ public:
void HandleChat (const AString & a_Message);
void HandleCreativeInventory(short a_SlotNum, const cItem & a_HeldItem);
void HandleDisconnect (const AString & a_Reason);
- void HandleEntityAction (int a_EntityID, char a_ActionID);
+ void HandleEntityCrouch (int a_EntityID, bool a_IsCrouching);
+ void HandleEntityLeaveBed (int a_EntityID);
+ void HandleEntitySprinting (int a_EntityID, bool a_IsSprinting);
/** Called when the protocol handshake has been received (for protocol versions that support it;
otherwise the first instant when a username is received).
diff --git a/src/Protocol/Protocol125.cpp b/src/Protocol/Protocol125.cpp
index 3980350f5..556ed1d08 100644
--- a/src/Protocol/Protocol125.cpp
+++ b/src/Protocol/Protocol125.cpp
@@ -1375,7 +1375,28 @@ int cProtocol125::ParseEntityAction(void)
{
HANDLE_PACKET_READ(ReadBEInt, int, EntityID);
HANDLE_PACKET_READ(ReadChar, char, ActionID);
- m_Client->HandleEntityAction(EntityID, ActionID);
+
+ if (ActionID == 1) // Crouch
+ {
+ m_Client->HandleEntityCrouch(EntityID, true);
+ }
+ else if (ActionID == 2) // Uncrouch
+ {
+ m_Client->HandleEntityCrouch(EntityID, false);
+ }
+ else if (ActionID == 3) // Leave Bed
+ {
+ m_Client->HandleEntityLeaveBed(EntityID);
+ }
+ else if (ActionID == 4) // Start sprinting
+ {
+ m_Client->HandleEntitySprinting(EntityID, true);
+ }
+ else if (ActionID == 5) // Stop sprinting
+ {
+ m_Client->HandleEntitySprinting(EntityID, false);
+ }
+
return PARSE_OK;
}
diff --git a/src/Protocol/Protocol16x.cpp b/src/Protocol/Protocol16x.cpp
index cfa27b3c4..6a41a577f 100644
--- a/src/Protocol/Protocol16x.cpp
+++ b/src/Protocol/Protocol16x.cpp
@@ -184,7 +184,28 @@ int cProtocol161::ParseEntityAction(void)
HANDLE_PACKET_READ(ReadBEInt, int, EntityID);
HANDLE_PACKET_READ(ReadChar, char, ActionID);
HANDLE_PACKET_READ(ReadBEInt, int, UnknownHorseVal);
- m_Client->HandleEntityAction(EntityID, ActionID);
+
+ if (ActionID == 1) // Crouch
+ {
+ m_Client->HandleEntityCrouch(EntityID, true);
+ }
+ else if (ActionID == 2) // Uncrouch
+ {
+ m_Client->HandleEntityCrouch(EntityID, false);
+ }
+ else if (ActionID == 3) // Leave Bed
+ {
+ m_Client->HandleEntityLeaveBed(EntityID);
+ }
+ else if (ActionID == 4) // Start sprinting
+ {
+ m_Client->HandleEntitySprinting(EntityID, true);
+ }
+ else if (ActionID == 5) // Stop sprinting
+ {
+ m_Client->HandleEntitySprinting(EntityID, false);
+ }
+
return PARSE_OK;
}
diff --git a/src/Protocol/Protocol17x.cpp b/src/Protocol/Protocol17x.cpp
index 18646254f..19998a483 100644
--- a/src/Protocol/Protocol17x.cpp
+++ b/src/Protocol/Protocol17x.cpp
@@ -1732,7 +1732,27 @@ void cProtocol172::HandlePacketEntityAction(cByteBuffer & a_ByteBuffer)
HANDLE_READ(a_ByteBuffer, ReadBEInt, int, PlayerID);
HANDLE_READ(a_ByteBuffer, ReadByte, Byte, Action);
HANDLE_READ(a_ByteBuffer, ReadBEInt, int, JumpBoost);
- m_Client->HandleEntityAction(PlayerID, Action);
+
+ if (Action == 1) // Crouch
+ {
+ m_Client->HandleEntityCrouch(PlayerID, true);
+ }
+ else if (Action == 2) // Uncrouch
+ {
+ m_Client->HandleEntityCrouch(PlayerID, false);
+ }
+ else if (Action == 3) // Leave Bed
+ {
+ m_Client->HandleEntityLeaveBed(PlayerID);
+ }
+ else if (Action == 4) // Start sprinting
+ {
+ m_Client->HandleEntitySprinting(PlayerID, true);
+ }
+ else if (Action == 5) // Stop sprinting
+ {
+ m_Client->HandleEntitySprinting(PlayerID, false);
+ }
}