From f49f90906c76f4581b1caa225ee841fd60b1c04d Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Tue, 21 Apr 2020 23:16:28 +0100 Subject: [PATCH] Reduced packet spam when entities idle * Try not to send look packets when nothing's changed. --- src/Entities/Entity.cpp | 4 ++-- src/Mobs/Monster.cpp | 10 +++++++++- src/Protocol/Protocol_1_9.cpp | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 5c444f74a..ae468d25c 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -39,8 +39,8 @@ cEntity::cEntity(eEntityType a_EntityType, Vector3d a_Pos, double a_Width, doubl m_MaxHealth(1), m_AttachedTo(nullptr), m_Attachee(nullptr), - m_bDirtyHead(true), - m_bDirtyOrientation(true), + m_bDirtyHead(false), + m_bDirtyOrientation(false), m_bHasSentNoSpeed(true), m_bOnGround(false), m_Gravity(-9.81f), diff --git a/src/Mobs/Monster.cpp b/src/Mobs/Monster.cpp index 75bda197f..1c3b3a45e 100644 --- a/src/Mobs/Monster.cpp +++ b/src/Mobs/Monster.cpp @@ -490,14 +490,22 @@ void cMonster::CalcLeashActions(std::chrono::milliseconds a_Dt) void cMonster::SetPitchAndYawFromDestination(bool a_IsFollowingPath) { Vector3d BodyDistance; - if (!a_IsFollowingPath && (GetTarget() != nullptr)) + if (!a_IsFollowingPath) { + if (GetTarget() == nullptr) + { + // Avoid dirtying head position when nothing will change + // Thus avoids creating unnecessary network traffic + return; + } + BodyDistance = GetTarget()->GetPosition() - GetPosition(); } else { BodyDistance = m_NextWayPointPosition - GetPosition(); } + double BodyRotation, BodyPitch; BodyDistance.Normalize(); VectorToEuler(BodyDistance.x, BodyDistance.y, BodyDistance.z, BodyRotation, BodyPitch); diff --git a/src/Protocol/Protocol_1_9.cpp b/src/Protocol/Protocol_1_9.cpp index dfa371a62..8327eaf40 100644 --- a/src/Protocol/Protocol_1_9.cpp +++ b/src/Protocol/Protocol_1_9.cpp @@ -446,8 +446,8 @@ void cProtocol_1_9_0::SendSpawnMob(const cMonster & a_Mob) Pkt.WriteBEDouble(LastSentPos.x); Pkt.WriteBEDouble(LastSentPos.y); Pkt.WriteBEDouble(LastSentPos.z); + Pkt.WriteByteAngle(a_Mob.GetHeadYaw()); // Doesn't seem to be used Pkt.WriteByteAngle(a_Mob.GetPitch()); - Pkt.WriteByteAngle(a_Mob.GetHeadYaw()); Pkt.WriteByteAngle(a_Mob.GetYaw()); Pkt.WriteBEInt16(static_cast(a_Mob.GetSpeedX() * 400)); Pkt.WriteBEInt16(static_cast(a_Mob.GetSpeedY() * 400));