Added new Configuration classes

By: Dinnerbone <dinnerbone@dinnerbone.com>
This commit is contained in:
Bukkit/Spigot
2011-09-19 20:36:44 +01:00
parent e99e39ee62
commit 6c7412d365
31 changed files with 3454 additions and 9 deletions

View File

@@ -2,8 +2,10 @@ package org.bukkit.plugin;
import com.avaje.ebean.EbeanServer;
import java.io.File;
import java.io.InputStream;
import org.bukkit.Server;
import org.bukkit.command.CommandExecutor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.util.config.Configuration;
@@ -33,6 +35,29 @@ public interface Plugin extends CommandExecutor {
* @return The configuration
*/
public Configuration getConfiguration();
/**
* Gets a {@link FileConfiguration} for this plugin, read through "config.yml"
* <p>
* If there is a default config.yml embedded in this plugin, it will be provided
* as a default for this Configuration.
*
* @return Plugin configuration
*/
public FileConfiguration getConfig();
/**
* Gets an embedded resource in this plugin
*
* @param filename Filename of the resource
* @return File if found, otherwise null
*/
public InputStream getResource(String filename);
/**
* Saves the {@link FileConfiguration} retrievable by {@link #getConfig()}.
*/
public void saveConfig();
/**
* Gets the associated PluginLoader responsible for this plugin

View File

@@ -7,17 +7,27 @@ import com.avaje.ebean.config.ServerConfig;
import com.avaje.ebeaninternal.api.SpiEbeanServer;
import com.avaje.ebeaninternal.server.ddl.DdlGenerator;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.PluginLoader;
import org.bukkit.util.config.Configuration;
import org.yaml.snakeyaml.error.YAMLException;
/**
* Represents a Java plugin
@@ -34,6 +44,8 @@ public abstract class JavaPlugin implements Plugin {
private Configuration config = null;
private boolean naggable = true;
private EbeanServer ebean = null;
private FileConfiguration newConfig = null;
private File configFile = null;
public JavaPlugin() {}
@@ -99,10 +111,32 @@ public abstract class JavaPlugin implements Plugin {
* the configuration file will have no values.
*
* @return The configuration.
* @deprecated See the new
*/
@Deprecated
public Configuration getConfiguration() {
return config;
}
public FileConfiguration getConfig() {
return newConfig;
}
public void saveConfig() {
try {
newConfig.save(configFile);
} catch (IOException ex) {
Logger.getLogger(JavaPlugin.class.getName()).log(Level.SEVERE, "Could not save config to " + configFile, ex);
}
}
public InputStream getResource(String filename) {
if (filename == null) {
throw new IllegalArgumentException("Filename cannot be null");
}
return getClassLoader().getResourceAsStream(filename);
}
/**
* Returns the ClassLoader which holds this plugin
@@ -153,8 +187,17 @@ public abstract class JavaPlugin implements Plugin {
this.description = description;
this.dataFolder = dataFolder;
this.classLoader = classLoader;
this.config = new Configuration(new File(dataFolder, "config.yml"));
this.configFile = new File(dataFolder, "config.yml");
this.config = new Configuration(configFile);
this.config.load();
this.newConfig = YamlConfiguration.loadConfiguration(configFile);
InputStream defConfigStream = getResource("config.yml");
if (defConfigStream != null) {
YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream);
newConfig.setDefaults(defConfig);
}
if (description.isDatabaseEnabled()) {
ServerConfig db = new ServerConfig();

View File

@@ -15,6 +15,9 @@ import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.regex.Pattern;
import org.bukkit.Server;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.configuration.serialization.SerializableAs;
import org.bukkit.event.CustomEventListener;
import org.bukkit.event.Event;
import org.bukkit.event.Listener;
@@ -229,6 +232,20 @@ public class JavaPluginLoader implements PluginLoader {
public void setClass(final String name, final Class<?> clazz) {
if (!classes.containsKey(name)) {
classes.put(name, clazz);
if (ConfigurationSerializable.class.isAssignableFrom(clazz)) {
Class<? extends ConfigurationSerializable> serializable = (Class<? extends ConfigurationSerializable>)clazz;
ConfigurationSerialization.registerClass(serializable);
}
}
}
public void removeClass(String name) {
Class<?> clazz = classes.remove(name);
if (ConfigurationSerializable.class.isAssignableFrom(clazz)) {
Class<? extends ConfigurationSerializable> serializable = (Class<? extends ConfigurationSerializable>)clazz;
ConfigurationSerialization.unregisterClass(serializable);
}
}
@@ -973,7 +990,7 @@ public class JavaPluginLoader implements PluginLoader {
Set<String> names = loader.getClasses();
for (String name : names) {
classes.remove(name);
removeClass(name);
}
}
}