diff --git a/paper-api/src/org/bukkit/plugin/InvalidDescriptionException.java b/paper-api/src/org/bukkit/plugin/InvalidDescriptionException.java new file mode 100644 index 0000000000..aee3e3973f --- /dev/null +++ b/paper-api/src/org/bukkit/plugin/InvalidDescriptionException.java @@ -0,0 +1,34 @@ + +package org.bukkit.plugin; + +/** + * Thrown when attempting to load an invalid PluginDescriptionFile + */ +public class InvalidDescriptionException extends Exception { + private final Exception innerException; + + /** + * Constructs a new InvalidDescriptionException based on the given Exception + * + * @param exception Exception that triggered this Exception + */ + public InvalidDescriptionException(Exception exception) { + innerException = exception; + } + + /** + * Constructs a new InvalidDescriptionException + */ + public InvalidDescriptionException() { + innerException = null; + } + + /** + * If applicable, returns the Exception that triggered this InvalidDescriptionException + * + * @return Inner exception, or null if one does not exist + */ + public Exception getInnerException() { + return innerException; + } +} diff --git a/paper-api/src/org/bukkit/plugin/PluginDescriptionFile.java b/paper-api/src/org/bukkit/plugin/PluginDescriptionFile.java new file mode 100644 index 0000000000..52632e1178 --- /dev/null +++ b/paper-api/src/org/bukkit/plugin/PluginDescriptionFile.java @@ -0,0 +1,69 @@ + +package org.bukkit.plugin; + +import java.io.InputStream; +import java.io.Reader; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.SafeConstructor; + +/** + * Provides access to a Plugins description file, plugin.yaml + */ +public final class PluginDescriptionFile { + private static final Yaml yaml = new Yaml(new SafeConstructor()); + private String name = null; + private String main = null; + + public PluginDescriptionFile(final InputStream stream) throws InvalidDescriptionException { + try { + loadMap((Map)yaml.load(stream)); + } catch (ClassCastException ex) { + throw new InvalidDescriptionException(ex); + } + } + + /** + * Loads a PluginDescriptionFile from the specified reader + * @param reader + */ + public PluginDescriptionFile(final Reader reader) { + loadMap((Map)yaml.load(reader)); + } + + /** + * Creates a new PluginDescriptionFile with the given detailed + * + * @param pluginName Name of this plugin + * @param mainClass Full location of the main class of this plugin + */ + public PluginDescriptionFile(final String pluginName, final String mainClass) { + name = pluginName; + main = mainClass; + } + + /** + * Saves this PluginDescriptionFile to the given writer + * + * @param writer Writer to output this file to + */ + public void save(Writer writer) { + yaml.dump(saveMap(), writer); + } + + private void loadMap(Map map) throws ClassCastException { + name = (String)map.get("name"); + main = (String)map.get("main"); + } + + private Map saveMap() { + Map map = new HashMap(); + + map.put("name", name); + map.put("main", main); + + return map; + } +}