summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2010-12-24 19:05:14 +0000
committerDinnerbone <dinnerbone@dinnerbone.com>2010-12-24 19:05:14 +0000
commitd98b41865e60ae9574d1ed1d67d26b7b6adb545d (patch)
tree31c7fe798b4afae9181190955a0b6f0375d2780d
parentb8c8beab9a264cdd63023cc07b0980ba3049a7ec (diff)
downloadbukkit-d98b41865e60ae9574d1ed1d67d26b7b6adb545d.tar
bukkit-d98b41865e60ae9574d1ed1d67d26b7b6adb545d.tar.gz
bukkit-d98b41865e60ae9574d1ed1d67d26b7b6adb545d.tar.lz
bukkit-d98b41865e60ae9574d1ed1d67d26b7b6adb545d.tar.xz
bukkit-d98b41865e60ae9574d1ed1d67d26b7b6adb545d.zip
Fixed plugin description loading
No longer hardcoding sample plugin, now uses plugins dir
-rw-r--r--sample/src/plugin.yml2
-rw-r--r--src/org/bukkit/plugin/PluginManager.java2
-rw-r--r--src/org/bukkit/plugin/java/JavaPluginLoader.java25
3 files changed, 27 insertions, 2 deletions
diff --git a/sample/src/plugin.yml b/sample/src/plugin.yml
new file mode 100644
index 00000000..e4d19dc7
--- /dev/null
+++ b/sample/src/plugin.yml
@@ -0,0 +1,2 @@
+name: Sample Plugin
+main: com.dinnerbone.bukkit.sample.SamplePlugin
diff --git a/src/org/bukkit/plugin/PluginManager.java b/src/org/bukkit/plugin/PluginManager.java
index d35d91df..0be6fa5e 100644
--- a/src/org/bukkit/plugin/PluginManager.java
+++ b/src/org/bukkit/plugin/PluginManager.java
@@ -81,7 +81,7 @@ public final class PluginManager {
}
}
- return (Plugin[])result.toArray();
+ return result.toArray(new Plugin[result.size()]);
}
/**
diff --git a/src/org/bukkit/plugin/java/JavaPluginLoader.java b/src/org/bukkit/plugin/java/JavaPluginLoader.java
index 3eb517ff..aaabe4f4 100644
--- a/src/org/bukkit/plugin/java/JavaPluginLoader.java
+++ b/src/org/bukkit/plugin/java/JavaPluginLoader.java
@@ -3,13 +3,18 @@ package org.bukkit.plugin.java;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLClassLoader;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginLoader;
import java.util.regex.Pattern;
import org.bukkit.Server;
+import org.bukkit.plugin.InvalidDescriptionException;
import org.bukkit.plugin.InvalidPluginException;
import org.bukkit.plugin.PluginDescriptionFile;
@@ -28,11 +33,29 @@ public final class JavaPluginLoader implements PluginLoader {
public Plugin loadPlugin(File file) throws InvalidPluginException {
JavaPlugin result = null;
- PluginDescriptionFile description = new PluginDescriptionFile("Sample Plugin", "com.dinnerbone.bukkit.sample.SamplePlugin");
+ PluginDescriptionFile description = null;
if (!file.exists()) {
throw new InvalidPluginException(new FileNotFoundException(String.format("%s does not exist", file.getPath())));
}
+ try {
+ JarFile jar = new JarFile(file);
+ JarEntry entry = jar.getJarEntry("plugin.yml");
+
+ if (entry == null) {
+ throw new InvalidPluginException(new FileNotFoundException("Jar does not contain plugin.yml"));
+ }
+
+ InputStream stream = jar.getInputStream(entry);
+ description = new PluginDescriptionFile(stream);
+
+ stream.close();
+ jar.close();
+ } catch (IOException ex) {
+ throw new InvalidPluginException(ex);
+ } catch (InvalidDescriptionException ex) {
+ throw new InvalidPluginException(ex);
+ }
try {
ClassLoader loader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()}, getClass().getClassLoader());