1: <?php
2: namespace aliuly\common;
3:
4: use pocketmine\command\CommandSender;
5: use pocketmine\command\Command;
6: use aliuly\common\mc;
7:
8: 9: 10:
11: class SubCommandMap {
12: public function __construct() {
13: $this->executors = [];
14: $this->help = [];
15: $this->usage = [];
16: $this->aliases = [];
17: $this->permission = [];
18: }
19: 20: 21:
22: public function getCommandCount() {
23: return count($this->executors);
24: }
25: 26: 27:
28: public function dispatchSCmd(CommandSender $sender,Command $cmd,array $args,$data=null) {
29: if (count($args) == 0) {
30: $sender->sendMessage(mc::_("No sub-command specified"));
31: return false;
32: }
33: $scmd = strtolower(array_shift($args));
34: if (isset($this->aliases[$scmd])) {
35: $scmd = $this->aliases[$scmd];
36: }
37: if (!isset($this->executors[$scmd])) {
38: $sender->sendMessage(mc::_("Unknown sub-command %2% (try /%1% help)",$cmd->getName(),$scmd));
39: return false;
40: }
41: if (isset($this->permission[$scmd])) {
42: if (!$sender->hasPermission($this->permission[$scmd])) {
43: $sender->sendMessage(mc::_("You are not allowed to do this"));
44: return true;
45: }
46: }
47: $callback = $this->executors[$scmd];
48: if ($callback($sender,$cmd,$scmd,$data,$args)) return true;
49: if (isset($this->executors["help"])) {
50: $callback = $this->executors["help"];
51: return $callback($sender,$cmd,$scmd,$data,["usage"]);
52: }
53: return false;
54: }
55: 56: 57: 58: 59: 60:
61: public function registerSCmd($cmd,$callable,$opts) {
62: $cmd = strtolower($cmd);
63: $this->executors[$cmd] = $callable;
64:
65: if (isset($opts["help"])) {
66: $this->help[$cmd] = $opts["help"];
67: ksort($this->help);
68: }
69: if (isset($opts["usage"])) $this->usage[$cmd] = $opts["usage"];
70: if (isset($opts["permission"])) $this->permission[$cmd] = $opts["permission"];
71: if (isset($opts["aliases"])) {
72: foreach ($opts["aliases"] as $alias) {
73: $this->aliases[$alias] = $cmd;
74: }
75: }
76: }
77:
78: public function getUsage($scmd) {
79: return isset($this->usage[$scmd]) ? $this->usage[$scmd] : null;
80: }
81: public function getAlias($scmd) {
82: return isset($this->aliases[$scmd]) ? $this->aliases[$scmd] : null;
83: }
84: public function getHelpMsg($scmd) {
85: return isset($this->help[$scmd]) ? $this->help[$scmd] : null;
86: }
87: public function getHelp() {
88: return $this->help;
89: }
90: public function getAliases() {
91: return $this->aliases;
92: }
93: }
94: