Skip to content

Instantly share code, notes, and snippets.

@Connicpu
Created August 30, 2013 17:00
Show Gist options
  • Save Connicpu/6392036 to your computer and use it in GitHub Desktop.
Save Connicpu/6392036 to your computer and use it in GitHub Desktop.
function registerCommand(data, func) {
var commandExecClass = plugin["class"].classLoader.loadClass("net.connorcpu.plugjs.JsCommandExecutor");
var newCommand = function() {
var commandClass = plugin["class"].classLoader.loadClass("net.connorcpu.plugjs.JsCommand");
var commandEx = (function(__func__) {
var state = { func: __func__, permTest: function(p){return true;} };
var object = {
execute: function(sender, label, args) {
if (!this.getState().permTest(sender)) {
return true;
}
try {
label = _s(label);
args = stringArray(_a(args));
var flags = [];
if (data.flags) {
for (var i in args) {
if (/^\-([a-z]+)/i.test(args[i])) {
for (var k = 1; k < args[i].length; ++k) {
flags.push(args[i][k]);
}
args.splice(i--, 1);
}
}
}
var result = this.getState().func(sender, label, args, flags);
if (result == false) {
sender.sendMessage(data.usage.replace(/\<command\>/g, _s(label)));
};
return true;
} catch(ex) {
if (typeof(ex) == 'string') {
sender.sendMessage("\xA7c" + ex);
} else {
sender.sendMessage("\xA7cAn error occured executing your command");
log(ex, 'c');
}
return true;
}
},
getState: function() { return state; }
};
return loader.Interface(object, commandClass);
})(func);
data.description = data.description || "";
data.usage = data.usage || "";
data.aliases = data.aliases || [];
var cmd = plugin.createCommand(data.name, data.description, data.usage, data.aliases, commandEx);
if (data.permission) {
cmd.permission = data.permission;
if (data.permissionMessage) {
cmd.executor.state.permTest = function(p) {
if (cmd.testPermissionSilent(p)) {
return true;
} else {
p.sendMessage(data.permissionMessage);
return false;
}
}
} else {
cmd.executor.state.permTest = function(p) {
return cmd.testPermission(p);
}
}
}
return cmd;
}
var command;
if ((command = loader.server.commandMap.getCommand(data.name)) && command["class"].equals(commandExecClass)) {
log("Unregistering old command '" + data.name + "'", 'e', 'verbose');
var list = _a(loader.server.commandMap.commands);
for (var i = 0; i < list.length; ++i) {
if (_s(list[i].name) == data.name) {
loader.server.commandMap.commands.remove(list[i]);
}
}
}
log ("Registering new command '" + data.name + "'", 'e', 'verbose');
loader.server.commandMap.register("js", newCommand());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment