From b39677cc966e584ee75daba13fa674ea3ff7aebe Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sun, 26 May 2013 00:37:18 +0200 Subject: [PATCH] Added LevelAPI::unloadLevel(Level $level) --- src/API/LevelAPI.php | 22 ++++++++++++++++++++++ src/Player.php | 2 +- src/world/Level.php | 8 ++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/API/LevelAPI.php b/src/API/LevelAPI.php index 7d31a74435..72547b742d 100644 --- a/src/API/LevelAPI.php +++ b/src/API/LevelAPI.php @@ -121,6 +121,28 @@ class LevelAPI{ return true; } + public function unloadLevel(Level $level){ + $name = $level->getName(); + if($name === $this->default){ + return false; + } + $level->nextSave = PHP_INT_MAX; + $level->save(); + foreach($this->server->api->player->getAll($level) as $player){ + $player->teleport($this->server->spawn); + } + foreach($this->server->api->entity->getAll($level) as $entity){ + if($entity->class !== ENTITY_PLAYER){ + $entity->close(); + } + } + foreach($this->server->api->tileentity->getAll($level) as $tile){ + $tile->close(); + } + unset($this->levels[$name]); + return true; + } + public function loadLevel($name){ if($this->get($name) !== false){ return true; diff --git a/src/Player.php b/src/Player.php index 9ff0b1d390..7c6e332a5d 100644 --- a/src/Player.php +++ b/src/Player.php @@ -658,7 +658,7 @@ class Player{ } if($terrain === true){ $this->orderChunks(); - $this->getNextChunk(); + $this->getNextChunk(false); } $this->entity->check = true; } diff --git a/src/world/Level.php b/src/world/Level.php index f6967d6e41..73a35a2ce6 100644 --- a/src/world/Level.php +++ b/src/world/Level.php @@ -26,8 +26,8 @@ the Free Software Foundation, either version 3 of the License, or */ class Level{ - public $entities, $tileEntities; - private $level, $time, $startCheck, $startTime, $server, $name, $usedChunks, $nextSave, $changedBlocks, $changedCount; + public $entities, $tileEntities, $nextSave; + private $level, $time, $startCheck, $startTime, $server, $name, $usedChunks, $changedBlocks, $changedCount; public function __construct(PMFLevel $level, Config $entities, Config $tileEntities, $name){ $this->server = ServerAPI::request(); @@ -103,13 +103,13 @@ class Level{ } } - if($this->nextSave < $now and $this->server->saveEnabled === true){ + if($this->nextSave < $now){ foreach($this->usedChunks as $i => $c){ if(count($c) === 0){ unset($this->usedChunks[$i]); $X = explode(".", $i); $Z = array_pop($X); - $this->level->unloadChunk((int) array_pop($X), (int) $Z); + $this->level->unloadChunk((int) array_pop($X), (int) $Z, $this->server->saveEnabled); } } $this->save();