Esempio n. 1
0
 public function eazyCommand($event)
 {
     if ($event->isCancelled()) {
         return false;
     }
     if ($event instanceof PlayerCommandPreprocessEvent || $event instanceof PlayerChatEvent) {
         $cmd = $event instanceof PlayerChatEvent ? $event->getMessage() : substr($event->getMessage(), 1);
         $sender = $event->getPlayer();
         $ip = true;
     } else {
         $cmd = $event->getCommand();
         $sender = $event->getSender();
         $ip = false;
     }
     if (!$sender->hasPermission("mineblock.eazycommand.use")) {
         return false;
     }
     $arr = explode(" ", $cmd);
     $scl = [];
     $ps = $this->getServer()->getOnlinePlayers();
     foreach ($arr as $k => $v) {
         if (strpos($v, "@") === 0) {
             switch (substr($v, 1)) {
                 case "player":
                 case "p":
                     $arr[$k] = $sender->getName();
                     break;
                 case "x":
                     if ($ip) {
                         $arr[$k] = $sender->x;
                     }
                     break;
                 case "y":
                     if ($ip) {
                         $arr[$k] = $sender->y;
                     }
                     break;
                 case "z":
                     if ($ip) {
                         $arr[$k] = $sender->z;
                     }
                     break;
                 case "world":
                 case "w":
                     if ($ip) {
                         $arr[$k] = $sender->getLevel()->getName();
                     }
                     break;
                 case "all":
                 case "a":
                     if ($sender->isOp() && count($ps) > 0) {
                         $scl[] = $k;
                     }
                     break;
                 case "random":
                 case "r":
                     $arr[$k] = count($ps) < 1 ? "" : $ps[array_rand($ps)]->getName();
                     break;
                 case "server":
                 case "s":
                     $arr[$k] = $this->getServer()->getServerName();
                     break;
                 case "version":
                 case "v":
                     $arr[$k] = $this->getServer()->getApiVersion();
                     break;
                 case "mineblock":
                 case "d":
                     $arr[$k] = ["데베", "MineBlock", "데베플러그인", "MineBlock"][rand(0, 3)];
                     break;
             }
         }
     }
     foreach ($arr as $k => $v) {
         $arr[$k] = str_replace([".@", "_@", "-@"], ["@", "@", "@"], $v);
     }
     if (count($scl) !== 0) {
         $event->setCancelled();
         foreach ($ps as $p) {
             foreach ($scl as $v) {
                 $arr[$v] = $p->getName();
             }
             $cmd = implode(" ", $arr);
             $ep = false;
             if ($event instanceof PlayerCommandPreprocessEvent) {
                 $ev = new PlayerCommandPreprocessEvent($sender, "/" . $cmd);
                 $ep = true;
             } elseif ($event instanceof PlayerChatEvent) {
                 $this->getServer()->getPluginManager()->callEvent($ev = new PlayerChatEvent($sender, $cmd));
                 if (!$ev->isCancelled()) {
                     $this->getServer()->broadcastMessage(sprintf($ev->getFormat(), $ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRscipients());
                 }
                 return false;
             } else {
                 $ev = new ServerCommandEvent($sender, $cmd);
             }
             $this->getServer()->getPluginManager()->callEvent($ev);
             if (!$ev->isCancelled()) {
                 $this->getServer()->dispatchCommand($sender, $ep ? substr($ev->getMessage(), 1) : $ev->getCommand());
             }
         }
         return false;
     } else {
         return implode(" ", $arr);
     }
 }