diff --git a/src/Server.php b/src/Server.php index 0f496ee80..ff0c055f3 100644 --- a/src/Server.php +++ b/src/Server.php @@ -553,7 +553,7 @@ class Server{ } public function saveOfflinePlayerData(string $name, CompoundTag $nbtTag) : void{ - $ev = new PlayerDataSaveEvent($nbtTag, $name); + $ev = new PlayerDataSaveEvent($nbtTag, $name, $this->getPlayerExact($name)); if(!$this->shouldSavePlayerData()){ $ev->cancel(); } diff --git a/src/event/player/PlayerDataSaveEvent.php b/src/event/player/PlayerDataSaveEvent.php index ad49aba2b..70e744304 100644 --- a/src/event/player/PlayerDataSaveEvent.php +++ b/src/event/player/PlayerDataSaveEvent.php @@ -27,8 +27,7 @@ use pocketmine\event\Cancellable; use pocketmine\event\CancellableTrait; use pocketmine\event\Event; use pocketmine\nbt\tag\CompoundTag; -use pocketmine\player\IPlayer; -use pocketmine\Server; +use pocketmine\player\Player; /** * Called when a player's data is about to be saved to disk. @@ -40,10 +39,13 @@ class PlayerDataSaveEvent extends Event implements Cancellable{ protected $data; /** @var string */ protected $playerName; + /** @var Player|null */ + private $player; - public function __construct(CompoundTag $nbt, string $playerName){ + public function __construct(CompoundTag $nbt, string $playerName, ?Player $player){ $this->data = $nbt; $this->playerName = $playerName; + $this->player = $player; } /** @@ -65,10 +67,10 @@ class PlayerDataSaveEvent extends Event implements Cancellable{ } /** - * Returns the player whose data is being saved. This may be a Player or an OfflinePlayer. - * @return IPlayer (Player or OfflinePlayer) + * Returns the player whose data is being saved, if online. + * If null, this data is for an offline player (possibly just disconnected). */ - public function getPlayer() : IPlayer{ - return Server::getInstance()->getOfflinePlayer($this->playerName); + public function getPlayer() : ?Player{ + return $this->player; } }