diff --git a/src/world/World.php b/src/world/World.php index 6942b732f..b6da5e95d 100644 --- a/src/world/World.php +++ b/src/world/World.php @@ -2717,7 +2717,13 @@ class World implements ChunkManager{ return null; } - $this->chunks[$chunkHash] = $loadedChunkData->getData()->getChunk(); + $chunk = $loadedChunkData->getData()->getChunk(); + if(!$loadedChunkData->isUpgraded()){ + $chunk->clearTerrainDirtyFlags(); + }else{ + $this->logger->debug("Chunk $x $z has been upgraded, will be saved at the next autosave opportunity"); + } + $this->chunks[$chunkHash] = $chunk; unset($this->blockCache[$chunkHash]); $this->initChunk($x, $z, $loadedChunkData->getData()); diff --git a/src/world/format/Chunk.php b/src/world/format/Chunk.php index 1a48205a5..fdf8089d2 100644 --- a/src/world/format/Chunk.php +++ b/src/world/format/Chunk.php @@ -44,7 +44,7 @@ class Chunk{ public const COORD_BIT_SIZE = SubChunk::COORD_BIT_SIZE; public const COORD_MASK = SubChunk::COORD_MASK; - private int $terrainDirtyFlags = 0; + private int $terrainDirtyFlags = ~0; protected ?bool $lightPopulated = false; protected bool $terrainPopulated = false; diff --git a/src/world/format/io/leveldb/LevelDB.php b/src/world/format/io/leveldb/LevelDB.php index 17d0770b3..5f89800cc 100644 --- a/src/world/format/io/leveldb/LevelDB.php +++ b/src/world/format/io/leveldb/LevelDB.php @@ -695,18 +695,8 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{ //TODO: tile ticks, biome states (?) - $chunk = new Chunk( - $subChunks, - $terrainPopulated - ); - - if($hasBeenUpgraded){ - $logger->debug("Flagging chunk as dirty due to upgraded data"); - $chunk->setTerrainDirty(); //trigger rewriting chunk to disk if it was converted from an older format - } - return new LoadedChunkData( - data: new ChunkData($chunk, $entities, $tiles), + data: new ChunkData(new Chunk($subChunks, $terrainPopulated), $entities, $tiles), upgraded: $hasBeenUpgraded, fixerFlags: LoadedChunkData::FIXER_FLAG_ALL //TODO: fill this by version rather than just setting all flags ); diff --git a/src/world/generator/PopulationTask.php b/src/world/generator/PopulationTask.php index e7e2b407c..7e077f141 100644 --- a/src/world/generator/PopulationTask.php +++ b/src/world/generator/PopulationTask.php @@ -117,8 +117,6 @@ class PopulationTask extends AsyncTask{ if($chunk === null){ throw new AssumptionFailedError("We just set this chunk, so it must exist"); } - $chunk->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_BLOCKS, true); - $chunk->setTerrainDirtyFlag(Chunk::DIRTY_FLAG_BIOMES, true); } return $chunk; }