summaryrefslogtreecommitdiffstats
path: root/src/Chunk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Chunk.cpp')
-rw-r--r--src/Chunk.cpp18
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[]
+ }
}