diff options
Diffstat (limited to 'src/Chunk.cpp')
-rw-r--r-- | src/Chunk.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/Chunk.cpp b/src/Chunk.cpp index e4a4dd661..2140bf7f1 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -812,23 +812,21 @@ void cChunk::BroadcastPendingBlockChanges(void) void cChunk::CheckBlocks() { - if (m_ToTickBlocks.empty()) - { - return; - } - std::vector<Vector3i> ToTickBlocks; - std::swap(m_ToTickBlocks, ToTickBlocks); - cChunkInterface ChunkInterface(m_World->GetChunkMap()); cBlockInServerPluginInterface PluginInterface(*m_World); - for (std::vector<Vector3i>::const_iterator itr = ToTickBlocks.begin(), end = ToTickBlocks.end(); itr != end; ++itr) + // Process a limited number of blocks since cBlockHandler::Check may queue more to tick + auto Count = m_ToTickBlocks.size(); + + while (Count != 0) { - Vector3i Pos = (*itr); + Vector3i Pos = m_ToTickBlocks.front(); + m_ToTickBlocks.pop(); + Count--; cBlockHandler * Handler = BlockHandler(GetBlock(Pos)); Handler->Check(ChunkInterface, PluginInterface, Pos, *this); - } // for itr - ToTickBlocks[] + } } |