diff options
-rw-r--r-- | src/main/java/org/bukkit/command/CommandDefinition.java | 133 | ||||
-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.java | 11 | ||||
-rw-r--r-- | src/main/java/org/bukkit/plugin/SimplePluginManager.java | 11 |
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)); + } } |