diff options
-rw-r--r-- | src/Chunk.cpp | 13 | ||||
-rw-r--r-- | src/ChunkSender.cpp | 30 | ||||
-rw-r--r-- | src/ChunkSender.h | 2 |
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; |