From a973907fa8106fe3c697f89e223a6489039bdd5e Mon Sep 17 00:00:00 2001 From: Parker Date: Thu, 21 Aug 2014 11:00:52 -0400 Subject: [PATCH] First draft of reworked plugin system. Compiles. Untested. --- api | 2 +- lang | 2 +- src/main/java/forestry/core/ForestryCore.java | 30 +---- .../java/forestry/plugins/PluginManager.java | 109 ++++++++++++++++-- 4 files changed, 106 insertions(+), 37 deletions(-) diff --git a/api b/api index 3f6be6bfc..ff260f1a5 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 3f6be6bfc53538ae723d14f3e9c5556788f31488 +Subproject commit ff260f1a51b762acd7fe750cb1a91ee12a3db554 diff --git a/lang b/lang index c235ad119..245f1d04f 160000 --- a/lang +++ b/lang @@ -1 +1 @@ -Subproject commit c235ad119fe0959fb79faa7ec8f17a12a4f38746 +Subproject commit 245f1d04f147c4d0ec56cfd934caae0c31ae6db9 diff --git a/src/main/java/forestry/core/ForestryCore.java b/src/main/java/forestry/core/ForestryCore.java index d57efd469..5838258eb 100755 --- a/src/main/java/forestry/core/ForestryCore.java +++ b/src/main/java/forestry/core/ForestryCore.java @@ -56,7 +56,7 @@ public class ForestryCore { ForestryAPI.instance = basemod; ForestryAPI.forestryConstants = new ForestryConstants(); - PluginManager.loadPlugins(modLocation); + PluginManager.loadForestryPlugins(); // Register event handler MinecraftForge.EVENT_BUS.register(new EventHandlerCore()); @@ -65,21 +65,7 @@ public class ForestryCore { if (!Config.disableVersionCheck) Version.versionCheck(); - for (IPlugin plugin : PluginManager.plugins) { - if (plugin instanceof PluginCore) - plugin.preInit(); - } - - for (IPlugin plugin : PluginManager.plugins) { - if (plugin instanceof PluginCore) - continue; - - if (plugin.isAvailable()) - plugin.preInit(); - else - Proxies.log.fine("Skipped plugin " + plugin.getClass() + " because preconditions were not met."); - } - + PluginManager.runPreInit(); } public void init(Object basemod) { @@ -142,20 +128,12 @@ public class ForestryCore { GameRegistry.registerTileEntity(TileEngine.class, "forestry.Engine"); GameRegistry.registerTileEntity(TileMachine.class, "forestry.Machine"); - + PluginManager.runInit(); } public void postInit() { - for (IPlugin plugin : PluginManager.plugins) { - if (plugin.isAvailable()) - plugin.doInit(); - } - - for (IPlugin plugin : PluginManager.plugins) { - if (plugin.isAvailable()) - plugin.postInit(); - } + PluginManager.runPostInit(); Proxies.common.registerTickHandlers(); diff --git a/src/main/java/forestry/plugins/PluginManager.java b/src/main/java/forestry/plugins/PluginManager.java index 4520e0b12..941f89b2d 100755 --- a/src/main/java/forestry/plugins/PluginManager.java +++ b/src/main/java/forestry/plugins/PluginManager.java @@ -18,6 +18,8 @@ import java.util.Comparator; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import com.google.common.collect.Lists; + import cpw.mods.fml.common.IFuelHandler; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameRegistry; @@ -39,15 +41,104 @@ public class PluginManager { * registered object during ModsLoaded(). See {@link IPlugin} for further * details. */ - public static ArrayList plugins = new ArrayList(); - public static ArrayList guiHandlers = new ArrayList(); - public static ArrayList packetHandlers = new ArrayList(); - public static ArrayList pickupHandlers = new ArrayList(); - public static ArrayList saveEventHandlers = new ArrayList(); - public static ArrayList resupplyHandlers = new ArrayList(); - public static ArrayList dictionaryHandlers = new ArrayList(); + public static ArrayList plugins = Lists.newArrayList(); + public static ArrayList guiHandlers = Lists.newArrayList(); + public static ArrayList packetHandlers = Lists.newArrayList(); + public static ArrayList pickupHandlers = Lists.newArrayList(); + public static ArrayList saveEventHandlers = Lists.newArrayList(); + public static ArrayList resupplyHandlers = Lists.newArrayList(); + public static ArrayList dictionaryHandlers = Lists.newArrayList(); - public static void loadPlugins(File modLocation) { + public static void addPlugin(IPlugin plugin) { + Proxies.log.fine("Loading plugin " + plugin.getClass().getSimpleName()); + plugins.add(plugin); + + if (plugin instanceof NativePlugin) { + + NativePlugin nplugin = (NativePlugin) plugin; + IGuiHandler guiHandler = nplugin.getGuiHandler(); + if (guiHandler != null) + guiHandlers.add(guiHandler); + + IPacketHandler packetHandler = nplugin.getPacketHandler(); + if (packetHandler != null) + packetHandlers.add(packetHandler); + + IPickupHandler pickupHandler = nplugin.getPickupHandler(); + if (pickupHandler != null) + pickupHandlers.add(pickupHandler); + + ISaveEventHandler saveHandler = nplugin.getSaveEventHandler(); + if (saveHandler != null) + saveEventHandlers.add(saveHandler); + + IResupplyHandler resupplyHandler = nplugin.getResupplyHandler(); + if (resupplyHandler != null) + resupplyHandlers.add(resupplyHandler); + + IOreDictionaryHandler dictionaryHandler = nplugin.getDictionaryHandler(); + if (dictionaryHandler != null) + dictionaryHandlers.add(dictionaryHandler); + } + + if (plugin instanceof IFuelHandler) + GameRegistry.registerFuelHandler((IFuelHandler) plugin); + } + + public static void loadForestryPlugins() { + addPlugin(new PluginCore()); + addPlugin(new PluginApiculture()); + addPlugin(new PluginArboriculture()); + addPlugin(new PluginEnergy()); + addPlugin(new PluginFactory()); + addPlugin(new PluginFarming()); + addPlugin(new PluginFood()); + addPlugin(new PluginLepidopterology()); + addPlugin(new PluginMail()); + addPlugin(new PluginStorage()); + addPlugin(new PluginBuildCraft()); + addPlugin(new PluginEE()); + addPlugin(new PluginFarmCraftory()); + addPlugin(new PluginIC2()); + addPlugin(new PluginNatura()); + } + + public static void runPreInit() { + for(IPlugin plugin : plugins) { + if(plugin instanceof PluginCore) { + plugin.preInit(); + break; + } + } + + for(IPlugin plugin : plugins) { + if(plugin instanceof PluginCore) { + continue; + } + + if(plugin.isAvailable()) { + plugin.preInit(); + } else { + Proxies.log.fine("Skipped plugin " + plugin.getClass() + " because preconditions were not met."); + } + } + } + + public static void runInit() { + for (IPlugin plugin : plugins) { + if(plugin.isAvailable()) + plugin.doInit(); + } + } + + public static void runPostInit() { + for (IPlugin plugin : plugins) { + if (plugin.isAvailable()) + plugin.postInit(); + } + } + + /*public static void loadPlugins(File modLocation) { loadIncludedPlugins(modLocation); loadExternalPlugins(modLocation); } @@ -258,5 +349,5 @@ public class PluginManager { } catch (Throwable ex) { // ex.printStackTrace(); } - } + }*/ }