summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-02-28 00:30:59 +0000
committerDinnerbone <dinnerbone@dinnerbone.com>2011-02-28 00:30:59 +0000
commit95d92e406efe8f0976f4a0fa7b8989af24592bcc (patch)
treecb5842bd713710cdf65b13d9dd6f02e61f0cfeb3 /src
parent27b680375f31a8868fb940debcbf1f9487cb2bd8 (diff)
downloadbukkit-95d92e406efe8f0976f4a0fa7b8989af24592bcc.tar
bukkit-95d92e406efe8f0976f4a0fa7b8989af24592bcc.tar.gz
bukkit-95d92e406efe8f0976f4a0fa7b8989af24592bcc.tar.lz
bukkit-95d92e406efe8f0976f4a0fa7b8989af24592bcc.tar.xz
bukkit-95d92e406efe8f0976f4a0fa7b8989af24592bcc.zip
Tweaks to command system to allow setting executors via plugins (no more ambiguous onCommand in plugins)
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/command/Command.java2
-rw-r--r--src/main/java/org/bukkit/command/CommandExecutor.java18
-rw-r--r--src/main/java/org/bukkit/command/CommandMap.java8
-rw-r--r--src/main/java/org/bukkit/command/PluginCommand.java30
-rw-r--r--src/main/java/org/bukkit/command/SimpleCommandMap.java6
-rw-r--r--src/main/java/org/bukkit/plugin/Plugin.java12
-rw-r--r--src/main/java/org/bukkit/plugin/java/JavaPlugin.java11
7 files changed, 48 insertions, 39 deletions
diff --git a/src/main/java/org/bukkit/command/Command.java b/src/main/java/org/bukkit/command/Command.java
index 6f4aca60..8629b012 100644
--- a/src/main/java/org/bukkit/command/Command.java
+++ b/src/main/java/org/bukkit/command/Command.java
@@ -3,8 +3,6 @@ package org.bukkit.command;
import java.util.ArrayList;
import java.util.List;
-import org.bukkit.command.CommandSender;
-
public abstract class Command {
private final String name;
private List<String> aliases;
diff --git a/src/main/java/org/bukkit/command/CommandExecutor.java b/src/main/java/org/bukkit/command/CommandExecutor.java
new file mode 100644
index 00000000..32847bfa
--- /dev/null
+++ b/src/main/java/org/bukkit/command/CommandExecutor.java
@@ -0,0 +1,18 @@
+
+package org.bukkit.command;
+
+/**
+ * Represents a class which contains a single method for executing commands
+ */
+public interface CommandExecutor {
+ /**
+ * Executes the given command, returning its success
+ *
+ * @param sender Source of the command
+ * @param command Command which was executed
+ * @param label Alias of the command which was used
+ * @param args Passed command arguments
+ * @return true if a valid command, otherwise false
+ */
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args);
+}
diff --git a/src/main/java/org/bukkit/command/CommandMap.java b/src/main/java/org/bukkit/command/CommandMap.java
index 6acc4acf..3e0bfd17 100644
--- a/src/main/java/org/bukkit/command/CommandMap.java
+++ b/src/main/java/org/bukkit/command/CommandMap.java
@@ -31,4 +31,12 @@ public interface CommandMap {
* Clears all registered commands.
*/
public void clearCommands();
+
+ /**
+ * Gets the command registered to the specified name
+ *
+ * @param name Name of the command to retrieve
+ * @return Command with the specified name
+ */
+ public Command getCommand(String name);
}
diff --git a/src/main/java/org/bukkit/command/PluginCommand.java b/src/main/java/org/bukkit/command/PluginCommand.java
index 972488bf..33e1a9b6 100644
--- a/src/main/java/org/bukkit/command/PluginCommand.java
+++ b/src/main/java/org/bukkit/command/PluginCommand.java
@@ -1,37 +1,35 @@
package org.bukkit.command;
-import org.bukkit.ChatColor;
import org.bukkit.plugin.Plugin;
public final class PluginCommand extends Command {
private final Plugin owningPlugin;
+ private CommandExecutor executor;
- public PluginCommand(String name, Plugin owner) {
+ protected PluginCommand(String name, Plugin owner) {
super(name);
+ this.executor = owner;
this.owningPlugin = owner;
this.usageMessage = "";
}
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
- boolean cmdSuccess = false;
-
+ boolean success = false;
+
try {
- cmdSuccess = owningPlugin.onCommand(sender, this, commandLabel, args);
+ success = executor.onCommand(sender, this, commandLabel, args);
} catch (Throwable ex) {
throw new CommandException("Unhandled exception executing command '" + commandLabel + "' in plugin " + owningPlugin.getDescription().getFullName(), ex);
}
- if (!cmdSuccess && !usageMessage.isEmpty()) {
- String tmpMsg = usageMessage.replace("<command>", commandLabel);
- String[] usageLines = tmpMsg.split("\\n");
- for(String line: usageLines) {
- while (line.length() > 0) {
- int stripChars = (line.length() > 53 ? 53:line.length());
- sender.sendMessage(ChatColor.RED + line.substring(0, stripChars));
- line = line.substring(stripChars);
- }
- }
+ if (!success && !usageMessage.isEmpty()) {
+ sender.sendMessage(usageMessage.replace("<command>", commandLabel));
}
- return cmdSuccess;
+
+ return success;
+ }
+
+ public void setExecutor(CommandExecutor executor) {
+ this.executor = executor;
}
} \ No newline at end of file
diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java
index c63fd34e..a24bc061 100644
--- a/src/main/java/org/bukkit/command/SimpleCommandMap.java
+++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java
@@ -23,7 +23,7 @@ public final class SimpleCommandMap implements CommandMap {
private void setDefaultCommands(final Server server) {
register("bukkit", new VersionCommand("version", server));
register("bukkit", new ReloadCommand("reload", server));
- register("bukkit", new PluginsCommand("plugins",server));
+ register("bukkit", new PluginsCommand("plugins", server));
}
/**
@@ -91,6 +91,10 @@ public final class SimpleCommandMap implements CommandMap {
}
}
+ public Command getCommand(String name) {
+ return knownCommands.get(name);
+ }
+
private static class VersionCommand extends Command {
private final Server server;
diff --git a/src/main/java/org/bukkit/plugin/Plugin.java b/src/main/java/org/bukkit/plugin/Plugin.java
index ce00bd52..380404da 100644
--- a/src/main/java/org/bukkit/plugin/Plugin.java
+++ b/src/main/java/org/bukkit/plugin/Plugin.java
@@ -3,14 +3,13 @@ package org.bukkit.plugin;
import java.io.File;
import org.bukkit.Server;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
+import org.bukkit.command.CommandExecutor;
import org.bukkit.util.config.Configuration;
/**
* Represents a Plugin
*/
-public interface Plugin {
+public interface Plugin extends CommandExecutor {
/**
* Returns the folder that the plugin data's files are located in. The
* folder may not yet exist.
@@ -63,11 +62,4 @@ public interface Plugin {
* Called when this plugin is enabled
*/
public void onEnable();
-
- /**
- * Called when a command registered by this plugin is received.
- * @param commandLabel
- * @return TODO
- */
- public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args);
}
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
index ac1d188b..50de9b31 100644
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
@@ -2,10 +2,8 @@
package org.bukkit.plugin.java;
import java.io.File;
-import java.util.ArrayList;
import org.bukkit.Server;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
+import org.bukkit.command.CommandExecutor;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
@@ -122,13 +120,6 @@ public abstract class JavaPlugin implements Plugin {
}
/**
- * Called when a command registered by this plugin is received.
- */
- public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
- return false; // default implementation: do nothing!
- }
-
- /**
* Initializes this plugin with the given variables.
*
* This method should never be called manually.