/**
* Unloads the current level from memory safely
*
* @param bool $force default false, force unload of default level
*
* @return bool
*/
public function unload($force = false)
{
$ev = new LevelUnloadEvent($this);
if ($this === $this->server->getDefaultLevel() and $force !== true) {
$ev->setCancelled(true);
}
$this->server->getPluginManager()->callEvent($ev);
if (!$force and $ev->isCancelled()) {
return false;
}
$this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.level.unloading", [$this->getName()]));
$defaultLevel = $this->server->getDefaultLevel();
foreach ($this->getPlayers() as $player) {
if ($this === $defaultLevel or $defaultLevel === null) {
$player->close($player->getLeaveMessage(), "Forced default level unload");
} elseif ($defaultLevel instanceof Level) {
$player->teleport($this->server->getDefaultLevel()->getSafeSpawn());
}
}
if ($this === $defaultLevel) {
$this->server->setDefaultLevel(null);
}
if ($this->weather != null) {
WeatherManager::unregisterLevel($this);
}
$this->close();
return true;
}