From 7d51bc00043217ea6ebdcea3d99712b8fd12547b Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Mon, 15 Sep 2014 22:14:05 +0200 Subject: [PATCH] Possible fix for #2077 --- src/pocketmine/level/Level.php | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index af0e66f31..2cd061dbe 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -633,7 +633,7 @@ class Level implements ChunkManager, Metadatable{ } public function __debugInfo(){ - return get_class($this); + return []; } /** @@ -650,7 +650,7 @@ class Level implements ChunkManager, Metadatable{ $this->server->getPluginManager()->callEvent(new LevelSaveEvent($this)); $this->provider->setTime((int) $this->time); - $this->provider->saveChunks(); //TODO: only save changed chunks + $this->saveChunks(); if($this->provider instanceof BaseLevelProvider){ $this->provider->saveLevelData(); } @@ -658,6 +658,14 @@ class Level implements ChunkManager, Metadatable{ return true; } + public function saveChunks(){ + //TODO: only save changed chunks + foreach($this->chunks as $chunk){ + $this->provider->setChunk($chunk->getX(), $chunk->getZ(), $chunk); + $this->provider->saveChunk($chunk->getX(), $chunk->getZ()); + } + } + /** * @param Vector3 $pos * @param int $type @@ -1765,6 +1773,8 @@ class Level implements ChunkManager, Metadatable{ return false; } + $index = "$x:$z"; + $chunk = $this->getChunkAt($x, $z); if($chunk instanceof FullChunk){ @@ -1777,10 +1787,13 @@ class Level implements ChunkManager, Metadatable{ $this->timings->doChunkUnload->startTiming(); if($this->getAutoSave()){ + if(isset($this->chunks[$index])){ + $this->provider->setChunk($x, $z, $this->chunks[$index]); + } $this->provider->saveChunk($x, $z); } - unset($this->chunks[$index = Level::chunkHash($x, $z)]); + unset($this->chunks[$index]); $this->provider->unloadChunk($x, $z, $safe); unset($this->usedChunks[$index]); Cache::remove("world:" . $this->getID() . ":$x:$z");