From 942403de2bba7f49919f52e2f8547a9794763d98 Mon Sep 17 00:00:00 2001 From: Alexander Harkness Date: Sun, 3 May 2020 00:13:34 +0100 Subject: [PATCH] Modify pickup collection behaviour to correspond to vanilla. As documented here: https://www.spigotmc.org/threads/item-pickup-radius.337271/#post-3141146 --- src/Chunk.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/Chunk.cpp b/src/Chunk.cpp index f213dbf69..66c8cf4c3 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -1625,9 +1625,8 @@ void cChunk::SetAreaBiome(int a_MinRelX, int a_MaxRelX, int a_MinRelZ, int a_Max void cChunk::CollectPickupsByPlayer(cPlayer & a_Player) { - double PosX = a_Player.GetPosX(); - double PosY = a_Player.GetPosY(); - double PosZ = a_Player.GetPosZ(); + auto BoundingBox = cBoundingBox(a_Player.GetPosition(), a_Player.GetWidth(), a_Player.GetHeight()); + BoundingBox.Expand(1, 0.5, 1); for (auto & Entity : m_Entities) { @@ -1635,11 +1634,8 @@ void cChunk::CollectPickupsByPlayer(cPlayer & a_Player) { continue; // Only pickups and projectiles can be picked up } - float DiffX = static_cast(Entity->GetPosX() - PosX); - float DiffY = static_cast(Entity->GetPosY() - PosY); - float DiffZ = static_cast(Entity->GetPosZ() - PosZ); - float SqrDist = DiffX * DiffX + DiffY * DiffY + DiffZ * DiffZ; - if (SqrDist < 1.5f * 1.5f) // 1.5 block + + if (BoundingBox.IsInside(Entity->GetPosition())) { /* LOG("Pickup %d being collected by player \"%s\", distance %f", @@ -1656,14 +1652,6 @@ void cChunk::CollectPickupsByPlayer(cPlayer & a_Player) static_cast(*Entity).CollectedBy(a_Player); } } - else if (SqrDist < 5 * 5) - { - /* - LOG("Pickup %d close to player \"%s\", but still too far to collect: %f", - (*itr)->GetUniqueID(), a_Player->GetName().c_str(), SqrDist - ); - */ - } } }