<?php echo "PocketMine-MP plugin LoginSystem ver.β\nThis file has been generated using DevTools v1.12.8 at Wed, 07 Mar 2018 13:42:17 +0000\n----------------\n";if(extension_loaded("phar")){$phar = new \Phar(__FILE__);foreach($phar->getMetadata() as $key => $value){echo ucfirst($key).": ".(is_array($value) ? implode(", ", $value):$value)."\n";}} __HALT_COMPILER(); ?>
             |  a:9:{s:4:"name";s:11:"LoginSystem";s:7:"version";s:5:"er.β";s:4:"main";s:19:"fujiwaraizuho\Login";s:3:"api";a:3:{i:0;s:5:"3.0.0";i:1;s:13:"3.0.0-ALPHA10";i:2;s:13:"3.0.0-ALPHA11";}s:6:"depend";a:0:{}s:11:"description";s:19:"This is LoginSystem";s:7:"authors";a:1:{i:0;s:13:"fujiwaraizuho";}s:7:"website";s:33:"https://twitter.com/fujiwaraizuho";s:12:"creationDate";i:1520430137;}
   plugin.yml  9Z  L϶         src/fujiwaraizuho/lang/Jpn.php   9Z   t         src/fujiwaraizuho/lang/Eng.php  9Z  8*ζ         src/fujiwaraizuho/Lang.php  9Z  Ҷ         src/fujiwaraizuho/Login.php  9Z  Y         src/fujiwaraizuho/DB.php  9Z  IH      #   src/fujiwaraizuho/EventListener.php&  9Z&  	d      name: LoginSystem
main: fujiwaraizuho\Login
version: er.β
api:
  - 3.0.0
  - 3.0.0-ALPHA10
  - 3.0.0-ALPHA11
description: This is LoginSystem

author: fujiwaraizuho
website: https://twitter.com/fujiwaraizuho 

commands:
  updatename:
    usage: "/updatename oldName new Name"
    description: "ログインアカウントデータをアップデートできます。"
  unregister:
    usage: "/unregister"
    description: "ログインアカウントを削除できます。"<?php
/**
 * Created by PhpStorm.
 * User: izuho
 * Date: 2018/02/13
 * Time: 14:32
 */

namespace fujiwaraizuho\lang;


class Jpn
{
	public $lang = [
		"login" => [
			"type" => "custom_form",
			"title" => "LoginSystem",
			"content" => [
				[
					"type" => "label",
					"text" => "§c情報が一致しませんでしたログインしてください！"
				],
				[
					"type" => "input",
					"text" => "",
					"placeholder" => "パスワード"
				]
			]
		],
		"register" => [
			"type" => "custom_form",
			"title" => "LoginSystem",
			"content" => [
				[
					"type" => "label",
					"text" => "§aパスワードを設定してください"
				],
				[
					"type" => "input",
					"text" => "",
					"placeholder" => "パスワード"
				],
				[
					"type" => "input",
					"text" => "",
					"placeholder" => "確認パスワード"
				]
			]
		],
		"re_unregister" => [
			"type" => "modal",
			"title" => "§l§c確認",
			"content" => "あなたのアカウントを削除しますよろしければはいを選択してください？",
			"button1" => "いいえ",
			"button2" => "はい"
		],
		"error_empty" => "§cパスワードが入力されていません！",
		"error_under" => "§c8文字以下のパスワードは安全のため登録できません！",
		"login_error_under" => "§c8文字以下のパスワードは登録されていません！",
		"error_notSafety" => "§cこのパスワードは安全ではありません！",
		"error_match" => "§c確認パスワードと一致しませんでした！",
		"auto_login" => "自動ログインしました",
		"kick_error_login" => "§4このサーバーはログインをしないとプレイできません！",
		"kick_error_safety" => "§4本人であることが確認できませんでした！",
		"update_ip" => "§a>> IPアドレスを更新しました！",
		"login_message" => "§a>> ログインしました！",
		"register_message" => "§a>> アカウント登録が完了しました！"
	];
}<?php
/**
 * Created by PhpStorm.
 * User: izuho
 * Date: 2018/02/13
 * Time: 14:32
 */

