From c0438f1ddbbb7dce018659701f46991b85d86689 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 13 Dec 2020 21:20:37 +0000 Subject: [PATCH] Move player creation out of NetworkSession --- src/Server.php | 19 +++++++++++++++++++ src/network/mcpe/NetworkSession.php | 12 +----------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/Server.php b/src/Server.php index 8ae8b3f02..c9f57410c 100644 --- a/src/Server.php +++ b/src/Server.php @@ -35,6 +35,7 @@ use pocketmine\command\SimpleCommandMap; use pocketmine\crafting\CraftingManager; use pocketmine\crafting\CraftingManagerFromDataHelper; use pocketmine\event\HandlerListManager; +use pocketmine\event\player\PlayerCreationEvent; use pocketmine\event\player\PlayerDataSaveEvent; use pocketmine\event\server\CommandEvent; use pocketmine\event\server\DataPacketSendEvent; @@ -67,6 +68,7 @@ use pocketmine\permission\DefaultPermissions; use pocketmine\player\GameMode; use pocketmine\player\OfflinePlayer; use pocketmine\player\Player; +use pocketmine\player\PlayerInfo; use pocketmine\plugin\PharPluginLoader; use pocketmine\plugin\Plugin; use pocketmine\plugin\PluginEnableOrder; @@ -575,6 +577,23 @@ class Server{ } } + public function createPlayer(NetworkSession $session, PlayerInfo $playerInfo, bool $authenticated) : Player{ + $ev = new PlayerCreationEvent($session); + $ev->call(); + $class = $ev->getPlayerClass(); + + //TODO: make this async + //TODO: what about allowing this to be provided by PlayerCreationEvent? + $namedtag = $this->getOfflinePlayerData($playerInfo->getUsername()); + + /** + * @see Player::__construct() + * @var Player $player + */ + $player = new $class($this, $session, $playerInfo, $authenticated, $namedtag); + return $player; + } + /** * Returns an online player whose name begins with or equals the given string (case insensitive). * The closest match will be returned, or null if there are no online matches. diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 0bf104bb9..f1a298c6a 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -31,7 +31,6 @@ use pocketmine\entity\effect\EffectInstance; use pocketmine\entity\Entity; use pocketmine\entity\Human; use pocketmine\entity\Living; -use pocketmine\event\player\PlayerCreationEvent; use pocketmine\event\server\DataPacketReceiveEvent; use pocketmine\event\server\DataPacketSendEvent; use pocketmine\form\Form; @@ -230,16 +229,7 @@ class NetworkSession{ } protected function createPlayer() : void{ - $ev = new PlayerCreationEvent($this); - $ev->call(); - $class = $ev->getPlayerClass(); - - //TODO: make this async - //TODO: this really has no business being in NetworkSession at all - what about allowing it to be provided by PlayerCreationEvent? - $namedtag = $this->server->getOfflinePlayerData($this->info->getUsername()); - - /** @see Player::__construct() */ - $this->player = new $class($this->server, $this, $this->info, $this->authenticated, $namedtag); + $this->player = $this->server->createPlayer($this, $this->info, $this->authenticated); $this->invManager = new InventoryManager($this->player, $this);