diff --git a/src/main/java/tconstruct/TConstruct.java b/src/main/java/tconstruct/TConstruct.java index 03de02385b3..5b96ce39a92 100644 --- a/src/main/java/tconstruct/TConstruct.java +++ b/src/main/java/tconstruct/TConstruct.java @@ -1,6 +1,7 @@ package tconstruct; import mantle.lib.TabTools; +import mantle.module.ModuleController; import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraftforge.common.MinecraftForge; @@ -80,6 +81,9 @@ public class TConstruct @SidedProxy(clientSide = "tconstruct.client.TProxyClient", serverSide = "tconstruct.common.TProxyCommon") public static TProxyCommon proxy; + // Module loader + public static final ModuleController moduleLoader = new ModuleController("TDynstruct.cfg", "TConstruct"); + // The packet pipeline public static final PacketPipeline packetPipeline = new PacketPipeline(); @@ -99,7 +103,7 @@ public TConstruct() EnvironmentChecks.verifyEnvironmentSanity(); MinecraftForge.EVENT_BUS.register(events = new TEventHandler()); - PluginController.getController().registerBuiltins(); + PluginController.registerModules(); } @EventHandler @@ -166,7 +170,7 @@ public void preInit (FMLPreInitializationEvent event) FMLCommonHandler.instance().bus().register(new TControls()); } - PluginController.getController().preInit(); + moduleLoader.preInit(); } @EventHandler @@ -181,12 +185,12 @@ public void init (FMLInitializationEvent event) DimensionBlacklist.getBadBimensions(); GameRegistry.registerWorldGenerator(new SlimeIslandGen(TRepo.slimePool, 2), 2); - PluginController.getController().init(); - if (PHConstruct.achievementsEnabled) { TAchievements.init(); } + + moduleLoader.init(); } @EventHandler @@ -201,7 +205,7 @@ public void postInit (FMLPostInitializationEvent evt) content.createEntities(); recipes.modRecipes(); - PluginController.getController().postInit(); + moduleLoader.postInit(); } public static LiquidCasting getTableCasting () diff --git a/src/main/java/tconstruct/plugins/PluginController.java b/src/main/java/tconstruct/plugins/PluginController.java index 08f86ca5dec..dc5de8a57c7 100644 --- a/src/main/java/tconstruct/plugins/PluginController.java +++ b/src/main/java/tconstruct/plugins/PluginController.java @@ -1,133 +1,29 @@ package tconstruct.plugins; -import java.io.File; -import java.util.LinkedList; -import java.util.List; - -import net.minecraftforge.common.config.Configuration; -import tconstruct.TConstruct; +import static tconstruct.TConstruct.moduleLoader; import tconstruct.plugins.fmp.ForgeMultiPart; import tconstruct.plugins.ic2.IC2; import tconstruct.plugins.imc.AppEng; import tconstruct.plugins.imc.BuildcraftTransport; import tconstruct.plugins.imc.Mystcraft; import tconstruct.plugins.imc.Thaumcraft; -import cpw.mods.fml.common.Loader; public class PluginController { - private enum Phase - { - PRELAUNCH, PREINIT, INIT, POSTINIT, DONE - } - - private static PluginController instance; - private Configuration conf = null; - private List plugins = new LinkedList(); - private Phase currPhase = Phase.PRELAUNCH; + private PluginController() {} // Don't need to instantiate this. - private PluginController() - { - String path = Loader.instance().getConfigDir().toString() + File.separator + "TDynstruct.cfg"; - TConstruct.logger.info("[PluginController] Using config path: " + path); - conf = new Configuration(new File(path)); - } - - public static PluginController getController () - { - if (instance == null) - instance = new PluginController(); - return instance; - } - - /** - * Register a plugin with the controller. - * - * Warning: Make sure your plugin class imports no APIs directly! Any API - * interaction should be done by handlers called in pre/init/post so merely - * creating an instance to check the mod ID isn't a hazard to the - * controller. - * - * @param plugin - * Plugin to register - */ - public void registerPlugin (ICompatPlugin plugin) - { - conf.load(); - boolean shouldLoad = conf.get("Plugins", plugin.getModId(), true).getBoolean(true); - conf.save(); - - if (shouldLoad) - loadPlugin(plugin); - } - - // This does the actual plugin loading if mod is present; needed to allow - // force-enabling. - private void loadPlugin (ICompatPlugin plugin) - { - if (!Loader.isModLoaded(plugin.getModId())) - return; - - TConstruct.logger.info("[PluginController] Registering compat plugin for " + plugin.getModId()); - plugins.add(plugin); - - switch (currPhase) - // Play catch-up if plugin is registered late - { - case DONE: - case POSTINIT: - plugin.preInit(); - plugin.init(); - plugin.postInit(); - break; - case INIT: - plugin.preInit(); - plugin.init(); - break; - case PREINIT: - plugin.preInit(); - break; - default: - break; - } - } - - public void preInit () - { - currPhase = Phase.PREINIT; - for (ICompatPlugin pl : plugins) - pl.preInit(); - } - - public void init () - { - currPhase = Phase.INIT; - for (ICompatPlugin pl : plugins) - pl.init(); - } - - public void postInit () - { - currPhase = Phase.POSTINIT; - for (ICompatPlugin pl : plugins) - pl.postInit(); - currPhase = Phase.DONE; - } - - public void registerBuiltins () + public static void registerModules() { // Mystcraft is pushed in through the backdoor so it can't be disabled. - loadPlugin(new Mystcraft()); - - registerPlugin(new AppEng()); - registerPlugin(new BuildcraftTransport()); - registerPlugin(new ForgeMultiPart()); - registerPlugin(new IC2()); - // registerPlugin(new MineFactoryReloaded()); - // registerPlugin(new NotEnoughItems()); - registerPlugin(new Thaumcraft()); - // registerPlugin(new Waila()); + moduleLoader.registerUncheckedModule(Mystcraft.class); + + // Register the remaining plugin classes normally + moduleLoader.registerModule(AppEng.class); + moduleLoader.registerModule(BuildcraftTransport.class); + moduleLoader.registerModule(ForgeMultiPart.class); + moduleLoader.registerModule(IC2.class); + moduleLoader.registerModule(Thaumcraft.class); } } diff --git a/src/main/java/tconstruct/plugins/fmp/ForgeMultiPart.java b/src/main/java/tconstruct/plugins/fmp/ForgeMultiPart.java index 524c0cf5471..f1fd362d18a 100644 --- a/src/main/java/tconstruct/plugins/fmp/ForgeMultiPart.java +++ b/src/main/java/tconstruct/plugins/fmp/ForgeMultiPart.java @@ -1,15 +1,18 @@ package tconstruct.plugins.fmp; +import codechicken.microblock.BlockMicroMaterial; +import codechicken.microblock.MicroMaterialRegistry; +import mantle.module.ILoadableModule; +import net.minecraft.block.Block; import tconstruct.TConstruct; import tconstruct.common.TRepo; import tconstruct.plugins.ICompatPlugin; -public class ForgeMultiPart implements ICompatPlugin +public class ForgeMultiPart implements ILoadableModule { - @Override - public String getModId() { - return "ForgeMultipart"; - } + + @SuppressWarnings("unused") + public static String modId = "ForgeMultipart"; @Override public void preInit() { @@ -20,13 +23,13 @@ public void preInit() { public void init() { TConstruct.logger.info("ForgeMultipart detected. Registering TConstruct decorative blocks with FMP."); - RegisterWithFMP.registerBlock(TRepo.clearGlass); - RegisterWithFMP.registerBlock(TRepo.stainedGlassClear, 0, 15); - RegisterWithFMP.registerBlock(TRepo.multiBrick, 0, 13); - RegisterWithFMP.registerBlock(TRepo.metalBlock, 0, 10); - RegisterWithFMP.registerBlock(TRepo.multiBrickFancy, 0, 15); - RegisterWithFMP.registerBlock(TRepo.smeltery, 2, 2); - RegisterWithFMP.registerBlock(TRepo.smeltery, 4, 10); + registerBlock(TRepo.clearGlass); + registerBlock(TRepo.stainedGlassClear, 0, 15); + registerBlock(TRepo.multiBrick, 0, 13); + registerBlock(TRepo.metalBlock, 0, 10); + registerBlock(TRepo.multiBrickFancy, 0, 15); + registerBlock(TRepo.smeltery, 2, 2); + registerBlock(TRepo.smeltery, 4, 10); } @Override @@ -34,4 +37,36 @@ public void postInit() { // Nothing } + //For blocks with metadata values only + public static void registerBlock (Block block, int metastart, int metaend) + { + for (int meta = metastart; meta <= metaend; meta++) + { + String identifier = new String(block.getUnlocalizedName()); + MicroMaterialRegistry.registerMaterial(new BlockMicroMaterial(block, meta), identifier + meta); + } + } + + //For blocks without metadata values only. + public static void registerBlock (Block block) + { + BlockMicroMaterial.createAndRegister(block, 0); + } + + //For blocks with metadata values and special MicroMaterial only + public static void registerBlock (Block block, int metastart, int metaend, MicroMaterialRegistry.IMicroMaterial material) + { + for (int meta = metastart; meta <= metaend; meta++) + { + String identifier = new String(block.getUnlocalizedName()); + MicroMaterialRegistry.registerMaterial(material, identifier + meta); + } + } + + //For blocks without metadata values and special MicroMaterial only. + public static void registerBlock (Block block, MicroMaterialRegistry.IMicroMaterial material) + { + MicroMaterialRegistry.registerMaterial(material, new String(block.getUnlocalizedName())); + } + } diff --git a/src/main/java/tconstruct/plugins/fmp/RegisterWithFMP.java b/src/main/java/tconstruct/plugins/fmp/RegisterWithFMP.java deleted file mode 100644 index 2ca31124dd5..00000000000 --- a/src/main/java/tconstruct/plugins/fmp/RegisterWithFMP.java +++ /dev/null @@ -1,42 +0,0 @@ -package tconstruct.plugins.fmp; - -import codechicken.microblock.MicroMaterialRegistry.IMicroMaterial; - -import net.minecraft.block.Block; -import codechicken.microblock.BlockMicroMaterial; -import codechicken.microblock.MicroMaterialRegistry; - -public class RegisterWithFMP -{ - //For blocks with metadata values only - public static void registerBlock (Block block, int metastart, int metaend) - { - for (int meta = metastart; meta <= metaend; meta++) - { - String identifier = new String(block.getUnlocalizedName()); - MicroMaterialRegistry.registerMaterial(new BlockMicroMaterial(block, meta), identifier + meta); - } - } - - //For blocks without metadata values only. - public static void registerBlock (Block block) - { - BlockMicroMaterial.createAndRegister(block, 0); - } - - //For blocks with metadata values and special MicroMaterial only - public static void registerBlock (Block block, int metastart, int metaend, IMicroMaterial material) - { - for (int meta = metastart; meta <= metaend; meta++) - { - String identifier = new String(block.getUnlocalizedName()); - MicroMaterialRegistry.registerMaterial(material, identifier + meta); - } - } - - //For blocks without metadata values and special MicroMaterial only. - public static void registerBlock (Block block, IMicroMaterial material) - { - MicroMaterialRegistry.registerMaterial(material, new String(block.getUnlocalizedName())); - } -} diff --git a/src/main/java/tconstruct/plugins/ic2/IC2.java b/src/main/java/tconstruct/plugins/ic2/IC2.java index a0cd44b5de4..ef6f1ac894a 100644 --- a/src/main/java/tconstruct/plugins/ic2/IC2.java +++ b/src/main/java/tconstruct/plugins/ic2/IC2.java @@ -1,5 +1,6 @@ package tconstruct.plugins.ic2; +import mantle.module.ILoadableModule; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; @@ -10,17 +11,13 @@ import tconstruct.library.crafting.LiquidCasting; import tconstruct.plugins.ICompatPlugin; -public class IC2 implements ICompatPlugin +public class IC2 implements ILoadableModule { private static final String IC2_UUM_FLUIDNAME = "uumatter"; - private Fluid fluidUUM; - @Override - public String getModId () - { - return "IC2"; - } + @SuppressWarnings("unused") + public static String modId = "IC2"; @Override public void preInit () @@ -33,50 +30,15 @@ public void init () { TConstruct.logger.info("[IC2] Preparing for shenanigans."); - fluidUUM = FluidRegistry.getFluid(IC2_UUM_FLUIDNAME); + Fluid fluidUUM = FluidRegistry.getFluid(IC2_UUM_FLUIDNAME); if (fluidUUM == null) return; - // Useful stuff - // ItemStack ingotCast = new ItemStack(TRepo.metalPattern, 1, 0); - // ItemStack gemCast = new ItemStack(TRepo.metalPattern, 1, 26); - // FluidStack fluidStack = new FluidStack(fluidUUM, 1); FluidStack fluidStackBlock = new FluidStack(fluidUUM, 4500); - // LiquidCasting tableCasting = TConstructRegistry.getTableCasting(); LiquidCasting basinCasting = TConstructRegistry.getBasinCasting(); - // Table casting - // tableCasting.addCastingRecipe(new ItemStack(Item.ingotIron), - // fluidStack, ingotCast, 20); - // tableCasting.addCastingRecipe(new ItemStack(Item.emerald), - // fluidStack, gemCast, 20); - // Block casting - // basinCasting.addCastingRecipe(new ItemStack(Block.blockIron), - // fluidStackBlock, null, true, 50); // Iron convenience - // Dirt <-> Diamonds - // basinCasting.addCastingRecipe(new ItemStack(Block.dirt), new - // FluidStack(fluidUUM, 500), new ItemStack(Block.blockDiamond), true, - // 50); basinCasting.addCastingRecipe(new ItemStack(Blocks.diamond_block), fluidStackBlock, new ItemStack(Blocks.dirt), true, 50); - // RS cycle - // basinCasting.addCastingRecipe(new ItemStack(Block.blockRedstone), - // fluidStack, new ItemStack(Item.redstone), true, 50); - // basinCasting.addCastingRecipe(new ItemStack(Block.hardenedClay, 14, - // 1), fluidStack, new ItemStack(Block.blockRedstone), true, 50); - // basinCasting.addCastingRecipe(new ItemStack(Item.dyePowder, 1, 1), - // fluidStack, new ItemStack(Block.hardenedClay, 14, 1), true, 50); - // basinCasting.addCastingRecipe(new ItemStack(Block.blockRedstone), - // fluidStack, new ItemStack(Item.dyePowder, 1, 1), true, 50); - - // Alloy Mixing - // 1mB Anything + 1mB UU = 2mB UU - /* - * Maybe a bit *too* trolly for (Map.Entry ent : - * FluidRegistry.getRegisteredFluids().entrySet()) { if (ent.getValue() - * != fluidUUM) Smeltery.addAlloyMixing(new FluidStack(fluidUUM, 2), new - * FluidStack(fluidUUM, 1), new FluidStack(ent.getValue(), 1)); } - */ } @Override diff --git a/src/main/java/tconstruct/plugins/imc/AppEng.java b/src/main/java/tconstruct/plugins/imc/AppEng.java index 52452d42f4b..5bc1ca9f47b 100644 --- a/src/main/java/tconstruct/plugins/imc/AppEng.java +++ b/src/main/java/tconstruct/plugins/imc/AppEng.java @@ -3,22 +3,20 @@ import java.util.Arrays; import java.util.List; +import mantle.module.ILoadableModule; import tconstruct.TConstruct; import tconstruct.plugins.ICompatPlugin; import cpw.mods.fml.common.event.FMLInterModComms; -public class AppEng implements ICompatPlugin +public class AppEng implements ILoadableModule { private static List spatialIOLogics = Arrays.asList("AdaptiveSmelteryLogic", "AqueductLogic", "CastingBasinLogic", "CastingChannelLogic", "CastingTableLogic", "CraftingStationLogic", "DryingRackLogic", "EssenceExtractorLogic", "FaucetLogic", "FrypanLogic", "GolemPedestalLogic", "LavaTankLogic", "PartBuilderLogic", "PatternChestLogic", "SmelteryDrainLogic", "SmelteryLogic", "StencilTableLogic", "TankAirLogic", "TileEntityLandmine", "ToolForgeLogic", "ToolStationLogic", "TowerFurnaceLogic", "MultiServantLogic"); - @Override - public String getModId () - { - return "AppliedEnergistics"; - } + @SuppressWarnings("unused") + public static String modId = "AppliedEnergistics"; @Override public void preInit () diff --git a/src/main/java/tconstruct/plugins/imc/BuildcraftTransport.java b/src/main/java/tconstruct/plugins/imc/BuildcraftTransport.java index 46f6e826635..bfa59b1236c 100644 --- a/src/main/java/tconstruct/plugins/imc/BuildcraftTransport.java +++ b/src/main/java/tconstruct/plugins/imc/BuildcraftTransport.java @@ -1,5 +1,6 @@ package tconstruct.plugins.imc; +import mantle.module.ILoadableModule; import net.minecraft.block.Block; import net.minecraft.item.ItemStack; import tconstruct.TConstruct; @@ -7,14 +8,11 @@ import tconstruct.plugins.ICompatPlugin; import cpw.mods.fml.common.event.FMLInterModComms; -public class BuildcraftTransport implements ICompatPlugin +public class BuildcraftTransport implements ILoadableModule { - @Override - public String getModId () - { - return "BuildCraft|Transport"; - } + @SuppressWarnings("unused") + public static String modId = "BuildCraft|Transport"; @Override public void preInit () diff --git a/src/main/java/tconstruct/plugins/imc/Mystcraft.java b/src/main/java/tconstruct/plugins/imc/Mystcraft.java index 44f0b6402af..6832ae3100c 100644 --- a/src/main/java/tconstruct/plugins/imc/Mystcraft.java +++ b/src/main/java/tconstruct/plugins/imc/Mystcraft.java @@ -1,21 +1,19 @@ package tconstruct.plugins.imc; +import mantle.module.ILoadableModule; import net.minecraft.nbt.NBTTagCompound; import tconstruct.TConstruct; import tconstruct.plugins.ICompatPlugin; import cpw.mods.fml.common.event.FMLInterModComms; -public class Mystcraft implements ICompatPlugin +public class Mystcraft implements ILoadableModule { private static String[] fluids = new String[] { "invar.molten", "electrum.molten", "bronze.molten", "aluminumbrass.molten", "manyullyn.molten", "alumite.molten", "cobalt.molten", "moltenArdite", "ender", "steel.molten", "platinum.molten" }; - @Override - public String getModId () - { - return "Mystcraft"; - } + @SuppressWarnings("unused") + public static String modId = "Mystcraft"; @Override public void preInit () @@ -43,7 +41,7 @@ private void sendFluidBlacklist (String FluidName) NBTMsg.setTag("fluidsymbol", new NBTTagCompound()); NBTMsg.getCompoundTag("fluidsymbol").setFloat("rarity", 0.0F); NBTMsg.getCompoundTag("fluidsymbol").setFloat("grammarweight", 0.0F); - NBTMsg.getCompoundTag("fluidsymbol").setFloat("instabilityPerBlock", 10000F);// renders creative symbol useless + NBTMsg.getCompoundTag("fluidsymbol").setFloat("instabilityPerBlock", 10000F); // renders creative symbol useless NBTMsg.getCompoundTag("fluidsymbol").setString("fluidname", FluidName); FMLInterModComms.sendMessage("Mystcraft", "fluidsymbol", NBTMsg); } diff --git a/src/main/java/tconstruct/plugins/imc/Thaumcraft.java b/src/main/java/tconstruct/plugins/imc/Thaumcraft.java index 59dc98ccc3f..956801006de 100644 --- a/src/main/java/tconstruct/plugins/imc/Thaumcraft.java +++ b/src/main/java/tconstruct/plugins/imc/Thaumcraft.java @@ -1,19 +1,17 @@ package tconstruct.plugins.imc; +import mantle.module.ILoadableModule; import net.minecraft.item.ItemStack; import tconstruct.TConstruct; import tconstruct.common.TRepo; import tconstruct.plugins.ICompatPlugin; import cpw.mods.fml.common.event.FMLInterModComms; -public class Thaumcraft implements ICompatPlugin +public class Thaumcraft implements ILoadableModule { - @Override - public String getModId () - { - return "Thaumcraft"; - } + @SuppressWarnings("unused") + public static String modId = "Thaumcraft"; @Override public void preInit ()