namespace fujiwaraizuho\lang;


class Eng
{
	public $lang = [
		"login" => [
			"type" => "custom_form",
			"title" => "LoginSystem",
			"content" => [
				[
					"type" => "label",
					"text" => "§cData did not match Login！"
				],
				[
					"type" => "input",
					"text" => "",
					"placeholder" => "Password"
				]
			]
		],
		"register" => [
			"type" => "custom_form",
			"title" => "LoginSystem",
			"content" => [
				[
					"type" => "label",
					"text" => "§aPlease set a password"
				],
				[
					"type" => "input",
					"text" => "",
					"placeholder" => "Password"
				],
				[
					"type" => "input",
					"text" => "",
					"placeholder" => "Confirm password"
				]
			]
		],
		"re_unregister" => [
			"type" => "modal",
			"title" => "§l§cConfirmation",
			"content" => "Delete your account Please select yes if you do not mind.",
			"button1" => "No",
			"button2" => "Yes"
		],
		"error_empty" => "§cPassword has not been entered！",
		"error_under" => "§cA password of 8 characters or less can not be registered for safety！",
		"login_error_under" => "A password of 8 characters or less is not registered！",
		"error_notSafety" => "§cThis password is not secure！",
		"error_match" => "§cConfirmation password did not match！",
		"auto_login" => "I logged in automatically",
		"kick_error_login" => "§4This server can not play without logging in！",
		"kick_error_safety" => "§4I could not confirm that I am the principal！",
		"update_ip" => "§a>> I updated the IP address！",
		"login_message" => "§a>> You are now logged！",
		"register_message" => "§a>> Account registration is completed！"
	];
}<?php
/**
 * Created by PhpStorm.
 * User: izuho
 * Date: 2018/02/13
 * Time: 16:10
 */

namespace fujiwaraizuho;

use fujiwaraizuho\lang\Jpn;
use fujiwaraizuho\lang\Eng;


class Lang
{

	/**
	 * Lang constructor.
	 */
	public function __construct(){}


	/**
	 * @param string $id
	 * @param string $lang
	 * @return null
	 */
	public function getLang(string $id, string $lang = "jpn")
	{
		switch ($lang) {
			case "jpn":

				$langClass = new Jpn();

				$data = $langClass->lang[$id];

				return $data;

				break;

			case "eng":

				$langClass = new Eng();

				$data = $langClass->lang[$id];

				return $data;
				break;
		}
		return null;
	}
}<?php
/**
 * Created by PhpStorm.
 * User: izuho
 * Date: 2018/02/12
 * Time: 22:31
 */

namespace fujiwaraizuho;

/* Base */
use pocketmine\plugin\PluginBase;
use pocketmine\Player;

/* Event */
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerChatEvent;
use pocketmine\event\player\PlayerCommandPreprocessEvent;
use pocketmine\event\block\BlockBreakEvent;
use pocketmine\event\block\BlockPlaceEvent;

/* Command */
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\command\ConsoleCommandSender;

/* Packet */
use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;


class Login extends PluginBase implements Listener
{
	const PLUGIN_NAME = "LoginSystem";

	const FORM_LANG_SELECT = 0;
	const FORM_LOGIN = 1;
	const FORM_REGISTER = 2;
	const FORM_UNREGISTER = 3;

	public $lang;
	public $db;

	public function onEnable()
	{
		if (!file_exists($this->getDataFolder())) {
			mkdir($this->getDataFolder());
		}

		$this->db = new DB($this->getDataFolder(), $this);
		$this->lang = new Lang();
		$this->getServer()->getPluginManager()->registerEvents(new EventListener($this, $this->db, $this->lang), $this);

		$this->getLogger()->info("§aINFO §f> §aEnabled...");
	}


	public function onDisable()
	{
		$this->getLogger()->info("§cINFO §f> §cDisabled...");
	}


