diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index e98b36c3d..8ee0e0872 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -983,13 +983,16 @@ class Server{ if($level === $this->getDefaultLevel() and !$forceUnload){ throw new \InvalidStateException("The default level cannot be unloaded while running, please switch levels."); } - if($level->unload($forceUnload) === true){ - unset($this->levels[$level->getId()]); - return true; - } + return $level->unload($forceUnload); + } - return false; + /** + * @internal + * @param Level $level + */ + public function removeLevel(Level $level) : void{ + unset($this->levels[$level->getId()]); } /** diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index d9134f652..2bdae962d 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -473,6 +473,8 @@ class Level implements ChunkManager, Metadatable{ } /** + * @internal DO NOT use this from plugins, it's for internal use only. Use Server->unloadLevel() instead. + * * Unloads the current level from memory safely * * @param bool $force default false, force unload of default level @@ -507,6 +509,8 @@ class Level implements ChunkManager, Metadatable{ $this->server->setDefaultLevel(null); } + $this->server->removeLevel($this); + $this->close(); return true;