diff --git a/src/files/WorldFiles.h b/src/files/WorldFiles.h index bb816125..985d9141 100644 --- a/src/files/WorldFiles.h +++ b/src/files/WorldFiles.h @@ -67,6 +67,10 @@ public: WorldRegions& getRegions() { return regions; } + + bool doesWriteLights() const { + return doWriteLights; + } }; #endif // FILES_WORLD_FILES_H_ diff --git a/src/voxels/Chunks.cpp b/src/voxels/Chunks.cpp index 3c0024f9..4a220d8e 100644 --- a/src/voxels/Chunks.cpp +++ b/src/voxels/Chunks.cpp @@ -487,11 +487,15 @@ void Chunks::saveAndClear(){ auto& regions = worldFiles->getRegions(); for (size_t i = 0; i < volume; i++){ Chunk* chunk = chunks[i].get(); - if (chunk) { - regions.put(chunk); - events->trigger(EVT_CHUNK_HIDDEN, chunk); - } chunks[i] = nullptr; + if (chunk == nullptr || !chunk->isLighted()) + continue; + + bool lightsUnsaved = !chunk->isLoadedLights() && + worldFiles->doesWriteLights(); + if (!chunk->isUnsaved() && !lightsUnsaved) + continue; + regions.put(chunk); } chunksCount = 0; }