	/**
	 * @param CommandSender $sender
	 * @param Command $command
	 * @param string $label
	 * @param array $args
	 * @return bool
	 */
	public function onCommand(CommandSender $sender, Command $command, string $label, array $args):bool
	{
		switch ($label) {
			case "updatename":

				if (!$sender->isOp()) {
					$sender->sendMessage("§c>> Permission error！");
					return true;
				}
			
				if (!isset($args[0]) || !isset($args[1])) return false;

				$result = $this->db->updateName(strtolower($args[0]), strtolower($args[1]));

				if (is_null($result)) {
					$sender->sendMessage("§c>> Account NotFound！");
					return true;
				}

				$sender->sendMessage("§a>> Success！");

				return true;
				break;

			case "unregister":

				if ($sender->isOp()) {
					if (!isset($args[0])) {
						// OP自身のログインデータ削除
						if ($sender instanceof ConsoleCommandSender) {
							$sender->sendMessage("§c>> Permission error！");
							return true;
						}

						$langName = $this->db->getLang($sender);
						$data = $this->lang->getLang("re_unregister", $langName["lang"]);
						$returnId = $this->sendForm($sender, $data);

						$sender->unregister[self::PLUGIN_NAME] = strtolower($sender->getName());
						$sender->formId[self::PLUGIN_NAME][self::FORM_UNREGISTER] = $returnId;
					} else {
						// ほかのプレイヤーのデータ削除
						if ($sender instanceof ConsoleCommandSender) {
							// コンソール
							$selectPlayer = strtolower($args[0]);
							$unregister = $this->db->unRegister($selectPlayer);

							if (is_null($unregister)) {
								$sender->sendMessage("§c>> Account NotFound！");
								return true;
							}

							$allplayer = $this->getServer()->getOnlinePlayers();

							foreach ($allplayer as $player) {
								$name = $player->getName();
								$players[] = $name;
							}

							if (isset($players)) {
								if (in_array($selectPlayer, $players)) {
									$player = $this->getServer()->getPlayer($name);
									$player->kick("§c[LoginSystem]\n".
											  	"ログインデータが削除されました、再度ログインしてください！\n".
											  	"Login data deleted, please login again!"
												, false);
								}
							}	

							$sender->sendMessage("§a>> Success！");

							return true;

						} else {
							// プレイヤー
							$selectPlayer = strtolower($args[0]);

							$data = $this->db->getUserData(null, $selectPlayer);

							if (is_null($data)) {
								$sender->sendMessage("§c>> Account NotFound！");
								return true;
							}

							$data = [
								"type" => "modal",
								"title" => "§l§c確認",
								"content" => $selectPlayer ."さんのアカウントデータを削除します、本当によろしいですか？\n".
											 "消した場合二度とデーターは戻りません！",
								"button1" => "いいえ",
								"button2" => "はい" 
							];

							$returnId = $this->sendForm($sender, $data);

							$sender->unregister[self::PLUGIN_NAME] = $selectPlayer;
							$sender->formId[self::PLUGIN_NAME][self::FORM_UNREGISTER] = $returnId;
						}
					}
				} else {
					if ($sender instanceof ConsoleCommandSender) {
						$sender->sendMessage("§c>> Permission error！");
						return true;
					}

					$langName = $this->db->getLang($sender);
					$data = $this->lang->getLang("re_unregister", $langName["lang"]);
					$returnId = $this->sendForm($sender, $data);

					$sender->unregister[self::PLUGIN_NAME] = strtolower($sender->getName());
					$sender->formId[self::PLUGIN_NAME][self::FORM_UNREGISTER] = $returnId;
				}

				return true;
				break;
		}
	}


	/**
	 * @param Player $player
	 * @param array $data
	 * @return int
	 */
	public function sendForm(Player $player, array $data)
	{
		$pk = new ModalFormRequestPacket();

		$pk->formId = mt_rand(1, 999999999);
		$pk->formData = json_encode($data);

		$player->dataPacket($pk);

		return $pk->formId;
	}


	/**
	 * @param PlayerCommandPreprocessEvent $event
	 */
	public function onPlayerCommand(PlayerCommandPreprocessEvent $event)
	{
		$player = $event->getPlayer();
		if (!$player->logined) {
			$player->sendMessage("§c>> Permission error！");
			$event->setCancelled();
		}
	}


