Overview

Namespaces

  • aliuly
    • common
      • selectors
    • loader
  • xPaw

Classes

  • aliuly\common\ArmorItems
  • aliuly\common\BasicCli
  • aliuly\common\BasicHelp
  • aliuly\common\BasicPlugin
  • aliuly\common\ChatSession
  • aliuly\common\Cmd
  • aliuly\common\CmdSelector
  • aliuly\common\ExpandVars
  • aliuly\common\FastTransfer
  • aliuly\common\FileUtils
  • aliuly\common\FreezeSession
  • aliuly\common\GetMotd
  • aliuly\common\GetMotdAsyncTask
  • aliuly\common\InvisibleSession
  • aliuly\common\InvUtils
  • aliuly\common\ItemName
  • aliuly\common\mc
  • aliuly\common\mc2
  • aliuly\common\MoneyAPI
  • aliuly\common\MPMU
  • aliuly\common\Npc
  • aliuly\common\PermUtils
  • aliuly\common\PluginAsyncTask
  • aliuly\common\PluginCallbackTask
  • aliuly\common\PMScript
  • aliuly\common\QueryAsyncTask
  • aliuly\common\Rcon
  • aliuly\common\RconTask
  • aliuly\common\selectors\All
  • aliuly\common\selectors\AllEntity
  • aliuly\common\selectors\BaseSelector
  • aliuly\common\selectors\Random
  • aliuly\common\Session
  • aliuly\common\ShieldSession
  • aliuly\common\ShoppingCart
  • aliuly\common\SignUtils
  • aliuly\common\SkinUtils
  • aliuly\common\SpySession
  • aliuly\common\SubCommandMap
  • aliuly\common\TPUtils
  • aliuly\loader\Main
  • xPaw\MinecraftQuery

Exceptions

  • xPaw\MinecraftQueryException
  • Overview
  • Namespace
  • Class
  1: <?php
  2: namespace aliuly\common;
  3: //= CmdSelector
  4: //:
  5: //: This adds "@" prefixes for commands.
  6: //: See
  7: //: [Command Prefixes](http://minecraft.gamepedia.com/Commands#Target_selector_arguments)
  8: //: for an explanation on prefixes.
  9: //:
 10: //: This only implements the following prefixes:
 11: //:
 12: //: - @a - all players
 13: //: - @e - all entities (including players)
 14: //: - @r - random player/entity
 15: //:
 16: //: The following selectors are implemented:
 17: //:
 18: //: - c: (only for @r),count
 19: //: - m: game mode
 20: //: - type: entity type, use Player for player.
 21: //: - name: player's name
 22: //: - w: world
 23: //:
 24: use aliuly\common\mc;
 25: 
 26: use aliuly\common\selectors\BaseSelector;
 27: use aliuly\common\selectors\All;
 28: use aliuly\common\selectors\AllEntity;
 29: use aliuly\common\selectors\Random;
 30: 
 31: use pocketmine\Player;
 32: use pocketmine\Server;
 33: use pocketmine\entity\Entity;
 34: use pocketmine\command\CommandSender;
 35: 
 36: /**
 37:  * Implements Minecraft Command selectors.  See
 38:  * [Command Prefixes](http://minecraft.gamepedia.com/Commands#Target_selector_arguments)
 39:  * for more info.
 40:  *
 41:  */
 42: abstract class CmdSelector {
 43:   /**
 44:    * Expand command selectors.
 45:    * Returns an array with string substitutions or `false` if no expansions
 46:    * occurred.
 47:    *
 48:    * @param Server $server - Server context
 49:    * @param CommandSender $sender - context executing this command
 50:    * @param str $cmdline - command line to expand
 51:    * @param int $max - max number of expansions
 52:    * @return str[]|false
 53:    */
 54:   static public function expandSelectors(Server $server, CommandSender $sender, $cmdline, $max= 100) {
 55:         $tokens = preg_split('/\s+/',$cmdline);
 56: 
 57:         $res = [ $tokens ];
 58:         $ret = false;
 59: 
 60:         foreach ($tokens as $argc=>$argv){
 61:             if (!$argc) continue; // Trivial case...
 62:             if (substr($argv,0,1) !== "@" ) continue;
 63: 
 64:             $selector = substr($argv, 1);
 65:             $sargs = [];
 66:             if(($i = strpos($selector, "[")) !== false){
 67:                 foreach (explode(",",substr($selector,$i+1,-1)) as $kv) {
 68:                     $kvp = explode("=",$kv,2);
 69:                     if (count($kvp) != 2) {
 70:                         $sender->sendMessage(mc::_("Selector: invalid argument %1%",$kv));
 71:                         continue;
 72:                     }
 73:                     $sargs[$kvp[0]] = strtolower($kvp[1]);
 74:                 }
 75:                 $selector = substr($selector,0,$i);
 76:             }
 77:             $results = self::dispatchSelector($server, $sender , $selector, $sargs);
 78:             if (!is_array($results) || count($results) == 0) continue;
 79:             $ret = true;
 80:             $new = [];
 81: 
 82:             foreach ($res as $i) {
 83:                 foreach ($results as $j) {
 84:                     $tmpLine = $i;
 85:                     $tmpLine[$argc] = $j;
 86:                     $new[] = $tmpLine;
 87:                     if (count($new) > $max) break;
 88:                 }
 89:                 if (count($new) > $max) break;
 90:             }
 91:             $res = $new;
 92:         }
 93:         if (!$ret) return false;
 94:         $new = [];
 95:         foreach ($res as $i) {
 96:             $new[] = implode(" ",$i);
 97:         }
 98:         return $new;
 99:     }
100: 
101:   static protected function dispatchSelector(Server $server, CommandSender $sender,$selector,array $args) {
102:         switch ($selector) {
103:             case "a":
104:               return All::select($server, $sender , $args);
105:             case "e":
106:                 return AllEntity::select($server, $sender, $args);
107:             case "r":
108:               return Random::select($server, $sender, $args);
109:           //case "p":
110:         }
111:         return null;
112:     }
113: }
114: 
API documentation generated by ApiGen