PageRenderTime 32ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Login/src/DeBePlugins/Login/Login.php

https://gitlab.com/Skull3x/Plugins
PHP | 248 lines | 243 code | 4 blank | 1 comment | 18 complexity | 9e86f8f67ae392fcc4227430553ccd46 MD5 | raw file
  1. <?php
  2. // This Plugin is Made by DeBe (hu6677@naver.com)
  3. namespace DeBePlugins\Login;
  4. use pocketmine\plugin\PluginBase;
  5. use pocketmine\command\Command;
  6. use pocketmine\command\CommandSender;
  7. use pocketmine\event\Listener;
  8. use pocketmine\event\player\PlayerJoinEvent;
  9. use pocketmine\event\player\PlayerRespawnEvent;
  10. use pocketmine\event\player\PlayerQuitEvent;
  11. use pocketmine\event\player\PlayerCommandPreprocessEvent;
  12. use pocketmine\event\player\PlayerChatEvent;
  13. use pocketmine\event\player\PlayerMoveEvent;
  14. use pocketmine\event\player\PlayerInteractEvent;
  15. use pocketmine\event\block\BlockBreakEvent;
  16. use pocketmine\event\block\BlockPlaceEvent;
  17. use pocketmine\event\player\PlayerDropItemEvent;
  18. use pocketmine\event\player\PlayerItemConsumeEvent;
  19. use pocketmine\event\inventory\InventoryOpenEvent;
  20. use pocketmine\event\entity\EntityDamageEvent;
  21. use pocketmine\utils\Config;
  22. use pocketmine\utils\TextFormat;
  23. use pocketmine\Player;
  24. class Login extends PluginBase implements Listener{
  25. public function onEnable(){
  26. $this->player = [];
  27. $this->spawn = [];
  28. $this->getServer()->getPluginManager()->registerEvents($this, $this);
  29. $this->loadYml();
  30. foreach($this->getServer()->getOnlinePlayers() as $p){
  31. $this->sendLogin($p,true);
  32. $this->spawn[strtolower($p->getName())] = $p->getPosition();
  33. }
  34. }
  35. public function onCommand(CommandSender $sender, Command $cmd, $label, array $sub){
  36. $rm = TextFormat::RED . "Usage: /" . $cmd->getName();
  37. $mm = "[Login] ";
  38. $ik = $this->isKorean();
  39. $cmd = strtolower($cmd->getName());
  40. if($sender->getName() == "CONSOLE" && $cmd !== "loginop"){
  41. $sender->sendMessage($mm . ($ik ? "게임내에서만 사용가능합니다.": "Please run this command in-game"));
  42. return true;
  43. }elseif(!isset($sub[0]) || $sub[0] == "") return false;
  44. switch($cmd){
  45. case "login":
  46. if($this->isLogin($sender)){
  47. $sender->sendMessage($mm . ($ik ? "이미 로그인되었습니다.": "Already logined"));
  48. }else{
  49. $this->login($sender,$sub[0],false,isset($sub[1]) ? $sub[1] : "");
  50. }
  51. break;
  52. case "register":
  53. if($this->isRegister($sender)){
  54. $sender->sendMessage($mm . ($ik ? "이미 가입되었습니다.": "Already registered"));
  55. }elseif(!isset($sub[1]) || $sub[1] == "" || $sub[0] !== $sub[1]){
  56. return false;
  57. }elseif(strlen($sub[0]) < 5){
  58. $sender->sendMessage($mm . ($ik ? "비밀번호가 너무 짧습니다.": "Password is too short"));
  59. return false;
  60. }else{
  61. $this->register($sender,$sub[0]);
  62. if(!$sender->isOp()) $this->login($sender,$sub[0]);
  63. }
  64. break;
  65. case "loginop":
  66. if(!isset($sub[1]) || $sub[1] == "" || !isset($this->lg[strtolower($sub[1])])){
  67. $sender->sendMessage($mm . ($ik ? "<플레이어명>을 확인해주세요.": "Please check <PlayerName>"));
  68. return false;
  69. }else{
  70. $sub[1] = strtolower($sub[1]);
  71. $pass = $this->lg[strtolower($sub[1])]["PW"];
  72. switch(strtolower($sub[0])){
  73. case "view":
  74. case "v":
  75. case "password":
  76. case "pw":
  77. case "비밀번호":
  78. case "비번":
  79. $sender->sendMessage($mm . $sub[1] . ($ik ? "님의 비밀번호 : ": "'s Password : ") . $pass);
  80. break;
  81. case "unregister":
  82. case "ur":
  83. case "u":
  84. case "탈퇴":
  85. unset($this->lg[$sub[1]]);
  86. $sender->sendMessage($mm . ($ik ? "$sub[1] 님의 비밀번호을 제거합니다." : "Delete $sub[1] 's password"));
  87. break;
  88. case "change":
  89. case "c":
  90. if(!isset($sub[2]) || $sub[2] == ""){
  91. $sender->sendMessage($mm . ($ik ? "<플레이어명>을 확인해주세요.": "Please check <PlayerName>"));
  92. return false;
  93. }else{
  94. $this->lg[$sub[1]]["PW"] = $sub[2];
  95. $sender->sendMessage($mm . $sub[1] . ($ik ? "님의 비밀번호를 바꿨습니다. : ": "'s Password is changed : ") . "$pass => $sub[2]");
  96. }
  97. break;
  98. }
  99. }
  100. $this->saveYml();
  101. break;
  102. default:
  103. return false;
  104. break;
  105. }
  106. return true;
  107. }
  108. public function onPlayerJoin(PlayerJoinEvent $event){
  109. $this->sendLogin($event->getPlayer(),true);
  110. }
  111. public function onPlayerRespawn(PlayerRespawnEvent $event){
  112. $this->spawn[strtolower($event->getPlayer()->getName())] = $event->getRespawnPosition();
  113. }
  114. public function onPlayerQuit(PlayerQuitEvent $event){
  115. $this->unLogin($event->getPlayer());
  116. }
  117. public function onPlayerCommandPreprocess(PlayerCommandPreprocessEvent $event){
  118. $p = $event->getPlayer();
  119. if(!$this->isLogin($p) && !in_array(strtolower(explode(" ",substr($event->getMessage(),1))[0]),["register","login"])) $event->setCancelled($this->sendLogin($p));
  120. }
  121. public function onPlayerChat(PlayerChatEvent $event){
  122. $p = $event->getPlayer();
  123. if(!$this->isLogin($p)){
  124. $this->sendLogin($p);
  125. $event->setCancelled();
  126. }
  127. }
  128. public function onPlayerMove(PlayerMoveEvent $event){
  129. $p = $event->getPlayer();
  130. if(!$this->isLogin($p)) $p->teleport($this->spawn[strtolower($p->getName())]);
  131. }
  132. public function onPlayerInteract(PlayerInteractEvent $event){
  133. $event->setCancelled($this->isLogin($event->getPlayer()) ? false: true);
  134. }
  135. public function onBlockBreak(BlockBreakEvent $event){
  136. $event->setCancelled($this->isLogin($event->getPlayer()) ? false: true);
  137. }
  138. public function onBlockPlace(BlockPlaceEvent $event){
  139. $event->setCancelled($this->isLogin($event->getPlayer()) ? false: true);
  140. }
  141. public function onPlayerDropItem(PlayerDropItemEvent $event){
  142. $event->setCancelled($this->isLogin($event->getPlayer()) ? false: true);
  143. }
  144. public function onPlayerItemConsume(PlayerItemConsumeEvent $event){
  145. $event->setCancelled($this->isLogin($event->getPlayer()) ? false: true);
  146. }
  147. public function onInventoryOpen(InventoryOpenEvent $event){
  148. if($event->getPlayer()->getInventory() !== $event->getInventory()){
  149. $event->setCancelled($this->isLogin($event->getPlayer()) ? false: true);
  150. }
  151. }
  152. public function onEntityDamage(EntityDamageEvent $event){
  153. $event->setCancelled($this->isLogin($event->getEntity()) ? false: true);
  154. }
  155. public function register($p,$pw){
  156. $p->sendMessage("[Login] " . ($this->isKorean() ? "가입 완료": "Register to complete"));
  157. $this->lg[strtolower($p->getName())] = ["PW" => $pw, "IP" => $p->getAddress()];
  158. $this->saveYml();
  159. }
  160. public function isRegister($p){
  161. return $p instanceof Player && isset($this->lg[strtolower($p->getName())]) ? true: false;
  162. }
  163. public function login($p,$pw = "",$auto = false,$opw = ""){
  164. if($this->isLogin($p)) return;
  165. $n = strtolower($p->getName());
  166. $ik = $this->isKorean();
  167. if(!$auto){
  168. if($pw !== $this->lg[$n]["PW"]){
  169. $p->sendMessage("[Login] " . ($ik ? "로그인 실패": "Login to failed"));
  170. return false;
  171. }
  172. $op = (new Config($this->getServer()->getDataPath() . "/plugins/! DeBePlugins/" . "! Login-OP.yml", Config::YAML, ["Op" => false, "PW" => "op"]))->getAll();
  173. if($p->isOp() && $op["Op"] && $op["PW"] !== $opw){
  174. $p->sendMessage("[Login] " . ($ik ? "로그인 실패": "Login to failed"));
  175. $p->sendMessage("/Login " . ($ik ? "<비밀번호> <오피비밀번호>" : "<Password> <OP PassWord>"));
  176. return true;
  177. }
  178. }
  179. $this->player[$n] = true;
  180. $this->lg[$n]["IP"] = $p->getAddress();
  181. $p->sendMessage("[Login] " . ($auto ? ($ik ? "자동": "Auto"): "") . ($ik ? "로그인 완료": "Login to complete"));
  182. $this->saveYml();
  183. return true;
  184. }
  185. public function isLogin($p){
  186. return $p instanceof Player && isset($this->player[strtolower($p->getName())]) ? true: false;
  187. }
  188. public function unLogin($p){
  189. unset($this->player[strtolower($p->getName())]);
  190. }
  191. public function sendLogin($p,$l = false){
  192. if($p instanceof Player){
  193. $mm = "[Login] ";
  194. $ik = $this->isKorean();
  195. $n = strtolower($p->getName());
  196. if($this->isLogin($p)){
  197. }elseif(!isset($this->lg[$n])){
  198. $p->sendMessage($mm . ($ik ? "당신은 가입되지 않았습니다.\n/Register <비밀번호> <비밀번호>": "You are not registered.\n/Register <Password> <Password>"));
  199. }elseif($l && $this->lg[$n]["IP"] == $p->getAddress()){
  200. $this->login($p,"",true);
  201. }else{
  202. $p->sendMessage($mm . ($ik ? "당신은 로그인하지 않았습니다.\n/Login <비밀번호>": "You are not logined.\n/Login <Password>"));
  203. }
  204. }
  205. return true;
  206. }
  207. public function loadYml(){
  208. @mkdir($this->getServer()->getDataPath() . "/plugins/! DeBePlugins/");
  209. $this->login = new Config($this->getServer()->getDataPath() . "/plugins/! DeBePlugins/" . "Login.yml", Config::YAML);
  210. $this->lg = $this->login->getAll();
  211. new Config($this->getServer()->getDataPath() . "/plugins/! DeBePlugins/" . "! Login-OP.yml", Config::YAML, ["Op" => false, "PW" => "op"]);
  212. }
  213. public function saveYml(){
  214. ksort($this->lg);
  215. $this->login->setAll($this->lg);
  216. $this->login->save();
  217. $this->loadYml();
  218. }
  219. public function isKorean(){
  220. return (new Config($this->getServer()->getDataPath() . "/plugins/! DeBePlugins/" . "! Korean.yml", Config::YAML, ["Korean" => false ]))->get("Korean");
  221. }
  222. }