diff --git a/src/main/javascript/alias/alias.js b/src/main/javascript/alias/alias.js index 0af7908..c4cf0d7 100644 --- a/src/main/javascript/alias/alias.js +++ b/src/main/javascript/alias/alias.js @@ -1,73 +1,75 @@ plugin("alias", { - help: function(){ - return [ - "/jsp alias set : Set a shortcut/alias for one or more commands (separated by ';')\n" + - "For example: '/jsp alias set sunny time set 4000; weather clear'\n" + - "/jsp sunny (is the same as..\n/time set 4000\n/weather clear", - "/jsp alias delete : Removes a shortcut/alias", - "/jsp alias list : shows a list of the player's command aliases", - "/jsp alias help : Shows this message" - ]; - }, - set: function(player, alias, commands){ - var aliases = this.store.players; - var name = player.name; - aliases[name] = aliases[name] || {}; - aliases[name][alias] = commands; - }, - remove: function(player, alias){ - var aliases = this.store.players; - if (aliases[player.name]) - delete aliases[player.name][alias]; - }, - list: function(player){ - var result = []; - var aliases = this.store.players[player.name]; - for (var a in aliases) - result.push(a + " = " + aliases[a].join(";")); - return result; - } + help: function(){ + return [ + "/jsp alias set : Set a shortcut/alias for one or more commands (separated by ';')\n" + + "For example: '/jsp alias set sunny time set 4000; weather clear'\n" + + "/jsp sunny (is the same as..\n/time set 4000\n/weather clear", + "/jsp alias delete : Removes a shortcut/alias", + "/jsp alias list : shows a list of the player's command aliases", + "/jsp alias help : Shows this message" + ]; + }, + set: function(player, alias, commands){ + var aliases = this.store.players; + var name = player.name; + aliases[name] = aliases[name] || {}; + aliases[name][alias] = commands; + }, + remove: function(player, alias){ + var aliases = this.store.players; + if (aliases[player.name]) + delete aliases[player.name][alias]; + }, + list: function(player){ + var result = []; + var aliases = this.store.players[player.name]; + for (var a in aliases) + result.push(a + " = " + aliases[a].join(";")); + return result; + } },true); alias.store.players = alias.store.players || {}; command("alias",function(params){ - /* - this function also intercepts command options for /jsp - */ - if (params[0] === "help"){ - self.sendMessage(alias.help()); - return; - } - if (params[0] === "set"){ - var aliasCmd = params[1]; - var cmdStr = params.slice(2).join(' '); - var cmds = cmdStr.split(';'); - alias.set(self,aliasCmd,cmds); - return; - } - if (params[0] === "delete"){ - alias.remove(self,params[1]); - return ; - } - if (params[0] === "list"){ - self.sendMessage(alias.list(self)); - return; - } - - var playerHasAliases = alias.store.players[self.name]; - if (!playerHasAliases) - return false; - // is it an alias? - var commands = playerHasAliases[params[0]]; - if (!commands) - return false; - for (var i = 0;i < commands.length; i++){ - // fill in template - var cmd = commands[i]; - cmd = cmd.replace(/{([0-9]*)}/g,function(dummy,index){ return params[index];}) - self.performCommand(cmd); - } - return true; + /* + this function also intercepts command options for /jsp + */ + if (params[0] === "help"){ + self.sendMessage(alias.help()); + return; + } + if (params[0] === "set"){ + var aliasCmd = params[1]; + var cmdStr = params.slice(2).join(' '); + var cmds = cmdStr.split(';'); + alias.set(self,aliasCmd,cmds); + return; + } + if (params[0] === "delete"){ + alias.remove(self,params[1]); + return ; + } + if (params[0] === "list"){ + self.sendMessage(alias.list(self)); + return; + } + if (params.length == 0) + return self.sendMessage(alias.help()); + + var playerHasAliases = alias.store.players[self.name]; + if (!playerHasAliases) + return false; + // is it an alias? + var commands = playerHasAliases[params[0]]; + if (!commands) + return false; + for (var i = 0;i < commands.length; i++){ + // fill in template + var cmd = commands[i]; + cmd = cmd.replace(/{([0-9]*)}/g,function(dummy,index){ return params[index] || "";}) + self.performCommand(cmd); + } + return true; },["help","set","delete","list"],true); diff --git a/src/main/javascript/core/_scriptcraft.js b/src/main/javascript/core/_scriptcraft.js index 87848b5..b759cbe 100644 --- a/src/main/javascript/core/_scriptcraft.js +++ b/src/main/javascript/core/_scriptcraft.js @@ -21,7 +21,7 @@ var global = this; var verbose = verbose || false; /* - wph 20130124 - make self, plugin and bukkit public - these are far more useful now that tab-complete works. + wph 20130124 - make self, plugin and server public - these are far more useful now that tab-complete works. */ var server = org.bukkit.Bukkit.server; // @@ -128,7 +128,6 @@ var server = org.bukkit.Bukkit.server; Save a javascript object to a file (saves using JSON notation) */ var _save = function(object, filename){ - print(filename); var objectToStr = null; try{ objectToStr = JSON.stringify(object); @@ -175,7 +174,8 @@ var server = org.bukkit.Bukkit.server; command management - allow for non-ops to execute approved javascript code. */ var _commands = {}; - var _command = function(name,func,options,intercepts){ + var _command = function(name,func,options,intercepts) + { if (typeof name == "undefined"){ // it's an invocation from the Java Plugin! if (__cmdArgs.length === 0) @@ -266,13 +266,37 @@ var server = org.bukkit.Bukkit.server; var __onTabCompleteJSP = function() { var result = global.__onTC_result; var args = global.__onTC_args; - var cmd = _commands[args[0]]; - if (cmd) - for (var i = 0;i < cmd.options.length; i++) - result.add(cmd.options[i]); - else - for (var i in _commands) - result.add(i); + var cmdInput = args[0]; + var cmd = _commands[cmdInput]; + if (cmd){ + var opts = cmd.options; + var len = opts.length; + if (args.length == 1){ + for (var i = 0;i < len; i++) + result.add(opts[i]); + }else{ + // partial e.g. /jsp chat_color dar + for (var i = 0;i < len; i++){ + if (opts[i].indexOf(args[1]) == 0){ + result.add(opts[i]); + } + } + } + }else{ + if (args.length == 0){ + for (var i in _commands) + result.add(i); + }else{ + // partial e.g. /jsp al + // should tabcomplete to alias + // + for (var c in _commands){ + if (c.indexOf(cmdInput) == 0){ + result.add(c); + } + } + } + } return result; }; /*