mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-31 21:37:39 +01:00
Added configuration and plugin data directory support to plugins.
By: sk89q <the.sk89q@gmail.com>
This commit is contained in:
parent
0bf9731255
commit
33e5645054
@ -8,24 +8,26 @@ import org.bukkit.event.*;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class Fillr extends JavaPlugin {
|
public class Fillr extends JavaPlugin {
|
||||||
private FillrListener listener;
|
private FillrListener listener;
|
||||||
public static final String NAME = "Fillr";
|
public static final String NAME = "Fillr";
|
||||||
public static final String VERSION = "1.0";
|
public static final String VERSION = "1.0";
|
||||||
public static final String DIRECTORY = "plugins";
|
public static final String DIRECTORY = "plugins";
|
||||||
|
|
||||||
public Fillr(PluginLoader pluginLoader, Server instance, PluginDescriptionFile desc, File plugin, ClassLoader cLoader) {
|
public Fillr(PluginLoader pluginLoader, Server instance,
|
||||||
super(pluginLoader, instance, desc, plugin, cLoader);
|
PluginDescriptionFile desc, File folder, File plugin,
|
||||||
}
|
ClassLoader cLoader) {
|
||||||
|
super(pluginLoader, instance, desc, folder, plugin, cLoader);
|
||||||
|
}
|
||||||
|
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
registerEvents();
|
registerEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerEvents() {
|
private void registerEvents() {
|
||||||
listener = new FillrListener(getServer());
|
listener = new FillrListener(getServer());
|
||||||
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, listener, Event.Priority.Normal, this);
|
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, listener, Event.Priority.Normal, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,34 @@
|
|||||||
|
|
||||||
package org.bukkit.plugin;
|
package org.bukkit.plugin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.util.config.Configuration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Plugin
|
* Represents a Plugin
|
||||||
*/
|
*/
|
||||||
public interface 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
|
* Returns the plugin.yaml file containing the details for this plugin
|
||||||
*
|
*
|
||||||
* @return Contents of the plugin.yaml file
|
* @return Contents of the plugin.yaml file
|
||||||
*/
|
*/
|
||||||
public PluginDescriptionFile getDescription();
|
public PluginDescriptionFile getDescription();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the main configuration file. It should be loaded.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Configuration getConfiguration();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the associated PluginLoader responsible for this plugin
|
* Gets the associated PluginLoader responsible for this plugin
|
||||||
|
@ -6,6 +6,7 @@ import org.bukkit.Server;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.PluginLoader;
|
import org.bukkit.plugin.PluginLoader;
|
||||||
|
import org.bukkit.util.config.Configuration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Java plugin
|
* Represents a Java plugin
|
||||||
@ -16,6 +17,7 @@ public abstract class JavaPlugin implements Plugin {
|
|||||||
private final Server server;
|
private final Server server;
|
||||||
private final File file;
|
private final File file;
|
||||||
private final PluginDescriptionFile description;
|
private final PluginDescriptionFile description;
|
||||||
|
private final File dataFolder;
|
||||||
private final ClassLoader classLoader;
|
private final ClassLoader classLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,17 +26,30 @@ public abstract class JavaPlugin implements Plugin {
|
|||||||
* @param pluginLoader PluginLoader that is responsible for this plugin
|
* @param pluginLoader PluginLoader that is responsible for this plugin
|
||||||
* @param instance Server instance that is running this plugin
|
* @param instance Server instance that is running this plugin
|
||||||
* @param desc PluginDescriptionFile containing metadata on 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 plugin File containing this plugin
|
||||||
* @param cLoader ClassLoader which holds 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;
|
loader = pluginLoader;
|
||||||
server = instance;
|
server = instance;
|
||||||
file = plugin;
|
file = plugin;
|
||||||
description = desc;
|
description = desc;
|
||||||
|
dataFolder = folder;
|
||||||
classLoader = cLoader;
|
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
|
* Gets the associated PluginLoader responsible for this plugin
|
||||||
*
|
*
|
||||||
@ -79,6 +94,18 @@ public abstract class JavaPlugin implements Plugin {
|
|||||||
public PluginDescriptionFile getDescription() {
|
public PluginDescriptionFile getDescription() {
|
||||||
return description;
|
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
|
* Returns the ClassLoader which holds this plugin
|
||||||
|
@ -69,19 +69,41 @@ public final class JavaPluginLoader implements PluginLoader {
|
|||||||
throw new InvalidPluginException(ex);
|
throw new InvalidPluginException(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File dataFolder = getDataFolder(file);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ClassLoader loader = new PluginClassLoader(this, new URL[]{file.toURI().toURL()}, getClass().getClassLoader());
|
ClassLoader loader = new PluginClassLoader(this, new URL[]{file.toURI().toURL()}, getClass().getClassLoader());
|
||||||
Class<?> jarClass = Class.forName(description.getMain(), true, loader);
|
Class<?> jarClass = Class.forName(description.getMain(), true, loader);
|
||||||
Class<? extends JavaPlugin> plugin = jarClass.asSubclass(JavaPlugin.class);
|
Class<? extends JavaPlugin> plugin = jarClass.asSubclass(JavaPlugin.class);
|
||||||
Constructor<? extends JavaPlugin> constructor = plugin.getConstructor(PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, ClassLoader.class);
|
Constructor<? extends JavaPlugin> constructor = plugin.getConstructor(PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, File.class, ClassLoader.class);
|
||||||
|
|
||||||
result = constructor.newInstance(this, server, description, file, loader);
|
result = constructor.newInstance(this, server, description, dataFolder, file, loader);
|
||||||
} catch (Throwable ex) {
|
} catch (Throwable ex) {
|
||||||
throw new InvalidPluginException(ex);
|
throw new InvalidPluginException(ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (Plugin)result;
|
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() {
|
public Pattern[] getPluginFileFilters() {
|
||||||
return fileFilters;
|
return fileFilters;
|
||||||
|
Loading…
Reference in New Issue
Block a user