Move player creation out of NetworkSession

This commit is contained in:
Dylan K. Taylor 2020-12-13 21:20:37 +00:00
parent 6f09d472e2
commit c0438f1ddb
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
2 changed files with 20 additions and 11 deletions

View File

@ -35,6 +35,7 @@ use pocketmine\command\SimpleCommandMap;
use pocketmine\crafting\CraftingManager; use pocketmine\crafting\CraftingManager;
use pocketmine\crafting\CraftingManagerFromDataHelper; use pocketmine\crafting\CraftingManagerFromDataHelper;
use pocketmine\event\HandlerListManager; use pocketmine\event\HandlerListManager;
use pocketmine\event\player\PlayerCreationEvent;
use pocketmine\event\player\PlayerDataSaveEvent; use pocketmine\event\player\PlayerDataSaveEvent;
use pocketmine\event\server\CommandEvent; use pocketmine\event\server\CommandEvent;
use pocketmine\event\server\DataPacketSendEvent; use pocketmine\event\server\DataPacketSendEvent;
@ -67,6 +68,7 @@ use pocketmine\permission\DefaultPermissions;
use pocketmine\player\GameMode; use pocketmine\player\GameMode;
use pocketmine\player\OfflinePlayer; use pocketmine\player\OfflinePlayer;
use pocketmine\player\Player; use pocketmine\player\Player;
use pocketmine\player\PlayerInfo;
use pocketmine\plugin\PharPluginLoader; use pocketmine\plugin\PharPluginLoader;
use pocketmine\plugin\Plugin; use pocketmine\plugin\Plugin;
use pocketmine\plugin\PluginEnableOrder; 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). * 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. * The closest match will be returned, or null if there are no online matches.

View File

@ -31,7 +31,6 @@ use pocketmine\entity\effect\EffectInstance;
use pocketmine\entity\Entity; use pocketmine\entity\Entity;
use pocketmine\entity\Human; use pocketmine\entity\Human;
use pocketmine\entity\Living; use pocketmine\entity\Living;
use pocketmine\event\player\PlayerCreationEvent;
use pocketmine\event\server\DataPacketReceiveEvent; use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\event\server\DataPacketSendEvent; use pocketmine\event\server\DataPacketSendEvent;
use pocketmine\form\Form; use pocketmine\form\Form;
@ -230,16 +229,7 @@ class NetworkSession{
} }
protected function createPlayer() : void{ protected function createPlayer() : void{
$ev = new PlayerCreationEvent($this); $this->player = $this->server->createPlayer($this, $this->info, $this->authenticated);
$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->invManager = new InventoryManager($this->player, $this); $this->invManager = new InventoryManager($this->player, $this);