diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 8058cb3e4..e98f5067f 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2291,6 +2291,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $this->windowIndex = []; $this->usedChunks = []; $this->loadQueue = []; + $this->spawnPosition = null; unset($this->buffer); } diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index ebf1bd73a..164bac8f6 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -1189,6 +1189,7 @@ abstract class Entity extends Location implements Metadatable{ $level->removeEntity($this); } $this->despawnFromAll(); + $this->level = null; } } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index c45d77301..fc4c69000 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -304,6 +304,7 @@ class Level implements ChunkManager, Metadatable{ } public function close(){ + if($this->getAutoSave()){ $this->save(); } @@ -316,6 +317,7 @@ class Level implements ChunkManager, Metadatable{ $this->provider->close(); $this->provider = null; $this->blockMetadata = null; + $this->blockCache = []; } /** diff --git a/src/pocketmine/level/format/generic/BaseFullChunk.php b/src/pocketmine/level/format/generic/BaseFullChunk.php index b17bd465e..f4b674294 100644 --- a/src/pocketmine/level/format/generic/BaseFullChunk.php +++ b/src/pocketmine/level/format/generic/BaseFullChunk.php @@ -294,6 +294,7 @@ abstract class BaseFullChunk implements FullChunk{ foreach($this->getTiles() as $tile){ $tile->close(); } + $this->provider = null; return true; } diff --git a/src/pocketmine/level/format/mcregion/McRegion.php b/src/pocketmine/level/format/mcregion/McRegion.php index f20e231f3..4b6f5c09f 100644 --- a/src/pocketmine/level/format/mcregion/McRegion.php +++ b/src/pocketmine/level/format/mcregion/McRegion.php @@ -191,9 +191,7 @@ class McRegion extends BaseLevelProvider{ public function unloadChunk($x, $z, $safe = true){ $chunk = $this->getChunk($x, $z, false); if($chunk instanceof FullChunk and $chunk->unload(false, $safe)){ - $this->chunks[$index = Level::chunkHash($x, $z)] = null; - - unset($this->chunks[$index]); + unset($this->chunks[Level::chunkHash($x, $z)]); } return true; diff --git a/src/pocketmine/tile/Tile.php b/src/pocketmine/tile/Tile.php index 4e735e488..2444e6b33 100644 --- a/src/pocketmine/tile/Tile.php +++ b/src/pocketmine/tile/Tile.php @@ -121,6 +121,7 @@ abstract class Tile extends Position{ if(($level = $this->getLevel()) instanceof Level){ $level->removeTile($this); } + $this->level = null; } }