From 1e8cae641592cc4ae7b6f1b997c514f9d2be422b Mon Sep 17 00:00:00 2001 From: LogicParrot Date: Sun, 9 Oct 2016 15:46:09 +0300 Subject: cChunk::SetAlwaysTicked implies cChunk::stay (#3361) --- Server/Plugins/APIDump/APIDesc.lua | 2 +- src/Chunk.cpp | 2 ++ src/Chunk.h | 2 +- src/ChunkMap.cpp | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Server/Plugins/APIDump/APIDesc.lua b/Server/Plugins/APIDump/APIDesc.lua index 7817ec137..15f621711 100644 --- a/Server/Plugins/APIDump/APIDesc.lua +++ b/Server/Plugins/APIDump/APIDesc.lua @@ -16211,7 +16211,7 @@ function OnAllChunksAvailable() All return values from the callbacks are i Type = "boolean", }, }, - Notes = "Sets the chunk to always be ticked even when it doesn't contain any clients. IsAlwaysTicked set to true turns forced ticking on, set to false turns it off. Every call with 'true' should be paired with a later call with 'false', otherwise the ticking won't stop. Multiple actions can request ticking independently, the ticking will continue until the last call with 'false'. Note that when the chunk unloads, it loses the value of this flag.", + Notes = "Sets the chunk to always be ticked and loaded even when it doesn't contain any clients. IsAlwaysTicked set to true turns forced ticking on, set to false turns it off. Every call with 'true' should be paired with a later call with 'false', otherwise the ticking won't stop. Multiple actions can request ticking independently, the ticking will continue until the last call with 'false'." }, }, SetCommandBlockCommand = { diff --git a/src/Chunk.cpp b/src/Chunk.cpp index d833feea5..508fe355e 100644 --- a/src/Chunk.cpp +++ b/src/Chunk.cpp @@ -1728,10 +1728,12 @@ void cChunk::SetAlwaysTicked(bool a_AlwaysTicked) if (a_AlwaysTicked) { m_AlwaysTicked += 1; + Stay(a_AlwaysTicked); } else { m_AlwaysTicked -= 1; + Stay(a_AlwaysTicked); } } diff --git a/src/Chunk.h b/src/Chunk.h index 54e4a9502..398d33a5f 100644 --- a/src/Chunk.h +++ b/src/Chunk.h @@ -475,7 +475,7 @@ public: /** Increments (a_AlwaysTicked == true) or decrements (false) the m_AlwaysTicked counter. If the m_AlwaysTicked counter is greater than zero, the chunk is ticked in the tick-thread regardless of - whether it has any clients or not. + whether it has any clients or not. When this is set, the chunk never unloads. This function allows nesting and task-concurrency (multiple separate tasks can request ticking and as long as at least one requests is active the chunk will be ticked). */ void SetAlwaysTicked(bool a_AlwaysTicked); diff --git a/src/ChunkMap.cpp b/src/ChunkMap.cpp index a16b08f15..c8e485cdd 100644 --- a/src/ChunkMap.cpp +++ b/src/ChunkMap.cpp @@ -2762,7 +2762,7 @@ void cChunkMap::QueueTickBlock(int a_BlockX, int a_BlockY, int a_BlockZ) void cChunkMap::SetChunkAlwaysTicked(int a_ChunkX, int a_ChunkZ, bool a_AlwaysTicked) { cCSLock Lock(m_CSChunks); - cChunkPtr Chunk = GetChunkNoLoad(a_ChunkX, a_ChunkZ); + cChunkPtr Chunk = GetChunk(a_ChunkX, a_ChunkZ); if (Chunk != nullptr) { Chunk->SetAlwaysTicked(a_AlwaysTicked); -- cgit v1.2.3