summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/fillr/Fillr.java34
-rw-r--r--src/main/java/org/bukkit/plugin/Plugin.java16
-rw-r--r--src/main/java/org/bukkit/plugin/java/JavaPlugin.java29
-rw-r--r--src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java28
4 files changed, 87 insertions, 20 deletions
diff --git a/src/main/java/org/bukkit/fillr/Fillr.java b/src/main/java/org/bukkit/fillr/Fillr.java
index 4cb0654d..185779c1 100644
--- a/src/main/java/org/bukkit/fillr/Fillr.java
+++ b/src/main/java/org/bukkit/fillr/Fillr.java
@@ -8,24 +8,26 @@ import org.bukkit.event.*;
import java.io.File;
public class Fillr extends JavaPlugin {
- private FillrListener listener;
- public static final String NAME = "Fillr";
- public static final String VERSION = "1.0";
- public static final String DIRECTORY = "plugins";
+ private FillrListener listener;
+ public static final String NAME = "Fillr";
+ public static final String VERSION = "1.0";
+ public static final String DIRECTORY = "plugins";
- public Fillr(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File plugin, ClassLoader cLoader) {
- super(pluginLoader, instance, desc, plugin, cLoader);
- }
+ public Fillr(PluginLoader pluginLoader, Server instance,
+ PluginDescriptionFile desc, File folder, File plugin,
+ ClassLoader cLoader) {
+ super(pluginLoader, instance, desc, folder, plugin, cLoader);
+ }
- public void onDisable() {
- }
+ public void onDisable() {
+ }
- public void onEnable() {
- registerEvents();
- }
+ public void onEnable() {
+ registerEvents();
+ }
- private void registerEvents() {
- listener = new FillrListener(getServer());
- getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, listener, Event.Priority.Normal, this);
- }
+ private void registerEvents() {
+ listener = new FillrListener(getServer());
+ getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, listener, Event.Priority.Normal, this);
+ }
}
diff --git a/src/main/java/org/bukkit/plugin/Plugin.java b/src/main/java/org/bukkit/plugin/Plugin.java
index e9097cdb..9084f38f 100644
--- a/src/main/java/org/bukkit/plugin/Plugin.java
+++ b/src/main/java/org/bukkit/plugin/Plugin.java
@@ -1,18 +1,34 @@
package org.bukkit.plugin;
+import java.io.File;
import org.bukkit.Server;
+import org.bukkit.util.config.Configuration;
/**
* Represents a Plugin
*/
public interface Plugin {
/**
+ * Returns the folder that the plugin data's files are located in.
+ *
+ * @return
+ */
+ public File getDataFolder();
+
+ /**
* Returns the plugin.yaml file containing the details for this plugin
*
* @return Contents of the plugin.yaml file
*/
public PluginDescriptionFile getDescription();
+
+ /**
+ * Returns the main configuration file. It should be loaded.
+ *
+ * @return
+ */
+ public Configuration getConfiguration();
/**
* Gets the associated PluginLoader responsible for this plugin
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
index ba2bc232..f8f97d13 100644
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
@@ -6,6 +6,7 @@ import org.bukkit.Server;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
+import org.bukkit.util.config.Configuration;
/**
* Represents a Java plugin
@@ -16,6 +17,7 @@ public abstract class JavaPlugin implements Plugin {
private final Server server;
private final File file;
private final PluginDescriptionFile description;
+ private final File dataFolder;
private final ClassLoader classLoader;
/**
@@ -24,18 +26,31 @@ public abstract class JavaPlugin implements Plugin {
* @param pluginLoader PluginLoader that is responsible for this plugin
* @param instance Server instance that is running this plugin
* @param desc PluginDescriptionFile containing metadata on this plugin
+ * @param folder Folder containing the plugin's data
* @param plugin File containing this plugin
* @param cLoader ClassLoader which holds this plugin
*/
- public JavaPlugin(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File plugin, ClassLoader cLoader) {
+ public JavaPlugin(PluginLoader pluginLoader, Server instance,
+ PluginDescriptionFile desc, File folder, File plugin,
+ ClassLoader cLoader) {
loader = pluginLoader;
server = instance;
file = plugin;
description = desc;
+ dataFolder = folder;
classLoader = cLoader;
}
/**
+ * Returns the folder that the plugin data's files are located in.
+ *
+ * @return
+ */
+ public File getDataFolder() {
+ return dataFolder;
+ }
+
+ /**
* Gets the associated PluginLoader responsible for this plugin
*
* @return PluginLoader that controls this plugin
@@ -79,6 +94,18 @@ public abstract class JavaPlugin implements Plugin {
public PluginDescriptionFile getDescription() {
return description;
}
+
+ /**
+ * Returns the main configuration file. It will be loaded.
+ *
+ * @return
+ */
+ public Configuration getConfiguration() {
+ Configuration config =
+ new Configuration(new File(dataFolder, "config.yaml"));
+ config.load();
+ return config;
+ }
/**
* Returns the ClassLoader which holds this plugin
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
index c0cef03a..8afc75db 100644
--- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
+++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java
@@ -69,19 +69,41 @@ public final class JavaPluginLoader implements PluginLoader {
throw new InvalidPluginException(ex);
}
+ File dataFolder = getDataFolder(file);
+
try {
ClassLoader loader = new PluginClassLoader(this, new URL[]{file.toURI().toURL()}, getClass().getClassLoader());
Class<?> jarClass = Class.forName(description.getMain(), true, loader);
Class<? extends JavaPlugin> plugin = jarClass.asSubclass(JavaPlugin.class);
- Constructor<? extends JavaPlugin> constructor = plugin.getConstructor(PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, ClassLoader.class);
-
- result = constructor.newInstance(this, server, description, file, loader);
+ Constructor<? extends JavaPlugin> constructor = plugin.getConstructor(PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, File.class, ClassLoader.class);
+
+ result = constructor.newInstance(this, server, description, dataFolder, file, loader);
} catch (Throwable ex) {
throw new InvalidPluginException(ex);
}
return (Plugin)result;
}
+
+ private File getDataFolder(File file) {
+ File dataFolder = null;
+
+ String filename = file.getName();
+ int index = file.getName().lastIndexOf(".");
+
+ if (index != -1) {
+ String name = filename.substring(0, index);
+ dataFolder = new File(file.getParentFile(), name);
+ } else {
+ // This is if there is no extension, which should not happen
+ // Using _ to prevent name collision
+ dataFolder = new File(file.getParentFile(), filename + "_");
+ }
+
+ dataFolder.mkdirs();
+
+ return dataFolder;
+ }
public Pattern[] getPluginFileFilters() {
return fileFilters;