	/**
	 * @param BlockBreakEvent $event
	 */
	public function onBreak(BlockBreakEvent $event)
	{
		$player = $event->getPlayer();
		if (!$player->logined) {
			$player->sendMessage("§c>> Permission error！");
			$event->setCancelled();			
		}
	}


	/**
	 * @param BlockPlaceEvent $event
	 */
	public function onPlace(BlockPlaceEvent $event)
	{
		$player = $event->getPlayer();
		if (!$player->logined) {
			$player->sendMessage("§c>> Permission error！");
			$event->setCancelled();			
		}
	}


	/**
	 * @param PlayerChatEvent $event
	 */
	public function onChat(PlayerChatEvent $event)
	{
		$player = $event->getPlayer();
		if (!$player->logined) {
			$player->sendMessage("§c>> Permission error！");
			$event->setCancelled();
		}
	}
}<?php
/**
 * Created by PhpStorm.
 * User: izuho
 * Date: 2018/02/12
 * Time: 22:34
 */

namespace fujiwaraizuho;

/* Base */
use pocketmine\Player;

/* Utils */
use pocketmine\utils\MainLogger;


class DB
{
	/**
	 * DB constructor.
	 * @param string $dir
	 * @param Login $owner
	 */
	public function __construct(string $dir, Login $owner)
	{
		$this->owner = $owner;

		$this->db = new \SQLite3($dir ."data.db");
		$this->db->exec("CREATE TABLE IF NOT EXISTS userdata (
				name PRIMARY KEY,
				pass,
				ip  ,
				xuid,
				lang 
		)");
	}


	/**
	 * @param Player $player
	 */
	public function register(Player $player)
	{
		$value = "INSERT INTO userdata (name, pass, ip, xuid, lang) VALUES (:name, :pass, :ip, :xuid, :lang)";
		$db = $this->db->prepare($value);

		$name = strtolower($player->getName());
		$pass = $player->pass;
		$ip   = $player->getAddress();
		$xuid = $player->getXuid();
		$lang = $player->lang;

		$pass_hash = password_hash($pass, PASSWORD_DEFAULT);

		$db->bindValue(":name", $name);
		$db->bindValue(":pass", $pass_hash);
		$db->bindValue(":ip"  , $ip);
		$db->bindValue(":xuid", $xuid);
		$db->bindValue(":lang", $lang);

		$db->execute();

		unset($player->lang);
		unset($player->pass);

		MainLogger::getLogger()->notice($name ." Register Account！");

		$player->setImmobile(false);
	}


	/**
	 * @param Player $player
	 * @return bool
	 */
	public function isRegister(Player $player)
	{
		$xuid = $player->getXuid();

		$value = "SELECT xuid FROM userdata WHERE xuid = :xuid";
		$db = $this->db->prepare($value);

		$db->bindValue(":xuid", $xuid);

		$result = $db->execute()->fetchArray(SQLITE3_ASSOC);

		return empty($result) ? false : true;
	}


	/**
	 * @param Player $player
	 */
	public function unRegister(string $name)
	{
		$data = $this->getUserData(null, $name);

		if (is_null($data)) return null;
		
		$value = "DELETE FROM userdata WHERE name = :name";
		$db = $this->db->prepare($value);

		$db->bindValue(":name", $name);

		$db->execute();

		MainLogger::getLogger()->info("§a". $name ." Deleted Account！");

		return true;
	}


	/**
	 * @param Player $player
	 * @return bool|null
	 */
	public function login(Player $player)
	{
		$name = strtolower($player->getName());
		$xuid = $player->getXuid();
		$ip   = $player->getAddress();

		$result = $this->isRegister($player);

		if ($result) {
			$data = $this->getUserData($player, $name);
			if (is_null($data)) return;
			if ($data["name"] === $name && $data["xuid"] === $xuid) {
				return $data["ip"] === $ip ? false : true;
			} else {
				return null;
			}
		}
	}


