summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--EssentialsExtra/src/Commandkittycannon.java2
-rw-r--r--EssentialsExtra/src/net/ess3/extra/EssentialsExtra.java49
-rw-r--r--EssentialsExtra/src/plugin.yml4
-rw-r--r--pom.xml2
4 files changed, 44 insertions, 13 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>
diff --git a/pom.xml b/pom.xml
index e9d579a67..5f6a6b90f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,7 +76,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <bukkit.version>1.3.2-R0.1</bukkit.version>
+ <bukkit.version>1.3.2-R1.1-SNAPSHOT</bukkit.version>
<build.number>Unknown</build.number>
<org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>true</org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs>
<org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>2</org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width>