Ejemplo n.º 1
0
 public static function checkSelectors(array $args, CommandSender $sender, Player $player)
 {
     foreach ($args as $name => $value) {
         switch ($name) {
             case "x":
             case "y":
             case "z":
                 if (isset($args["d" . $name])) {
                     break;
                 }
                 $delta = 0;
                 if ($value[0] === "~" and $sender instanceof Position) {
                     $delta += $player->{$name};
                 }
                 $actual = $sender->{$name};
                 if ((int) $delta !== (int) $actual) {
                     return false;
                 }
                 break;
             case "r":
                 if ($sender instanceof Position) {
                     if ($sender->distance($player) > floatval($value)) {
                         return false;
                     }
                     break;
                 }
                 return false;
             case "rm":
                 if ($sender instanceof Position) {
                     if ($sender->distance($player) < floatval($value)) {
                         return false;
                     }
                     break;
                 }
                 return false;
             case "m":
                 $mode = intval($value);
                 if ($mode === -1) {
                     break;
                     // what is the point of adding this (in PC) when they can just safely leave this out?
                 }
                 if ($mode !== $player->getGamemode()) {
                     return false;
                 }
                 break;
             case "name":
                 if ($value !== $sender->getName()) {
                     return false;
                 }
                 break;
             case "name!":
                 if ($value === $sender->getName()) {
                     return false;
                 }
                 break;
                 // TODO argument "c" (count)
             // TODO argument "c" (count)
             case "rx":
                 if ($player->yaw > floatval($value)) {
                     return false;
                 }
                 break;
             case "rxm":
                 if ($player->yaw < floatval($value)) {
                     return false;
                 }
                 break;
             case "ry":
                 if ($player->pitch > floatval($value)) {
                     return false;
                 }
                 break;
             case "rym":
                 if ($player->pitch < floatval($value)) {
                     return false;
                 }
                 break;
         }
     }
     foreach (["x", "y", "z"] as $v) {
         if (isset($args["d" . $v])) {
             if (isset($args[$v])) {
                 $from = (int) $args[$v];
             } elseif ($sender instanceof Position) {
                 // lower priority
                 $from = $sender->{$v};
             } else {
                 continue;
             }
             $to = (int) $args["d" . $v];
             $actual = $player->{$v};
             if ($from <= $actual and $actual <= $to) {
                 break;
             }
             return false;
         }
     }
     return true;
 }