From 03003ffa502778e28953a4ead7826bbbf633cc4e Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 31 Oct 2016 14:05:50 +0000 Subject: [PATCH] Improved invalid spawnpoint checking --- src/pocketmine/Player.php | 13 ++++++++++--- src/pocketmine/level/Position.php | 2 +- src/pocketmine/level/WeakPosition.php | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index b486f558f..2d837414b 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -681,7 +681,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade * @return Position */ public function getSpawn(){ - if($this->spawnPosition instanceof Position and $this->spawnPosition->getLevel() instanceof Level){ + if($this->hasValidSpawnPosition()){ return $this->spawnPosition; }else{ $level = $this->server->getDefaultLevel(); @@ -690,6 +690,13 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade } } + /** + * @return bool + */ + public function hasValidSpawnPosition() : bool{ + return $this->spawnPosition instanceof WeakPosition and $this->spawnPosition->isValid(); + } + public function sendChunk($x, $z, $payload, $ordering = FullChunkDataPacket::ORDER_COLUMNS){ if($this->connected === false){ return; @@ -1678,7 +1685,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $this->dataPacket(new ResourcePacksInfoPacket()); - if($this->spawnPosition === null and isset($this->namedtag->SpawnLevel) and ($level = $this->server->getLevelByName($this->namedtag["SpawnLevel"])) instanceof Level){ + if(!$this->hasValidSpawnPosition() and isset($this->namedtag->SpawnLevel) and ($level = $this->server->getLevelByName($this->namedtag["SpawnLevel"])) instanceof Level){ $this->spawnPosition = new WeakPosition($this->namedtag["SpawnX"], $this->namedtag["SpawnY"], $this->namedtag["SpawnZ"], $level); } @@ -3082,7 +3089,7 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade parent::saveNBT(); if($this->level instanceof Level){ $this->namedtag->Level = new StringTag("Level", $this->level->getName()); - if($this->spawnPosition instanceof WeakPosition and $this->spawnPosition->isValid()){ + if($this->hasValidSpawnPosition()){ $this->namedtag["SpawnLevel"] = $this->spawnPosition->getLevel()->getName(); $this->namedtag["SpawnX"] = (int) $this->spawnPosition->x; $this->namedtag["SpawnY"] = (int) $this->spawnPosition->y; diff --git a/src/pocketmine/level/Position.php b/src/pocketmine/level/Position.php index 92e0d74fd..78f7b15f7 100644 --- a/src/pocketmine/level/Position.php +++ b/src/pocketmine/level/Position.php @@ -64,7 +64,7 @@ class Position extends Vector3{ * @return bool */ public function isValid(){ - return $this->getLevel() !== null; + return $this->getLevel() instanceof Level; } /** diff --git a/src/pocketmine/level/WeakPosition.php b/src/pocketmine/level/WeakPosition.php index 99064bfe8..b8808ad48 100644 --- a/src/pocketmine/level/WeakPosition.php +++ b/src/pocketmine/level/WeakPosition.php @@ -45,7 +45,7 @@ class WeakPosition extends Position{ } /** - * @return Level + * @return Level|null */ public function getLevel(){ return Server::getInstance()->getLevel($this->levelId);