From 9a7210deb1cfb55849c4fc4cea4869210f0b1cd0 Mon Sep 17 00:00:00 2001 From: Nikki Date: Thu, 1 May 2014 13:37:44 -0400 Subject: [PATCH 1/2] Recursive plugin loading. --- .../{cmd-animate => cmd/animate}/animate.rb | 0 .../{cmd-animate => cmd/animate}/plugin.xml | 0 data/plugins/{cmd-bank => cmd/bank}/bank.rb | 0 .../plugins/{cmd-bank => cmd/bank}/plugin.xml | 0 .../{cmd-filter => cmd/filter}/filter.rb | 0 .../{cmd-filter => cmd/filter}/plugin.xml | 0 data/plugins/{cmd-item => cmd/item}/item.rb | 0 .../plugins/{cmd-item => cmd/item}/plugin.xml | 0 .../{cmd-lookup => cmd/lookup}/lookup.rb | 0 .../{cmd-lookup => cmd/lookup}/plugin.xml | 0 data/plugins/{cmd-npc => cmd/npc}/plugin.xml | 0 data/plugins/{cmd-npc => cmd/npc}/spawn.rb | 0 .../{cmd-skill => cmd/skill}/plugin.xml | 0 .../plugins/{cmd-skill => cmd/skill}/skill.rb | 0 .../{cmd-teleport => cmd/teleport}/plugin.xml | 0 .../teleport}/teleport.rb | 0 .../spawning}/npc-spawn.rb | 0 .../spawning}/plugin.xml | 0 .../lumbridge}/npcs.rb | 0 .../lumbridge}/plugin.xml | 0 .../tutorial-island}/npcs.rb | 0 .../tutorial-island}/plugin.xml | 0 .../herblore}/herb.rb | 0 .../herblore}/herblore.rb | 0 .../herblore}/ingredient.rb | 0 .../herblore}/plugin.xml | 0 .../herblore}/potion.rb | 0 .../{skill-magic => skill/magic}/alchemy.rb | 0 .../{skill-magic => skill/magic}/convert.rb | 0 .../{skill-magic => skill/magic}/element.rb | 0 .../{skill-magic => skill/magic}/enchant.rb | 0 .../{skill-magic => skill/magic}/magic.rb | 0 .../{skill-magic => skill/magic}/plugin.xml | 0 .../{skill-magic => skill/magic}/teleport.rb | 0 .../{skill-mining => skill/mining}/gem.rb | 0 .../{skill-mining => skill/mining}/mining.rb | 0 .../{skill-mining => skill/mining}/ore.rb | 0 .../{skill-mining => skill/mining}/pickaxe.rb | 0 .../{skill-mining => skill/mining}/plugin.xml | 0 .../{skill-mining => skill/mining}/respawn.rb | 0 .../{skill-prayer => skill/prayer}/bury.rb | 0 .../{skill-prayer => skill/prayer}/plugin.xml | 0 .../runecraft}/altar.rb | 0 .../runecraft}/plugin.xml | 0 .../runecraft}/rune.rb | 0 .../runecraft}/runecraft.rb | 0 .../runecraft}/talisman.rb | 0 src/org/apollo/io/PluginMetaDataParser.java | 6 ++++-- src/org/apollo/util/plugin/PluginManager.java | 20 ++++++++++++++++--- .../apollo/util/plugin/PluginMetaData.java | 18 ++++++++++++++++- 50 files changed, 38 insertions(+), 6 deletions(-) rename data/plugins/{cmd-animate => cmd/animate}/animate.rb (100%) rename data/plugins/{cmd-animate => cmd/animate}/plugin.xml (100%) rename data/plugins/{cmd-bank => cmd/bank}/bank.rb (100%) rename data/plugins/{cmd-bank => cmd/bank}/plugin.xml (100%) rename data/plugins/{cmd-filter => cmd/filter}/filter.rb (100%) rename data/plugins/{cmd-filter => cmd/filter}/plugin.xml (100%) rename data/plugins/{cmd-item => cmd/item}/item.rb (100%) rename data/plugins/{cmd-item => cmd/item}/plugin.xml (100%) rename data/plugins/{cmd-lookup => cmd/lookup}/lookup.rb (100%) rename data/plugins/{cmd-lookup => cmd/lookup}/plugin.xml (100%) rename data/plugins/{cmd-npc => cmd/npc}/plugin.xml (100%) rename data/plugins/{cmd-npc => cmd/npc}/spawn.rb (100%) rename data/plugins/{cmd-skill => cmd/skill}/plugin.xml (100%) rename data/plugins/{cmd-skill => cmd/skill}/skill.rb (100%) rename data/plugins/{cmd-teleport => cmd/teleport}/plugin.xml (100%) rename data/plugins/{cmd-teleport => cmd/teleport}/teleport.rb (100%) rename data/plugins/{entity-spawning => entity/spawning}/npc-spawn.rb (100%) rename data/plugins/{entity-spawning => entity/spawning}/plugin.xml (100%) rename data/plugins/{location-lumbridge => location/lumbridge}/npcs.rb (100%) rename data/plugins/{location-lumbridge => location/lumbridge}/plugin.xml (100%) rename data/plugins/{location-tutorial-island => location/tutorial-island}/npcs.rb (100%) rename data/plugins/{location-tutorial-island => location/tutorial-island}/plugin.xml (100%) rename data/plugins/{skill-herblore => skill/herblore}/herb.rb (100%) rename data/plugins/{skill-herblore => skill/herblore}/herblore.rb (100%) rename data/plugins/{skill-herblore => skill/herblore}/ingredient.rb (100%) rename data/plugins/{skill-herblore => skill/herblore}/plugin.xml (100%) rename data/plugins/{skill-herblore => skill/herblore}/potion.rb (100%) rename data/plugins/{skill-magic => skill/magic}/alchemy.rb (100%) rename data/plugins/{skill-magic => skill/magic}/convert.rb (100%) rename data/plugins/{skill-magic => skill/magic}/element.rb (100%) rename data/plugins/{skill-magic => skill/magic}/enchant.rb (100%) rename data/plugins/{skill-magic => skill/magic}/magic.rb (100%) rename data/plugins/{skill-magic => skill/magic}/plugin.xml (100%) rename data/plugins/{skill-magic => skill/magic}/teleport.rb (100%) rename data/plugins/{skill-mining => skill/mining}/gem.rb (100%) rename data/plugins/{skill-mining => skill/mining}/mining.rb (100%) rename data/plugins/{skill-mining => skill/mining}/ore.rb (100%) rename data/plugins/{skill-mining => skill/mining}/pickaxe.rb (100%) rename data/plugins/{skill-mining => skill/mining}/plugin.xml (100%) rename data/plugins/{skill-mining => skill/mining}/respawn.rb (100%) rename data/plugins/{skill-prayer => skill/prayer}/bury.rb (100%) rename data/plugins/{skill-prayer => skill/prayer}/plugin.xml (100%) rename data/plugins/{skill-runecraft => skill/runecraft}/altar.rb (100%) rename data/plugins/{skill-runecraft => skill/runecraft}/plugin.xml (100%) rename data/plugins/{skill-runecraft => skill/runecraft}/rune.rb (100%) rename data/plugins/{skill-runecraft => skill/runecraft}/runecraft.rb (100%) rename data/plugins/{skill-runecraft => skill/runecraft}/talisman.rb (100%) diff --git a/data/plugins/cmd-animate/animate.rb b/data/plugins/cmd/animate/animate.rb similarity index 100% rename from data/plugins/cmd-animate/animate.rb rename to data/plugins/cmd/animate/animate.rb diff --git a/data/plugins/cmd-animate/plugin.xml b/data/plugins/cmd/animate/plugin.xml similarity index 100% rename from data/plugins/cmd-animate/plugin.xml rename to data/plugins/cmd/animate/plugin.xml diff --git a/data/plugins/cmd-bank/bank.rb b/data/plugins/cmd/bank/bank.rb similarity index 100% rename from data/plugins/cmd-bank/bank.rb rename to data/plugins/cmd/bank/bank.rb diff --git a/data/plugins/cmd-bank/plugin.xml b/data/plugins/cmd/bank/plugin.xml similarity index 100% rename from data/plugins/cmd-bank/plugin.xml rename to data/plugins/cmd/bank/plugin.xml diff --git a/data/plugins/cmd-filter/filter.rb b/data/plugins/cmd/filter/filter.rb similarity index 100% rename from data/plugins/cmd-filter/filter.rb rename to data/plugins/cmd/filter/filter.rb diff --git a/data/plugins/cmd-filter/plugin.xml b/data/plugins/cmd/filter/plugin.xml similarity index 100% rename from data/plugins/cmd-filter/plugin.xml rename to data/plugins/cmd/filter/plugin.xml diff --git a/data/plugins/cmd-item/item.rb b/data/plugins/cmd/item/item.rb similarity index 100% rename from data/plugins/cmd-item/item.rb rename to data/plugins/cmd/item/item.rb diff --git a/data/plugins/cmd-item/plugin.xml b/data/plugins/cmd/item/plugin.xml similarity index 100% rename from data/plugins/cmd-item/plugin.xml rename to data/plugins/cmd/item/plugin.xml diff --git a/data/plugins/cmd-lookup/lookup.rb b/data/plugins/cmd/lookup/lookup.rb similarity index 100% rename from data/plugins/cmd-lookup/lookup.rb rename to data/plugins/cmd/lookup/lookup.rb diff --git a/data/plugins/cmd-lookup/plugin.xml b/data/plugins/cmd/lookup/plugin.xml similarity index 100% rename from data/plugins/cmd-lookup/plugin.xml rename to data/plugins/cmd/lookup/plugin.xml diff --git a/data/plugins/cmd-npc/plugin.xml b/data/plugins/cmd/npc/plugin.xml similarity index 100% rename from data/plugins/cmd-npc/plugin.xml rename to data/plugins/cmd/npc/plugin.xml diff --git a/data/plugins/cmd-npc/spawn.rb b/data/plugins/cmd/npc/spawn.rb similarity index 100% rename from data/plugins/cmd-npc/spawn.rb rename to data/plugins/cmd/npc/spawn.rb diff --git a/data/plugins/cmd-skill/plugin.xml b/data/plugins/cmd/skill/plugin.xml similarity index 100% rename from data/plugins/cmd-skill/plugin.xml rename to data/plugins/cmd/skill/plugin.xml diff --git a/data/plugins/cmd-skill/skill.rb b/data/plugins/cmd/skill/skill.rb similarity index 100% rename from data/plugins/cmd-skill/skill.rb rename to data/plugins/cmd/skill/skill.rb diff --git a/data/plugins/cmd-teleport/plugin.xml b/data/plugins/cmd/teleport/plugin.xml similarity index 100% rename from data/plugins/cmd-teleport/plugin.xml rename to data/plugins/cmd/teleport/plugin.xml diff --git a/data/plugins/cmd-teleport/teleport.rb b/data/plugins/cmd/teleport/teleport.rb similarity index 100% rename from data/plugins/cmd-teleport/teleport.rb rename to data/plugins/cmd/teleport/teleport.rb diff --git a/data/plugins/entity-spawning/npc-spawn.rb b/data/plugins/entity/spawning/npc-spawn.rb similarity index 100% rename from data/plugins/entity-spawning/npc-spawn.rb rename to data/plugins/entity/spawning/npc-spawn.rb diff --git a/data/plugins/entity-spawning/plugin.xml b/data/plugins/entity/spawning/plugin.xml similarity index 100% rename from data/plugins/entity-spawning/plugin.xml rename to data/plugins/entity/spawning/plugin.xml diff --git a/data/plugins/location-lumbridge/npcs.rb b/data/plugins/location/lumbridge/npcs.rb similarity index 100% rename from data/plugins/location-lumbridge/npcs.rb rename to data/plugins/location/lumbridge/npcs.rb diff --git a/data/plugins/location-lumbridge/plugin.xml b/data/plugins/location/lumbridge/plugin.xml similarity index 100% rename from data/plugins/location-lumbridge/plugin.xml rename to data/plugins/location/lumbridge/plugin.xml diff --git a/data/plugins/location-tutorial-island/npcs.rb b/data/plugins/location/tutorial-island/npcs.rb similarity index 100% rename from data/plugins/location-tutorial-island/npcs.rb rename to data/plugins/location/tutorial-island/npcs.rb diff --git a/data/plugins/location-tutorial-island/plugin.xml b/data/plugins/location/tutorial-island/plugin.xml similarity index 100% rename from data/plugins/location-tutorial-island/plugin.xml rename to data/plugins/location/tutorial-island/plugin.xml diff --git a/data/plugins/skill-herblore/herb.rb b/data/plugins/skill/herblore/herb.rb similarity index 100% rename from data/plugins/skill-herblore/herb.rb rename to data/plugins/skill/herblore/herb.rb diff --git a/data/plugins/skill-herblore/herblore.rb b/data/plugins/skill/herblore/herblore.rb similarity index 100% rename from data/plugins/skill-herblore/herblore.rb rename to data/plugins/skill/herblore/herblore.rb diff --git a/data/plugins/skill-herblore/ingredient.rb b/data/plugins/skill/herblore/ingredient.rb similarity index 100% rename from data/plugins/skill-herblore/ingredient.rb rename to data/plugins/skill/herblore/ingredient.rb diff --git a/data/plugins/skill-herblore/plugin.xml b/data/plugins/skill/herblore/plugin.xml similarity index 100% rename from data/plugins/skill-herblore/plugin.xml rename to data/plugins/skill/herblore/plugin.xml diff --git a/data/plugins/skill-herblore/potion.rb b/data/plugins/skill/herblore/potion.rb similarity index 100% rename from data/plugins/skill-herblore/potion.rb rename to data/plugins/skill/herblore/potion.rb diff --git a/data/plugins/skill-magic/alchemy.rb b/data/plugins/skill/magic/alchemy.rb similarity index 100% rename from data/plugins/skill-magic/alchemy.rb rename to data/plugins/skill/magic/alchemy.rb diff --git a/data/plugins/skill-magic/convert.rb b/data/plugins/skill/magic/convert.rb similarity index 100% rename from data/plugins/skill-magic/convert.rb rename to data/plugins/skill/magic/convert.rb diff --git a/data/plugins/skill-magic/element.rb b/data/plugins/skill/magic/element.rb similarity index 100% rename from data/plugins/skill-magic/element.rb rename to data/plugins/skill/magic/element.rb diff --git a/data/plugins/skill-magic/enchant.rb b/data/plugins/skill/magic/enchant.rb similarity index 100% rename from data/plugins/skill-magic/enchant.rb rename to data/plugins/skill/magic/enchant.rb diff --git a/data/plugins/skill-magic/magic.rb b/data/plugins/skill/magic/magic.rb similarity index 100% rename from data/plugins/skill-magic/magic.rb rename to data/plugins/skill/magic/magic.rb diff --git a/data/plugins/skill-magic/plugin.xml b/data/plugins/skill/magic/plugin.xml similarity index 100% rename from data/plugins/skill-magic/plugin.xml rename to data/plugins/skill/magic/plugin.xml diff --git a/data/plugins/skill-magic/teleport.rb b/data/plugins/skill/magic/teleport.rb similarity index 100% rename from data/plugins/skill-magic/teleport.rb rename to data/plugins/skill/magic/teleport.rb diff --git a/data/plugins/skill-mining/gem.rb b/data/plugins/skill/mining/gem.rb similarity index 100% rename from data/plugins/skill-mining/gem.rb rename to data/plugins/skill/mining/gem.rb diff --git a/data/plugins/skill-mining/mining.rb b/data/plugins/skill/mining/mining.rb similarity index 100% rename from data/plugins/skill-mining/mining.rb rename to data/plugins/skill/mining/mining.rb diff --git a/data/plugins/skill-mining/ore.rb b/data/plugins/skill/mining/ore.rb similarity index 100% rename from data/plugins/skill-mining/ore.rb rename to data/plugins/skill/mining/ore.rb diff --git a/data/plugins/skill-mining/pickaxe.rb b/data/plugins/skill/mining/pickaxe.rb similarity index 100% rename from data/plugins/skill-mining/pickaxe.rb rename to data/plugins/skill/mining/pickaxe.rb diff --git a/data/plugins/skill-mining/plugin.xml b/data/plugins/skill/mining/plugin.xml similarity index 100% rename from data/plugins/skill-mining/plugin.xml rename to data/plugins/skill/mining/plugin.xml diff --git a/data/plugins/skill-mining/respawn.rb b/data/plugins/skill/mining/respawn.rb similarity index 100% rename from data/plugins/skill-mining/respawn.rb rename to data/plugins/skill/mining/respawn.rb diff --git a/data/plugins/skill-prayer/bury.rb b/data/plugins/skill/prayer/bury.rb similarity index 100% rename from data/plugins/skill-prayer/bury.rb rename to data/plugins/skill/prayer/bury.rb diff --git a/data/plugins/skill-prayer/plugin.xml b/data/plugins/skill/prayer/plugin.xml similarity index 100% rename from data/plugins/skill-prayer/plugin.xml rename to data/plugins/skill/prayer/plugin.xml diff --git a/data/plugins/skill-runecraft/altar.rb b/data/plugins/skill/runecraft/altar.rb similarity index 100% rename from data/plugins/skill-runecraft/altar.rb rename to data/plugins/skill/runecraft/altar.rb diff --git a/data/plugins/skill-runecraft/plugin.xml b/data/plugins/skill/runecraft/plugin.xml similarity index 100% rename from data/plugins/skill-runecraft/plugin.xml rename to data/plugins/skill/runecraft/plugin.xml diff --git a/data/plugins/skill-runecraft/rune.rb b/data/plugins/skill/runecraft/rune.rb similarity index 100% rename from data/plugins/skill-runecraft/rune.rb rename to data/plugins/skill/runecraft/rune.rb diff --git a/data/plugins/skill-runecraft/runecraft.rb b/data/plugins/skill/runecraft/runecraft.rb similarity index 100% rename from data/plugins/skill-runecraft/runecraft.rb rename to data/plugins/skill/runecraft/runecraft.rb diff --git a/data/plugins/skill-runecraft/talisman.rb b/data/plugins/skill/runecraft/talisman.rb similarity index 100% rename from data/plugins/skill-runecraft/talisman.rb rename to data/plugins/skill/runecraft/talisman.rb diff --git a/src/org/apollo/io/PluginMetaDataParser.java b/src/org/apollo/io/PluginMetaDataParser.java index 165b9d25..89ce7269 100644 --- a/src/org/apollo/io/PluginMetaDataParser.java +++ b/src/org/apollo/io/PluginMetaDataParser.java @@ -1,5 +1,6 @@ package org.apollo.io; +import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -60,11 +61,12 @@ public final class PluginMetaDataParser { /** * Parses the XML and creates a meta data object. * + * @param base The base path for this plugin (Directory or Jar file) * @return The meta data object. * @throws SAXException If a SAX error occurs. * @throws IOException If an I/O error occurs. */ - public PluginMetaData parse() throws IOException, SAXException { + public PluginMetaData parse(File base) throws IOException, SAXException { XmlNode rootNode = parser.parse(is); if (!rootNode.getName().equals("plugin")) { throw new IOException("Root node must be named plugin."); @@ -116,7 +118,7 @@ public final class PluginMetaDataParser { } } - return new PluginMetaData(id, name, description, authors, scripts, dependencies, version); + return new PluginMetaData(id, base, name, description, authors, scripts, dependencies, version); } } \ No newline at end of file diff --git a/src/org/apollo/util/plugin/PluginManager.java b/src/org/apollo/util/plugin/PluginManager.java index b0db4afa..90d864dc 100644 --- a/src/org/apollo/util/plugin/PluginManager.java +++ b/src/org/apollo/util/plugin/PluginManager.java @@ -66,20 +66,34 @@ public final class PluginManager { * @throws SAXException If a SAX error occurs. */ private Collection findPlugins() throws IOException, SAXException { + return findPlugins(new File("./data/plugins")); + } + + /** + * Finds plugins and loads their meta data. + * + * @param dir The directory to search + * + * @return A collection of plugin meta data objects. + * @throws IOException If an I/O error occurs. + * @throws SAXException If a SAX error occurs. + */ + private Collection findPlugins(File dir) throws IOException, SAXException { Collection plugins = new ArrayList(); - File dir = new File("./data/plugins"); for (File plugin : dir.listFiles()) { if (plugin.isDirectory() && !plugin.getName().startsWith(".")) { File xml = new File(plugin, "plugin.xml"); if (xml.exists()) { try (InputStream is = new FileInputStream(xml)) { PluginMetaDataParser parser = new PluginMetaDataParser(is); - PluginMetaData meta = parser.parse(); + PluginMetaData meta = parser.parse(plugin); for (String author : meta.getAuthors()) { authors.add(author); } plugins.add(meta); } + } else { + plugins.addAll(findPlugins(plugin)); } } } @@ -163,7 +177,7 @@ public final class PluginManager { String[] scripts = plugin.getScripts(); for (String script : scripts) { - File scriptFile = new File("./data/plugins/" + plugin.getId() + "/" + script); + File scriptFile = new File(plugin.getBase(), script); InputStream is = new FileInputStream(scriptFile); env.parse(is, scriptFile.getAbsolutePath()); } diff --git a/src/org/apollo/util/plugin/PluginMetaData.java b/src/org/apollo/util/plugin/PluginMetaData.java index ce722f38..4ee4be0e 100644 --- a/src/org/apollo/util/plugin/PluginMetaData.java +++ b/src/org/apollo/util/plugin/PluginMetaData.java @@ -1,5 +1,7 @@ package org.apollo.util.plugin; +import java.io.File; + /** * Contains attributes which describe a plugin. * @@ -42,6 +44,11 @@ public final class PluginMetaData { */ private final double version; + /** + * The plugin's base folder + */ + private final File base; + /** * Creates the plugin meta data. * @@ -53,9 +60,10 @@ public final class PluginMetaData { * @param dependencies The plugin's dependencies. * @param version The plugin's version. */ - public PluginMetaData(String id, String name, String description, String[] authors, String[] scripts, + public PluginMetaData(String id, File base, String name, String description, String[] authors, String[] scripts, String[] dependencies, double version) { this.id = id; + this.base = base; this.name = name; this.description = description; this.authors = authors; @@ -127,4 +135,12 @@ public final class PluginMetaData { return version; } + /** + * Gets the plugin's base folder. + * + * @return The plugin's base folder (where plugin.xml is) + */ + public File getBase() { + return base; + } } \ No newline at end of file From e313190dca61d11d685294a17d015f2bad1bcb83 Mon Sep 17 00:00:00 2001 From: Nikki Date: Thu, 1 May 2014 13:45:18 -0400 Subject: [PATCH 2/2] Remove extra comment information. --- src/org/apollo/io/PluginMetaDataParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/apollo/io/PluginMetaDataParser.java b/src/org/apollo/io/PluginMetaDataParser.java index 89ce7269..56e6c343 100644 --- a/src/org/apollo/io/PluginMetaDataParser.java +++ b/src/org/apollo/io/PluginMetaDataParser.java @@ -61,7 +61,7 @@ public final class PluginMetaDataParser { /** * Parses the XML and creates a meta data object. * - * @param base The base path for this plugin (Directory or Jar file) + * @param base The base path for this plugin * @return The meta data object. * @throws SAXException If a SAX error occurs. * @throws IOException If an I/O error occurs.