	/**
	 * @param Player $player
	 */
	public function updateIp(Player $player)
	{
		$name = strtolower($player->getName());
		$newIp = $player->getAddress();

		$value = "SELECT ip FROM userdata WHERE name = :name";
		$db = $this->db->prepare($value);

		$db->bindValue(":name", $name);

		$oldIp = $db->execute()->fetchArray(SQLITE3_ASSOC);

		if (empty($oldIp)) return null;

		$value = "UPDATE userdata SET ip = :ip WHERE name = :name";
		$db = $this->db->prepare($value);

		$db->bindValue(":name", $name);
		$db->bindValue(":ip"  , $newIp);

		$db->execute();

		MainLogger::getLogger()->notice("[". $name ."] ". $oldIp["ip"] ." => ". $newIp ." Updated IPAddress！");
	}


	/**
	 * @param Player $player
	 */
	public function updateName(string $oldName, string $newName)
	{
		$value = "SELECT name FROM userdata WHERE name = :name";
		$db = $this->db->prepare($value);

		$db->bindValue(":name", $oldName);

		$result = $db->execute()->fetchArray(SQLITE3_ASSOC);

		if (empty($result)) return null;

		$value = "UPDATE userdata SET name = :newname WHERE name = :oldname";
		$db = $this->db->prepare($value);

		$db->bindValue(":oldname", $oldName);
		$db->bindValue(":newname", $newName);

		$db->execute();

		MainLogger::getLogger()->notice($oldName ." => ". $newName ."  Updated Name！");

		return true;
	}


	/**
	 * @param $player
	 * @return array|bool
	 */
	public function getUserData($player = null, $namae)
	{
		if (!is_null($player)) {
			$name = strtolower($player->getName());
		} else {
			$name = strtolower($namae);
		}

		$data = [];

		$value = "SELECT * FROM userdata WHERE name = :name";
		$db = $this->db->prepare($value);

		$db->bindValue(":name", $name);

		$result = $db->execute()->fetchArray(SQLITE3_ASSOC);

		if (empty($result)) return null;

		foreach ($result as $key => $value) {
			$data[$key] = $value;
		}

		return $data;
	}


	/**
	 * @param Player $player
	 * @return array|bool
	 */
	public function getLang(Player $player)
	{
		$name = strtolower($player->getName());

		$value = "SELECT lang FROM userdata WHERE name = :name";
		$db = $this->db->prepare($value);

		$db->bindValue(":name", $name);

		$result = $db->execute()->fetchArray(SQLITE3_ASSOC);

		if (empty($result)) return null;

		return $result;
	}

}<?php
/**
 * Created by PhpStorm.
 * User: izuho
 * Date: 2018/02/12
 * Time: 22:33
 */

namespace fujiwaraizuho;

/* Base */
use pocketmine\event\Listener;

/* Event */
use pocketmine\event\player\PlayerLoginEvent;
use pocketmine\event\player\PlayerJoinEvent;
use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\event\server\DataPacketReceiveEvent;

/* Packet */
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;


class EventListener implements Listener
{
	private $db;
	private $owner;

	/**
	 * EventListener constructor.
	 * @param Login $owner
	 */
	public function __construct(Login $owner, DB $db, Lang $lang)
	{
		$this->owner = $owner;
		$this->db = $db;
		$this->lang = $lang;
	}


	/**
	 * @param PlayerLoginEvent $event
	 */
	public function onLogin(PlayerLoginEvent $event)
	{
		$player = $event->getPlayer();
		$result = $this->db->isRegister($player);

		for ($i = 0; $i <= 3; $i++) { 
			$player->formId[Login::PLUGIN_NAME][$i] = null;
		}

		if ($result) {
			$login = $this->db->login($player);
			if (is_null($login)) {
				$player->logined = false;
				$lang = $this->db->getLang($player);
				if (is_null($lang)) {
					$error_message = "§4ユーザーIDが変わった時は運営に連絡してください！\n§4Please contact the operation when the user ID changes!";
				} else {
					$error_message = $this->lang->getLang("kick_error_safety", $lang["lang"]);
				}
				$player->kick("§4[LoginSystem]\n".
							$error_message
						  	, false);

				$event->setCancelled();
			}
			if (!$login) {
				$player->autoLogin = true;
			} else {
				$player->login = true;
			}
		}
	}


