summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/command/CommandDefinition.java133
-rw-r--r--src/main/java/org/bukkit/command/PluginCommandUtil.java (renamed from src/main/java/org/bukkit/command/PluginCommandYamlParser.java)29
-rw-r--r--src/main/java/org/bukkit/plugin/PluginManager.java11
-rw-r--r--src/main/java/org/bukkit/plugin/SimplePluginManager.java11
4 files changed, 181 insertions, 3 deletions
diff --git a/src/main/java/org/bukkit/command/CommandDefinition.java b/src/main/java/org/bukkit/command/CommandDefinition.java
new file mode 100644
index 00000000..2e384c6b
--- /dev/null
+++ b/src/main/java/org/bukkit/command/CommandDefinition.java
@@ -0,0 +1,133 @@
+package org.bukkit.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents a command that can be registered dynamically.
+ *
+ * @author sk89q
+ */
+public class CommandDefinition {
+
+ private String name;
+ private String description;
+ private String usage;
+ private List<String> aliases = new ArrayList<String>();
+ private String permission;
+
+ /**
+ * Construct the command with a given name.
+ *
+ * @param name The command name (without a preceding /)
+ */
+ public CommandDefinition(String name) {
+ setName(name);
+ }
+
+ /**
+ * Construct the command with a given name and description.
+ *
+ * @param name The command name
+ * @param description The command description (without a preceding /)
+ */
+ public CommandDefinition(String name, String description) {
+ setName(name);
+ setDescription(description);
+ }
+
+ /**
+ * Get the name.
+ *
+ * @return Command name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Sets the command name.
+ *
+ * @param name Command name
+ */
+ public void setName(String name) {
+ if (name == null) {
+ throw new IllegalArgumentException("Cannot have a null command name");
+ }
+
+ this.name = name;
+ }
+
+ /**
+ * Get the description.
+ *
+ * @return Command description, possibly null
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * Sets the command description.
+ *
+ * @param name Command description, possibly null
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * Get the usage string.
+ *
+ * @return Command description, possibly null
+ */
+ public String getUsage() {
+ return usage;
+ }
+
+ /**
+ * Sets the command usage string.
+ *
+ * @param name Command usage string, possibly null
+ */
+ public void setUsage(String usage) {
+ this.usage = usage;
+ }
+
+ /**
+ * Get the list of aliases.
+ *
+ * @return List of aliases, possibly null
+ */
+ public List<String> getAliases() {
+ return aliases;
+ }
+
+ /**
+ * Set the list of aliases.
+ *
+ * @param aliases List of aliases
+ */
+ public void setAliases(List<String> aliases) {
+ this.aliases = aliases;
+ }
+
+ /**
+ * Get the permission.
+ *
+ * @return Command permission, possibly null
+ */
+ public String getPermission() {
+ return permission;
+ }
+
+ /**
+ * Sets the permission.
+ *
+ * @param name Command permission, possibly null
+ */
+ public void setPermission(String permission) {
+ this.permission = permission;
+ }
+
+}
diff --git a/src/main/java/org/bukkit/command/PluginCommandYamlParser.java b/src/main/java/org/bukkit/command/PluginCommandUtil.java
index bce3f80c..cc3b47d8 100644
--- a/src/main/java/org/bukkit/command/PluginCommandYamlParser.java
+++ b/src/main/java/org/bukkit/command/PluginCommandUtil.java
@@ -7,7 +7,7 @@ import java.util.Map.Entry;
import org.bukkit.plugin.Plugin;
-public class PluginCommandYamlParser {
+public class PluginCommandUtil {
@SuppressWarnings("unchecked")
public static List<Command> parse(Plugin plugin) {
@@ -59,4 +59,31 @@ public class PluginCommandYamlParser {
}
return pluginCmds;
}
+
+ public static Command parse(CommandDefinition command, Plugin plugin) {
+ Command newCmd = new PluginCommand(command.getName(), plugin);
+ String description = command.getDescription();
+ String usage = command.getUsage();
+ List<String> aliases = command.getAliases();
+ String permission = command.getPermission();
+
+ if (description != null) {
+ newCmd.setDescription(description);
+ }
+
+ if (usage != null) {
+ newCmd.setUsage(usage);
+ }
+
+ if (aliases != null) {
+ newCmd.setAliases(aliases);
+ }
+
+ if (permission != null) {
+ newCmd.setPermission(permission);
+ }
+
+ return newCmd;
+ }
+
}
diff --git a/src/main/java/org/bukkit/plugin/PluginManager.java b/src/main/java/org/bukkit/plugin/PluginManager.java
index 7d7f1c2b..0b477722 100644
--- a/src/main/java/org/bukkit/plugin/PluginManager.java
+++ b/src/main/java/org/bukkit/plugin/PluginManager.java
@@ -3,6 +3,9 @@ package org.bukkit.plugin;
import java.io.File;
import java.util.Set;
+import org.bukkit.command.CommandDefinition;
+import org.bukkit.command.CommandMap;
+import org.bukkit.command.PluginCommand;
import org.bukkit.event.Event;
import org.bukkit.event.Event.Priority;
import org.bukkit.event.Listener;
@@ -252,4 +255,12 @@ public interface PluginManager {
* @return Set containing all current registered permissions
*/
public Set<Permission> getPermissions();
+
+ /**
+ * Registers a plugin command dynamically.
+ *
+ * @param command Command definition to use
+ * @param plugin Plugin to associate it with
+ */
+ public void registerCommand(CommandDefinition command, Plugin plugin);
}
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index a79c3583..aa401cb0 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -23,7 +23,10 @@ import java.util.regex.Matcher;
import org.bukkit.Server;
import java.util.regex.Pattern;
import org.bukkit.command.Command;
-import org.bukkit.command.PluginCommandYamlParser;
+import org.bukkit.command.CommandMap;
+import org.bukkit.command.CommandDefinition;
+import org.bukkit.command.PluginCommand;
+import org.bukkit.command.PluginCommandUtil;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.event.Event;
@@ -270,7 +273,7 @@ public final class SimplePluginManager implements PluginManager {
public void enablePlugin(final Plugin plugin) {
if (!plugin.isEnabled()) {
- List<Command> pluginCommands = PluginCommandYamlParser.parse(plugin);
+ List<Command> pluginCommands = PluginCommandUtil.parse(plugin);
if (!pluginCommands.isEmpty()) {
commandMap.registerAll(plugin.getDescription().getName(), pluginCommands);
@@ -540,4 +543,8 @@ public final class SimplePluginManager implements PluginManager {
public Set<Permission> getPermissions() {
return new HashSet<Permission>(permissions.values());
}
+
+ public void registerCommand(CommandDefinition command, Plugin plugin) {
+ commandMap.register(plugin.getDescription().getName(), PluginCommandUtil.parse(command, plugin));
+ }
}