From c3ee373c27b3b8e8a75120a30c35879366f01986 Mon Sep 17 00:00:00 2001 From: Matthww Date: Sun, 15 Apr 2018 17:27:16 +0200 Subject: [PATCH] Add saving/loading Added player saving and loading! --- resources/config.yml | 3 ++ src/Matthww/PlayerInfo/PlayerInfo.php | 49 +++++++++++++++++++---- src/Matthww/PlayerInfo/Tasks/LoadTask.php | 43 ++++++++++++++++++++ src/Matthww/PlayerInfo/Tasks/SaveTask.php | 47 ++++++++++++++++++++++ 4 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 src/Matthww/PlayerInfo/Tasks/LoadTask.php create mode 100644 src/Matthww/PlayerInfo/Tasks/SaveTask.php diff --git a/resources/config.yml b/resources/config.yml index 315a100..df4c298 100644 --- a/resources/config.yml +++ b/resources/config.yml @@ -3,6 +3,9 @@ # True = enabled # False = disabled +#Save playerdata +Save: true + # Show players name Name: true diff --git a/src/Matthww/PlayerInfo/PlayerInfo.php b/src/Matthww/PlayerInfo/PlayerInfo.php index a2ee55d..b7b919f 100644 --- a/src/Matthww/PlayerInfo/PlayerInfo.php +++ b/src/Matthww/PlayerInfo/PlayerInfo.php @@ -7,6 +7,7 @@ use pocketmine\command\Command; use pocketmine\command\CommandSender; use pocketmine\command\ConsoleCommandSender; use pocketmine\event\Listener; +use pocketmine\event\player\PlayerJoinEvent; use pocketmine\event\server\DataPacketReceiveEvent; use pocketmine\network\mcpe\protocol\LoginPacket; use pocketmine\Player; @@ -27,30 +28,52 @@ class PlayerInfo extends PluginBase implements Listener { if(!is_dir($this->getDataFolder())) { mkdir($this->getDataFolder()); } + if(!is_dir($this->getDataFolder() . "players")) { + mkdir($this->getDataFolder() . "players"); + } if(!file_exists($this->getDataFolder() . "config.yml")) { $this->saveDefaultConfig(); } - if(!file_exists($this->getDataFolder() . "models.yml")) { $this->saveResource("models.yml", false); } SpoonDetector::printSpoon($this, 'spoon.txt'); $this->getLogger()->notice("is enabled"); - } public function onDisable() { $this->getLogger()->notice("is disabled!"); } - + public function onPacketReceived(DataPacketReceiveEvent $receiveEvent) { $pk = $receiveEvent->getPacket(); + if($pk instanceof LoginPacket) { $this->PlayerData[$pk->username] = $pk->clientData; } } + public function onJoin(PlayerJoinEvent $joinEvent) { + $player = $joinEvent->getPlayer(); + $cdata = $this->PlayerData[$player->getName()]; + $os = ["Unknown", "Android", "iOS", "macOS", "FireOS", "GearVR", "HoloLens", "Windows 10", "Windows", "Dedicated", "Orbis", "NX"]; + $UI = ["Classic UI", "Pocket UI"]; + $Controls = ["Unknown", "Mouse", "Touch", "Controller"]; + $GUI = [-2 => "Minimum", -1 => "Medium", 0 => "Maximum"]; + + $this->getServer()->getScheduler()->scheduleTask(new Tasks\SaveTask( + $this, + $player->getName(), + $this->DeviceModel($cdata["DeviceModel"]), + $os[$cdata["DeviceOS"]], + $player->getAddress(), + $UI[$cdata["UIProfile"]], + $GUI[$cdata["GuiScale"]], + $Controls[$cdata["CurrentInputMode"]] + )); + } + public function DeviceModel(string $model) { $models = yaml_parse_file($this->getDataFolder() . "models.yml"); @@ -74,23 +97,33 @@ class PlayerInfo extends PluginBase implements Listener { if(isset($args[0])) { $target = $this->getServer()->getPlayer($args[0]); } else { - $sender->sendMessage(TF::RED . "[Error] Please specify a player"); + $sender->sendMessage(TF::RED . "[PlayerInfo] Please specify a player"); return false; } } else { if($sender instanceof Player and !isset($args[0])) { $target = $sender->getPlayer(); } else { - $target = $this->getServer()->getPlayer($args[0]); + if($target = $this->getServer()->getPlayer($args[0])) { + //Nothing + } else { + if($this->getConfig()->get("IP") == true) { + $this->getServer()->getScheduler()->scheduleTask(new Tasks\LoadTask($this, $sender, $args[0])); + return true; + } else { + $sender->sendMessage(TF::RED . "[PlayerInfo] Player is not online"); + return false; + } + } } } } else { - $sender->sendMessage(TF::RED . "[Error] No permission"); + $sender->sendMessage(TF::RED . "[PlayerInfo] No permission"); return false; } if($target instanceof Player) { $cdata = $this->PlayerData[$target->getName()]; - $sender->sendMessage(TF::GREEN . TF::BOLD . "===" . TF::GREEN . "Player Info" . TF::GREEN . TF::BOLD . "==="); + $sender->sendMessage(TF::GREEN . TF::BOLD . "===" . TF::GREEN . "PlayerInfo" . TF::GREEN . TF::BOLD . "==="); if($this->getConfig()->get("Name") == true) { $sender->sendMessage(TF::AQUA . "Name: " . TF::RED . $target->getDisplayName()); } @@ -124,7 +157,7 @@ class PlayerInfo extends PluginBase implements Listener { $sender->sendMessage(TF::GREEN . TF::BOLD . "================"); return true; } else { - $sender->sendMessage(TF::RED . "[Error] Player is not online"); + $sender->sendMessage(TF::RED . "[PlayerInfo] Player is not online"); return false; } } diff --git a/src/Matthww/PlayerInfo/Tasks/LoadTask.php b/src/Matthww/PlayerInfo/Tasks/LoadTask.php new file mode 100644 index 0000000..9b5818c --- /dev/null +++ b/src/Matthww/PlayerInfo/Tasks/LoadTask.php @@ -0,0 +1,43 @@ +plugin = $plugin; + $this->sender = $sender; + $this->target = $target; + parent::__construct($plugin); + } + + public function getPlugin() { + return $this->plugin; + } + + public function onRun(int $tick) { + if(!file_exists($this->getPlugin()->getDataFolder() . "players/" . strtolower($this->target) . ".json")) { + $this->sender->sendMessage(TF::colorize("&c[PlayerInfo] Player &f". $this->target . " &cwas not found!")); + } else { + $data = new Config($this->getPlugin()->getDataFolder() . "players/" . strtolower($this->target) . ".json", Config::JSON); + $this->sender->sendMessage(TF::colorize("&a&l=== &r&aPlayerInfo &a&l===")); + $this->sender->sendMessage(TF::colorize("&bName: &c" . $data->get("Name"))); + $this->sender->sendMessage(TF::colorize("&bIP: &c" . $data->get("IP"))); + $this->sender->sendMessage(TF::colorize("&bOS: &c" . $data->get("OS"))); + $this->sender->sendMessage(TF::colorize("&bModel: &c" . $data->get("Model"))); + $this->sender->sendMessage(TF::colorize("&bUI: &c" . $data->get("UI"))); + $this->sender->sendMessage(TF::colorize("&bGUI Scale: &c" . $data->get("GUI"))); + $this->sender->sendMessage(TF::colorize("&bControls: &c" . $data->get("Controls"))); + $this->sender->sendMessage(TF::colorize("&a&l================")); + } + } +} diff --git a/src/Matthww/PlayerInfo/Tasks/SaveTask.php b/src/Matthww/PlayerInfo/Tasks/SaveTask.php new file mode 100644 index 0000000..5622d4c --- /dev/null +++ b/src/Matthww/PlayerInfo/Tasks/SaveTask.php @@ -0,0 +1,47 @@ +plugin = $plugin; + $this->player = $player; + $this->model = $model; + $this->os = $os; + $this->ip = $ip; + $this->UI = $UI; + $this->GUI = $GUI; + $this->controls = $controls; + parent::__construct($plugin); + } + + public function getPlugin() { + return $this->plugin; + } + + public function onRun(int $tick) { + $data = new Config($this->getPlugin()->getDataFolder() . "players/" . strtolower($this->player) . ".json", Config::JSON); + $data->set("Name", $this->player); + $data->set("Model", $this->model); + $data->set("OS", $this->os); + $data->set("IP", $this->ip); + $data->set("UI", $this->UI); + $data->set("GUI", $this->GUI); + $data->set("Controls", $this->controls); + $data->save(); + $data->reload(); + } +}