From 0c6d8b9815786f6f80abcab652fdcf68a995db70 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Tue, 19 May 2015 14:49:18 +0200 Subject: [PATCH] Fixed loader counter on Level, closes #1147 --- src/pocketmine/inventory/PlayerInventory.php | 3 ++- src/pocketmine/level/Level.php | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pocketmine/inventory/PlayerInventory.php b/src/pocketmine/inventory/PlayerInventory.php index 5dbe7406d..3072526cb 100644 --- a/src/pocketmine/inventory/PlayerInventory.php +++ b/src/pocketmine/inventory/PlayerInventory.php @@ -326,6 +326,7 @@ class PlayerInventory extends BaseInventory{ $pk->eid = $this->getHolder()->getId(); $pk->slots = $slots; $pk->encode(); + $pk->setChannel(Network::CHANNEL_ENTITY_SPAWNING); $pk->isEncoded = true; foreach($target as $player){ @@ -339,7 +340,7 @@ class PlayerInventory extends BaseInventory{ $pk2->slots = $armor; $player->dataPacket($pk2); }else{ - $player->dataPacket($pk->setChannel(Network::CHANNEL_ENTITY_SPAWNING)); + $player->dataPacket($pk); } } } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index ff0dc326c..842c6437e 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -160,6 +160,8 @@ class Level implements ChunkManager, Metadatable{ /** @var ChunkLoader[] */ private $loaders = []; + /** @var int[] */ + private $loaderCounter = []; /** @var ChunkLoader[][] */ private $chunkLoaders = []; /** @var Player[][] */ @@ -564,9 +566,10 @@ class Level implements ChunkManager, Metadatable{ } if(!isset($this->loaders[$hash])){ - $this->loaders[$hash] = 1; + $this->loaderCounter[$hash] = 1; + $this->loaders[$hash] = $loader; }else{ - ++$this->loaders[$hash]; + ++$this->loaderCounter[$hash]; } $this->cancelUnloadChunkRequest($chunkX, $chunkZ); @@ -586,7 +589,8 @@ class Level implements ChunkManager, Metadatable{ $this->unloadChunkRequest($chunkX, $chunkZ, true); } - if(--$this->loaders[$hash] === 0){ + if(--$this->loaderCounter[$hash] === 0){ + unset($this->loaderCounter[$hash]); unset($this->loaders[$hash]); } } @@ -800,7 +804,7 @@ class Level implements ChunkManager, Metadatable{ $chunkX = $loader->getX() >> 4; $chunkZ = $loader->getZ() >> 4; - $index = Level::chunkHash($x, $z); + $index = Level::chunkHash($chunkX, $chunkZ); $existingLoaders = max(0, isset($this->chunkTickList[$index]) ? $this->chunkTickList[$index] : 0); $this->chunkTickList[$index] = $existingLoaders + 1; for($chunk = 0; $chunk < $chunksPerLoader; ++$chunk){