diff --git a/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/RegionFile.kt b/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/RegionFile.kt index 76f01e1243..753c187b16 100644 --- a/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/RegionFile.kt +++ b/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/RegionFile.kt @@ -15,12 +15,12 @@ internal class RegionFile( chunks: Array ) : RegionizedFile(MAGIC, VERSION, file, world, regionX, regionZ, chunks) { - fun isAnyChunkEnabled(): Boolean { + fun isInactive(): Boolean { for (chunk in chunks) { - if (chunk.isEnabled) - return true + if (chunk.isEnabled || !chunk.hasBeenEnabled) + return false } - return false + return true } companion object : RegionizedFileReader( diff --git a/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/WorldDataStorage.kt b/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/WorldDataStorage.kt index b62cf9dbd7..6a0003a429 100644 --- a/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/WorldDataStorage.kt +++ b/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/WorldDataStorage.kt @@ -113,7 +113,7 @@ internal class WorldDataStorage(val world: World) { regionFile.save() // unload unused region files - if (unload && !regionFile.isAnyChunkEnabled()) + if (unload && regionFile.isInactive()) blockRegionFiles -= rid } } diff --git a/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/chunk/RegionChunk.kt b/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/chunk/RegionChunk.kt index 9590ace876..73a18221a5 100644 --- a/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/chunk/RegionChunk.kt +++ b/nova/src/main/kotlin/xyz/xenondevs/nova/world/format/chunk/RegionChunk.kt @@ -46,6 +46,10 @@ internal class RegionChunk( @Volatile var isEnabled = false private set + @Volatile + var hasBeenEnabled = false + private set + private var tickingAllowed = false private var isTicking = false @@ -353,6 +357,7 @@ internal class RegionChunk( } } + hasBeenEnabled = true isEnabled = true } }