diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index d67ddafe4..28518cb73 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1519,14 +1519,19 @@ class Level implements ChunkManager, Metadatable{ } } - public function setChunk($x, $z, FullChunk $chunk){ + public function setChunk($x, $z, FullChunk $chunk, $unload = true){ $index = Level::chunkHash($x, $z); - foreach($this->getUsingChunk($x, $z) as $player){ - $player->unloadChunk($x, $z); + if($unload){ + foreach($this->getUsingChunk($x, $z) as $player){ + $player->unloadChunk($x, $z); + } + unset($this->chunks[$index]); + $this->provider->setChunk($x, $z, $chunk); + $this->loadChunk($x, $z); + }else{ + $this->provider->setChunk($x, $z, $chunk); + $this->chunks[$index] = $chunk; } - unset($this->chunks[$index]); - $this->provider->setChunk($x, $z, $chunk); - $this->loadChunk($x, $z); } /** @@ -1800,10 +1805,8 @@ 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]); - } + if($chunk instanceof FullChunk and $this->getAutoSave()){ + $this->provider->setChunk($x, $z, $chunk); $this->provider->saveChunk($x, $z); } diff --git a/src/pocketmine/level/format/anvil/Anvil.php b/src/pocketmine/level/format/anvil/Anvil.php index 1d70dff5e..6cf3d435d 100644 --- a/src/pocketmine/level/format/anvil/Anvil.php +++ b/src/pocketmine/level/format/anvil/Anvil.php @@ -98,20 +98,12 @@ class Anvil extends McRegion{ $chunk->setProvider($this); - if($chunk->isPopulated() === false){ - $this->unloadChunk($chunkX, $chunkZ, false); - $regionX = $regionZ = null; - self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ); - $this->loadRegion($regionX, $regionZ); - $region = $this->getRegion($regionX, $regionZ); - $region->removeChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32); - $this->loadChunk($chunkX, $chunkZ); - }else{ - $chunk->setX($chunkX); - $chunk->setZ($chunkZ); - $this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk; - //$this->saveChunk($chunkX, $chunkZ); - } + self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ); + $this->loadRegion($regionX, $regionZ); + + $chunk->setX($chunkX); + $chunk->setZ($chunkZ); + $this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk; } public static function createChunkSection($Y){ diff --git a/src/pocketmine/level/format/anvil/Chunk.php b/src/pocketmine/level/format/anvil/Chunk.php index 396fb6ea2..df551777e 100644 --- a/src/pocketmine/level/format/anvil/Chunk.php +++ b/src/pocketmine/level/format/anvil/Chunk.php @@ -182,10 +182,8 @@ class Chunk extends BaseChunk{ $tiles = []; foreach($this->getTiles() as $tile){ - if($tile->closed !== true){ - $tile->saveNBT(); - $tiles[] = $tile->namedtag; - } + $tile->saveNBT(); + $tiles[] = $tile->namedtag; } $nbt->Entities = new Enum("TileEntities", $tiles); diff --git a/src/pocketmine/level/format/mcregion/Chunk.php b/src/pocketmine/level/format/mcregion/Chunk.php index 1c248a5f6..4c2bd02c3 100644 --- a/src/pocketmine/level/format/mcregion/Chunk.php +++ b/src/pocketmine/level/format/mcregion/Chunk.php @@ -288,10 +288,8 @@ class Chunk extends BaseFullChunk{ $tiles = []; foreach($this->getTiles() as $tile){ - if($tile->closed !== true){ - $tile->saveNBT(); - $tiles[] = $tile->namedtag; - } + $tile->saveNBT(); + $tiles[] = $tile->namedtag; } $nbt->Entities = new Enum("TileEntities", $tiles); diff --git a/src/pocketmine/level/format/mcregion/McRegion.php b/src/pocketmine/level/format/mcregion/McRegion.php index 8d6399b66..a39c25273 100644 --- a/src/pocketmine/level/format/mcregion/McRegion.php +++ b/src/pocketmine/level/format/mcregion/McRegion.php @@ -262,20 +262,12 @@ class McRegion extends BaseLevelProvider{ $chunk->setProvider($this); - if($chunk->isPopulated() === false){ - $this->unloadChunk($chunkX, $chunkZ, false); - $regionX = $regionZ = null; - self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ); - $this->loadRegion($regionX, $regionZ); - $region = $this->getRegion($regionX, $regionZ); - $region->removeChunk($chunkX - $region->getX() * 32, $chunkZ - $region->getZ() * 32); - $this->loadChunk($chunkX, $chunkZ); - }else{ - $chunk->setX($chunkX); - $chunk->setZ($chunkZ); - $this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk; - //$this->saveChunk($chunkX, $chunkZ); - } + self::getRegionIndex($chunkX, $chunkZ, $regionX, $regionZ); + $this->loadRegion($regionX, $regionZ); + + $chunk->setX($chunkX); + $chunk->setZ($chunkZ); + $this->chunks[Level::chunkHash($chunkX, $chunkZ)] = $chunk; } public static function createChunkSection($Y){