diff options
author | md_5 <md_5@bigpond.com> | 2012-10-07 21:24:03 +1100 |
---|---|---|
committer | md_5 <md_5@bigpond.com> | 2012-10-07 21:24:03 +1100 |
commit | 846668594c62889f6750dc7e138e49ecc41b14fa (patch) | |
tree | 98a085ffe33238f172377a39afc626f73af23249 /EssentialsExtra | |
parent | 8215d7be9b91727b2a276988a1430dd37bc85865 (diff) | |
download | Essentials-846668594c62889f6750dc7e138e49ecc41b14fa.tar Essentials-846668594c62889f6750dc7e138e49ecc41b14fa.tar.gz Essentials-846668594c62889f6750dc7e138e49ecc41b14fa.tar.lz Essentials-846668594c62889f6750dc7e138e49ecc41b14fa.tar.xz Essentials-846668594c62889f6750dc7e138e49ecc41b14fa.zip |
Use annotations to register commands
Diffstat (limited to 'EssentialsExtra')
-rw-r--r-- | EssentialsExtra/src/Commandkittycannon.java | 2 | ||||
-rw-r--r-- | EssentialsExtra/src/net/ess3/extra/EssentialsExtra.java | 49 | ||||
-rw-r--r-- | EssentialsExtra/src/plugin.yml | 4 |
3 files changed, 43 insertions, 12 deletions
diff --git a/EssentialsExtra/src/Commandkittycannon.java b/EssentialsExtra/src/Commandkittycannon.java index db9fa5fdf..a81bd26b4 100644 --- a/EssentialsExtra/src/Commandkittycannon.java +++ b/EssentialsExtra/src/Commandkittycannon.java @@ -2,11 +2,13 @@ import java.util.Random; import net.ess3.api.IUser; import net.ess3.commands.EssentialsCommand; +import net.ess3.extra.AnnotatedCommand; import org.bukkit.Location; import org.bukkit.entity.EntityType; import org.bukkit.entity.Ocelot; +@AnnotatedCommand(description = "Throw an exploding kitten at your opponent", usage = "/<command>") public class Commandkittycannon extends EssentialsCommand { private static Random random = new Random(); diff --git a/EssentialsExtra/src/net/ess3/extra/EssentialsExtra.java b/EssentialsExtra/src/net/ess3/extra/EssentialsExtra.java index ae8964775..53339bde2 100644 --- a/EssentialsExtra/src/net/ess3/extra/EssentialsExtra.java +++ b/EssentialsExtra/src/net/ess3/extra/EssentialsExtra.java @@ -2,11 +2,12 @@ package net.ess3.extra; import java.io.File; import java.io.FileOutputStream; -import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.lang.reflect.Field; import java.net.URL; import java.net.URLClassLoader; +import java.util.Arrays; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -15,8 +16,12 @@ import net.ess3.api.ICommandHandler; import net.ess3.api.IEssentials; import net.ess3.bukkit.BukkitPlugin; import net.ess3.commands.EssentialsCommandHandler; +import org.bukkit.Bukkit; import org.bukkit.command.Command; +import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.SimplePluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -24,6 +29,8 @@ public class EssentialsExtra extends JavaPlugin { private IEssentials ess; private ICommandHandler handler; + private CommandMap commandMap; + private ClassLoader loader; @Override public void onEnable() @@ -35,6 +42,11 @@ public class EssentialsExtra extends JavaPlugin URL[] urls = null; try { + PluginManager pm = Bukkit.getServer().getPluginManager(); + Field f = SimplePluginManager.class.getDeclaredField("commandMap"); + f.setAccessible(true); + CommandMap map = (CommandMap)f.get(pm); + JarFile jar = new JarFile(getFile()); Enumeration<JarEntry> entries = jar.entries(); while (entries.hasMoreElements()) @@ -64,28 +76,49 @@ public class EssentialsExtra extends JavaPlugin commandDir.toURI().toURL() }; } - catch (IOException ex) + catch (Exception ex) { - getLogger().log(Level.SEVERE, "Could not get extra command dir", ex); + getLogger().log(Level.SEVERE, "Enable " + getName(), ex); getServer().getPluginManager().disablePlugin(this); } + loader = new URLClassLoader(urls, getClassLoader()); + for (File file : commandDir.listFiles()) { String name = file.getName(); if (name.startsWith("Command") && name.endsWith(".class")) { - getLogger().info("Loaded command " + name.substring(0, name.length() - 7)); + try + { + registerCommand(name); + getLogger().info("Loaded command " + name.substring(0, name.length() - 7)); + } + catch (Exception ex) + { + getLogger().log(Level.SEVERE, "Could not register " + name, ex); + } } } - ClassLoader loader = new URLClassLoader(urls, getClassLoader()); handler = new EssentialsCommandHandler(loader, "Command", "essentials.", ess); } - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) + private void registerCommand(String name) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, NoSuchFieldException, SecurityException { - return handler.handleCommand(sender, command, label, args); + + AnnotatedCommand anot = Class.forName(name).getAnnotation(AnnotatedCommand.class); + if (anot == null) + { + throw new IllegalArgumentException("Command class is not annotated with AnnotatedCommand.class"); + } + commandMap.register("Essentials", new Command(name.substring(0, name.length() - 7), anot.description(), anot.usage(), Arrays.asList(anot.aliases())) + { + @Override + public boolean execute(CommandSender cs, String label, String[] args) + { + return handler.handleCommand(cs, this, label, args); + } + }); } } diff --git a/EssentialsExtra/src/plugin.yml b/EssentialsExtra/src/plugin.yml index 9202b0fbd..8f641605f 100644 --- a/EssentialsExtra/src/plugin.yml +++ b/EssentialsExtra/src/plugin.yml @@ -7,7 +7,3 @@ website: http://tiny.cc/EssentialsWiki description: Provides extra commands for Essentials authors: [md_5] depend: [Essentials-3] -commands: - kittycannon: - description: Throw an exploding kitten at your opponent - usage: /<command> |