summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Chunk.cpp13
-rw-r--r--src/ChunkSender.cpp30
-rw-r--r--src/ChunkSender.h2
3 files changed, 24 insertions, 21 deletions
diff --git a/src/Chunk.cpp b/src/Chunk.cpp
index 215de2c7c..e5b4d83d7 100644
--- a/src/Chunk.cpp
+++ b/src/Chunk.cpp
@@ -1707,19 +1707,6 @@ bool cChunk::AddClient(cClientHandle * a_Client)
}
m_LoadedByClient.push_back(a_Client);
-
- for (cEntityList::iterator itr = m_Entities.begin(); itr != m_Entities.end(); ++itr)
- {
- /*
- // DEBUG:
- LOGD("cChunk: Entity #%d (%s) at [%i, %i, %i] spawning for player \"%s\"",
- (*itr)->GetUniqueID(), (*itr)->GetClass(),
- m_PosX, m_PosY, m_PosZ,
- a_Client->GetUsername().c_str()
- );
- */
- (*itr)->SpawnOn(*a_Client);
- }
return true;
}
diff --git a/src/ChunkSender.cpp b/src/ChunkSender.cpp
index ee079e430..3c4c565a3 100644
--- a/src/ChunkSender.cpp
+++ b/src/ChunkSender.cpp
@@ -247,22 +247,38 @@ void cChunkSender::SendChunk(int a_ChunkX, int a_ChunkZ, std::unordered_set<cCli
}
cChunkDataSerializer Data(m_Data, m_BiomeMap, m_World.GetDimension());
- for (const auto client : a_Clients)
+ for (const auto Client : a_Clients)
{
// Send:
- client->SendChunkData(a_ChunkX, a_ChunkZ, Data);
+ Client->SendChunkData(a_ChunkX, a_ChunkZ, Data);
// Send block-entity packets:
for (const auto & Pos : m_BlockEntities)
{
- m_World.SendBlockEntity(Pos.x, Pos.y, Pos.z, *client);
+ m_World.SendBlockEntity(Pos.x, Pos.y, Pos.z, *Client);
} // for itr - m_Packets[]
+ // Send entity packets:
+ for (const auto EntityID : m_EntityIDs)
+ {
+ m_World.DoWithEntityByID(EntityID, [Client](cEntity & a_Entity)
+ {
+ /*
+ // DEBUG:
+ LOGD("cChunkSender: Entity #%d (%s) at [%f, %f, %f] spawning for player \"%s\"",
+ a_Entity.GetUniqueID(), a_Entity.GetClass(),
+ a_Entity.GetPosition().x, a_Entity.GetPosition().y, a_Entity.GetPosition().z,
+ Client->GetUsername().c_str()
+ );
+ */
+ a_Entity.SpawnOn(*Client);
+ return true;
+ });
+ }
}
m_Data.Clear();
m_BlockEntities.clear();
-
- // TODO: Send entity spawn packets
+ m_EntityIDs.clear();
}
@@ -278,9 +294,9 @@ void cChunkSender::BlockEntity(cBlockEntity * a_Entity)
-void cChunkSender::Entity(cEntity *)
+void cChunkSender::Entity(cEntity * a_Entity)
{
- // Nothing needed yet, perhaps in the future when we save entities into chunks we'd like to send them upon load, too ;)
+ m_EntityIDs.push_back(a_Entity->GetUniqueID());
}
diff --git a/src/ChunkSender.h b/src/ChunkSender.h
index bac09dd8b..baee32ec9 100644
--- a/src/ChunkSender.h
+++ b/src/ChunkSender.h
@@ -122,7 +122,7 @@ protected:
// NOTE that m_BlockData[] is inherited from the cChunkDataCollector
unsigned char m_BiomeMap[cChunkDef::Width * cChunkDef::Width];
std::vector<Vector3i> m_BlockEntities; // Coords of the block entities to send
- // TODO: sEntityIDs m_Entities; // Entity-IDs of the entities to send
+ std::vector<UInt32> m_EntityIDs; // Entity-IDs of the entities to send
// cIsThread override:
virtual void Execute(void) override;