mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 16:51:42 +00:00
Improved invalid spawnpoint checking
This commit is contained in:
parent
7a1cdf88e8
commit
03003ffa50
@ -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;
|
||||
|
@ -64,7 +64,7 @@ class Position extends Vector3{
|
||||
* @return bool
|
||||
*/
|
||||
public function isValid(){
|
||||
return $this->getLevel() !== null;
|
||||
return $this->getLevel() instanceof Level;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -45,7 +45,7 @@ class WeakPosition extends Position{
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Level
|
||||
* @return Level|null
|
||||
*/
|
||||
public function getLevel(){
|
||||
return Server::getInstance()->getLevel($this->levelId);
|
||||
|
Loading…
x
Reference in New Issue
Block a user