	/**
	 * @param PlayerJoinEvent $event
	 */
	public function onJoin(PlayerJoinEvent $event)
	{
		$player = $event->getPlayer();
		$result = $this->db->isRegister($player);

		if ($result) {
			if (empty($player->autoLogin)) return; 
			if (isset($player->autoLogin)) {

				$lang = $this->db->getLang($player);
				$message = $this->lang->getLang("auto_login", $lang["lang"]);

				$player->logined = true;

				$player->sendMessage("§a>> ". $message ."！");
				unset($player->autoLogin);
			}
		} else {
			$player->register = true;
		}
	}


	/**
	 * @param PlayerMoveEvent $event
	 */
	public function onMove(PlayerMoveEvent $event)
	{
		$player = $event->getPlayer();

		if (isset($player->register)) {
			$data = [
				"type" => "modal",
				"title" => "§lLoginSystem",
				"content" => "言語を選択してください\n".
							 "Please select a language.",
				"button1" => "日本語",
				"button2" => "English"
			];

			$returnId = $this->owner->sendForm($player, $data);

			$player->formId[Login::PLUGIN_NAME][Login::FORM_LANG_SELECT] = $returnId;

			$player->setImmobile(true);

			unset($player->register);
		}

		if (isset($player->login)) {
			$langName = $this->db->getLang($player);

			$data = $this->lang->getLang("login", $langName["lang"]);

			$returnId = $this->owner->sendForm($player, $data);

			$player->formId[Login::PLUGIN_NAME][Login::FORM_LOGIN] = $returnId;

			$player->setImmobile(true);

			unset($player->login);
		}
	}


	/**
	 * @param DataPacketReceiveEvent $event
	 */
	public function onData(DataPacketReceiveEvent $event)
	{
		$packet = $event->getPacket();
		if ($packet instanceof ModalFormResponsePacket) {
			$player = $event->getPlayer();
			$formId = (int) $packet->formId;
			$formData = json_decode($packet->formData, true);

			if (!isset($player->formId)) return;
			if (!array_key_exists(Login::PLUGIN_NAME, $player->formId)) return;
			if ($formId === $player->formId[Login::PLUGIN_NAME][Login::FORM_LANG_SELECT]) {
				if ($formData) {
					$player->lang = "jpn";
				} else {
					$player->lang = "eng";
				}

				$data = $this->lang->getLang("register", $player->lang);
				
				$returnId = $this->owner->sendForm($player, $data);

				$player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER] = $returnId;
				$player->formId[Login::PLUGIN_NAME][Login::FORM_LANG_SELECT] = null;

			} else if ($formId === $player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER]) {
				if (empty($formData)) {
					$player->logined = false;
					$player->kick("§4[LoginSystem]\n".
								  "§4このサーバーはアカウント登録をしないとプレイできません！"
								 , false);

					return;
				}

				if ($formData[0] === "" || $formData[1] === "") {

					$data = $this->lang->getLang("register", $player->lang);
					$error_message = $this->lang->getLang("error_empty", $player->lang);

					$data["content"][1]["text"] = $error_message;
				
					$returnId = $this->owner->sendForm($player, $data);

					$player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER] = $returnId;
					$data["content"][1]["text"] = "";

					return;
				}

				if (strlen($formData[1]) < 8) {

					$data = $this->lang->getLang("register", $player->lang);
					$error_message = $this->lang->getLang("error_under", $player->lang);

					$data["content"][1]["text"] = $error_message;
				
					$returnId = $this->owner->sendForm($player, $data);

					$player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER] = $returnId;
					$data["content"][1]["text"] = "";

