use pocketmine\network\mcpe\handler\PacketHandler; use pocketmine\network\mcpe\serializer\NetworkBinaryStream; class SetSpawnPositionPacket extends DataPacket implements ClientboundPacket{ public const NETWORK_ID = ProtocolInfo::SET_SPAWN_POSITION_PACKET; public const TYPE_PLAYER_SPAWN = 0; public const TYPE_WORLD_SPAWN = 1; /** @var int */ public $spawnType; /** @var int */ public $x; /** @var int */ public $y; /** @var int */ public $z; /** @var bool */ public $spawnForced; public static function playerSpawn(int $x, int $y, int $z, bool $forced) : self{ $result = new self; $result->spawnType = self::TYPE_PLAYER_SPAWN; [$result->x, $result->y, $result->z] = [$x, $y, $z]; $result->spawnForced = $forced; return $result; } public static function worldSpawn(int $x, int $y, int $z) : self{ $result = new self; $result->spawnType = self::TYPE_WORLD_SPAWN; [$result->x, $result->y, $result->z] = [$x, $y, $z]; return $result; } protected function decodePayload(NetworkBinaryStream $in) : void{ $this->spawnType = $in->getVarInt(); $in->getBlockPosition($this->x, $this->y, $this->z); $this->spawnForced = $in->getBool(); } protected function encodePayload(NetworkBinaryStream $out) : void{ $out->putVarInt($this->spawnType); $out->putBlockPosition($this->x, $this->y, $this->z); $out->putBool($this->spawnForced); } public function handle(PacketHandler $handler) : bool{ return $handler->handleSetSpawnPosition($this); } }