package com.austinv11.collectiveframework.minecraft.compat.modules;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLStateEvent;
import java.util.ArrayList;
import java.util.List;
/**
* A registry for {@link IModule}
*/
public class Modules {
private static List<IModule> modules = new ArrayList<IModule>();
/**
* Registers a module
* @param module The module to register
*/
public static void registerModCompat(IModule module) {
modules.add(module);
}
private static boolean canModuleLoad(IModule module) {
for (String s : module.modsCompatible())
if (Loader.isModLoaded(s))
return true;
return false;
}
private static void cleanModules() {
List<IModule> uncleanedModules = new ArrayList<IModule>(modules);
modules.clear();
for (IModule m : uncleanedModules)
if (canModuleLoad(m))
modules.add(m);
}
/**
* Intended for internal use only
*/
public static void init() {
cleanModules();
}
/**
* Propagates an FMLStateEvent to all modules
* @param event The event
*/
public static void propagate(FMLStateEvent event) {
for (IModule m : modules)
if (event instanceof FMLPreInitializationEvent)
m.preInit((FMLPreInitializationEvent) event);
else if (event instanceof FMLInitializationEvent)
m.init((FMLInitializationEvent) event);
else
m.postInit((FMLPostInitializationEvent) event);
}
}