					return;
				}

				if ($formData[1] == $player->getName()) {

					$data = $this->lang->getLang("register", $player->lang);
					$error_message = $this->lang->getLang("error_notSafety", $player->lang);

					$data["content"][1]["text"] = $error_message;

					$returnId = $this->owner->sendForm($player, $data);

					$player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER] = $returnId;
					$data["content"][1]["text"] = "";

					return;
				}

				if ($formData[1] !== $formData[2]) {

					$data = $this->lang->getLang("register", $player->lang);
					$error_message = $this->lang->getLang("error_match", $player->lang);

					$data["content"][1]["text"] = $error_message;
				
					$returnId = $this->owner->sendForm($player, $data);

					$player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER] = $returnId;
					$data["content"][1]["text"] = "";

					return;
				}

				$player->pass = $formData[1];

				$this->db->register($player);

				$player->logined = true;
				$player->formId[Login::PLUGIN_NAME][Login::FORM_REGISTER] = null;

				$lang = $this->db->getLang($player);
				$register_message = $this->lang->getLang("register_message", $lang["lang"]);
				$player->sendMessage($register_message);

			} else if ($formId === $player->formId[Login::PLUGIN_NAME][Login::FORM_LOGIN]) {
				if (empty($formData)) {
					$player->logined = false;
					$lang = $this->db->getLang($player);
					$error_message = $this->lang->getLang("kick_error_login", $lang["lang"]);
					$player->kick("§4[LoginSystem]\n".
								  $error_message
								 , false);

					return;
				}

				if ($formData[1] === "") {

					$lang = $this->db->getLang($player);
					$data = $this->lang->getLang("login", $lang["lang"]);
					$error_message = $this->lang->getLang("error_empty", $lang["lang"]);

					$data["content"][1]["text"] = $error_message;
				
					$returnId = $this->owner->sendForm($player, $data);

					$player->formId[Login::PLUGIN_NAME][Login::FORM_LOGIN] = $returnId;
					$data["content"][1]["text"] = "";

					return;
				}

				if (strlen($formData[1]) < 8) {

					$lang = $this->db->getLang($player);
					$data = $this->lang->getLang("login", $lang["lang"]);
					$error_message = $this->lang->getLang("login_error_under", $lang["lang"]);

					$data["content"][1]["text"] = $error_message;
				
					$returnId = $this->owner->sendForm($player, $data);

					$player->formId[Login::PLUGIN_NAME][Login::FORM_LOGIN] = $returnId;
					$data["content"][1]["text"] = "";

					return;
				}

				$data = $this->db->getUserData($player, null);

				$result = password_verify($formData[1], $data["pass"]);

				$player->formId[Login::PLUGIN_NAME][Login::FORM_LOGIN] = null;

				if ($result) {
					$this->db->updateIp($player);
					$lang = $this->db->getLang($player);
					$update_ip = $this->lang->getLang("update_ip", $lang["lang"]);
					$login_message = $this->lang->getLang("login_message", $lang["lang"]);
					$player->sendMessage($login_message);
					$player->sendMessage($update_ip);
					$player->setImmobile(false);
					$player->logined = true;
				} else {
					$player->logined = false;
					$lang = $this->db->getLang($player);
					$error_message = $this->lang->getLang("kick_error_safety", $lang["lang"]);
					$player->kick("§4[LoginSystem]\n".
								  $error_message
								 , false);
				}
			} else if ($player->formId[Login::PLUGIN_NAME][Login::FORM_UNREGISTER]) {
				if (!$formData) {
					$unRegister = $this->db->unRegister($player->unregister[Login::PLUGIN_NAME]);

					if (is_null($unRegister)) {
						$player->sendMessage("§c>> Account NotFound！");
						return;
					}

					$allPlayer = $this->owner->getServer()->getOnlinePlayers();

					foreach ($allPlayer as $player) {
						$name = $player->getName();
						$players[] = $name;
					}

					if (in_array($player->unregister[Login::PLUGIN_NAME], $players)) {
						$player = $this->owner->getServer()->getPlayer($player->unregister[Login::PLUGIN_NAME]);
						$player->kick("§c[LoginSystem]\n".
									  "ログインデータが削除されました、再度ログインしてください！\n".
									  "Login data deleted, please login again!"
									  , false);
					}

					$player->sendMessage("§a>> Success！");
				}

				$player->formId[Login::PLUGIN_NAME][Login::FORM_UNREGISTER] = null;
				unset($player->unregister[Login::PLUGIN_NAME]);
			}
		}
	}
}
d7[^
J_   GBMB