diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 78b091cc7..abace213d 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -240,8 +240,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ /** @var int */ protected $gamemode; - /** @var int */ - private $loaderId = 0; /** @var bool[] chunkHash => bool (true = sent, false = needs sending) */ public $usedChunks = []; /** @var bool[] chunkHash => dummy */ @@ -690,7 +688,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->networkSession = $session; $this->perm = new PermissibleBase($this); - $this->loaderId = Level::generateChunkLoaderId($this); $this->chunksPerTick = (int) $this->server->getProperty("chunk-sending.per-tick", 4); $this->spawnThreshold = (int) (($this->server->getProperty("chunk-sending.spawn-radius", 4) ** 2) * M_PI); @@ -3393,8 +3390,4 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ public function onBlockChanged(Vector3 $block){ } - - public function getLoaderId() : int{ - return $this->loaderId; - } } diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index 1c77a10a7..eecb2a8ad 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -75,6 +75,7 @@ use function is_infinite; use function is_nan; use function lcg_value; use function sin; +use function spl_object_id; use const M_PI_2; abstract class Entity extends Location implements Metadatable, EntityIds{ @@ -1621,10 +1622,10 @@ abstract class Entity extends Location implements Metadatable, EntityIds{ if(!$this->justCreated){ $newChunk = $this->level->getViewersForPosition($this); foreach($this->hasSpawned as $player){ - if(!isset($newChunk[$player->getLoaderId()])){ + if(!isset($newChunk[spl_object_id($player)])){ $this->despawnFrom($player); }else{ - unset($newChunk[$player->getLoaderId()]); + unset($newChunk[spl_object_id($player)]); } } foreach($newChunk as $player){ @@ -1767,8 +1768,9 @@ abstract class Entity extends Location implements Metadatable, EntityIds{ * @param Player $player */ public function spawnTo(Player $player) : void{ - if(!isset($this->hasSpawned[$player->getLoaderId()])){ - $this->hasSpawned[$player->getLoaderId()] = $player; + $id = spl_object_id($player); + if(!isset($this->hasSpawned[$id])){ + $this->hasSpawned[$id] = $player; $this->sendSpawnPacket($player); } @@ -1797,13 +1799,14 @@ abstract class Entity extends Location implements Metadatable, EntityIds{ * @param bool $send */ public function despawnFrom(Player $player, bool $send = true) : void{ - if(isset($this->hasSpawned[$player->getLoaderId()])){ + $id = spl_object_id($player); + if(isset($this->hasSpawned[$id])){ if($send){ $pk = new RemoveEntityPacket(); $pk->entityUniqueId = $this->id; $player->sendDataPacket($pk); } - unset($this->hasSpawned[$player->getLoaderId()]); + unset($this->hasSpawned[$id]); } } diff --git a/src/pocketmine/level/ChunkLoader.php b/src/pocketmine/level/ChunkLoader.php index 9f10e8ac1..9d3615075 100644 --- a/src/pocketmine/level/ChunkLoader.php +++ b/src/pocketmine/level/ChunkLoader.php @@ -39,14 +39,6 @@ use pocketmine\math\Vector3; */ interface ChunkLoader{ - /** - * Returns the ChunkLoader id. - * Call Level::generateChunkLoaderId($this) to generate and save it - * - * @return int - */ - public function getLoaderId() : int; - /** * @return float */ diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 7a80ed831..128e2c47a 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -106,6 +106,7 @@ use function max; use function microtime; use function min; use function mt_rand; +use function spl_object_id; use function strtolower; use function trim; use const INT32_MAX; @@ -117,7 +118,6 @@ use const M_PI; class Level implements ChunkManager, Metadatable{ private static $levelIdCounter = 1; - private static $chunkLoaderCounter = 1; public const Y_MASK = 0xFF; public const Y_MAX = 0x100; //256 @@ -321,14 +321,6 @@ class Level implements ChunkManager, Metadatable{ $z = ($hash & 0xFFFFFFFF) << 32 >> 32; } - public static function generateChunkLoaderId(ChunkLoader $loader) : int{ - if($loader->getLoaderId() === 0){ - return self::$chunkLoaderCounter++; - }else{ - throw new \InvalidStateException("ChunkLoader has a loader id already assigned: " . $loader->getLoaderId()); - } - } - /** * @param string $str * @@ -642,7 +634,7 @@ class Level implements ChunkManager, Metadatable{ } public function registerChunkLoader(ChunkLoader $loader, int $chunkX, int $chunkZ, bool $autoLoad = true){ - $loaderId = $loader->getLoaderId(); + $loaderId = spl_object_id($loader); if(!isset($this->chunkLoaders[$chunkHash = Level::chunkHash($chunkX, $chunkZ)])){ $this->chunkLoaders[$chunkHash] = []; @@ -672,7 +664,7 @@ class Level implements ChunkManager, Metadatable{ public function unregisterChunkLoader(ChunkLoader $loader, int $chunkX, int $chunkZ){ $chunkHash = Level::chunkHash($chunkX, $chunkZ); - $loaderId = $loader->getLoaderId(); + $loaderId = spl_object_id($loader); if(isset($this->chunkLoaders[$chunkHash][$loaderId])){ unset($this->chunkLoaders[$chunkHash][$loaderId]); unset($this->playerLoaders[$chunkHash][$loaderId]); @@ -2401,7 +2393,7 @@ class Level implements ChunkManager, Metadatable{ $this->chunkSendQueue[$index] = []; } - $this->chunkSendQueue[$index][$player->getLoaderId()] = $player; + $this->chunkSendQueue[$index][spl_object_id($player)] = $player; } private function sendCachedChunk(int $x, int $z){