diff --git a/src/pocketmine/level/format/io/region/RegionLevelProvider.php b/src/pocketmine/level/format/io/region/RegionLevelProvider.php index 56f8f1ef5..cee91d003 100644 --- a/src/pocketmine/level/format/io/region/RegionLevelProvider.php +++ b/src/pocketmine/level/format/io/region/RegionLevelProvider.php @@ -162,6 +162,13 @@ abstract class RegionLevelProvider extends BaseLevelProvider{ } } + protected function unloadRegion(int $regionX, int $regionZ) : void{ + if(isset($this->regions[$hash = Level::chunkHash($regionX, $regionZ)])){ + $this->regions[$hash]->close(); + unset($this->regions[$hash]); + } + } + public function close() : void{ foreach($this->regions as $index => $region){ $region->close(); @@ -246,6 +253,8 @@ abstract class RegionLevelProvider extends BaseLevelProvider{ } } } + + $this->unloadRegion($rX, $rZ); } } @@ -254,6 +263,7 @@ abstract class RegionLevelProvider extends BaseLevelProvider{ foreach($this->createRegionIterator() as $region){ $this->loadRegion((int) $region[1], (int) $region[2]); $count += $this->getRegion((int) $region[1], (int) $region[2])->calculateChunkCount(); + $this->unloadRegion((int) $region[1], (int) $region[2]); } return $count; }