package advancedsystemsmanager.compatibility;
import advancedsystemsmanager.compatibility.appliedenergistics.AECompat;
import advancedsystemsmanager.compatibility.computercraft.ComputerCraftCompat;
import advancedsystemsmanager.compatibility.jabba.JabbaCompat;
import advancedsystemsmanager.compatibility.rf.RFCompat;
import advancedsystemsmanager.compatibility.thaumcraft.TCCompat;
import advancedsystemsmanager.compatibility.waila.WailaCompat;
import advancedsystemsmanager.items.ItemLabeler;
import advancedsystemsmanager.reference.Mods;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModAPIManager;
public enum ModCompat
{
COMPUTERCRAFT(Mods.COMPUTERCRAFT, "ComputerCraft", new ComputerCraftCompat()),
OPENCOMPUTERS(Mods.OPENCOMPUTERS, "OpenComputers"),
JABBA(Mods.JABBA, "JABBA", new JabbaCompat()),
WAILA(Mods.WAILA, "Waila", new WailaCompat()),
RF(Mods.COFH_ENERGY, "RF API", new RFCompat()),
AE(Mods.APPLIEDENERGISTICS2, "Applied Energistics", new AECompat()),
TC(Mods.THAUMCRAFT, "Thaumcraft", new TCCompat());
private final String modId;
private final String modName;
private final CompatBase compatClass;
private final boolean loaded;
ModCompat(CompatBase compatClass)
{
this("minecraft", "Minecraft", compatClass, true);
}
ModCompat(String modId, String modName, CompatBase compatClass, boolean loaded)
{
this.modId = modId;
this.modName = modName;
this.compatClass = compatClass;
this.loaded = loaded;
}
ModCompat(String modId, CompatBase compatClass)
{
this(modId, modId, compatClass);
}
ModCompat(String modId, String modName, CompatBase compatClass)
{
this(modId, modName, compatClass, Loader.isModLoaded(modId) || ModAPIManager.INSTANCE.hasAPI(modId));
}
ModCompat(String modId)
{
this(modId, modId, null, Loader.isModLoaded(modId));
}
ModCompat(String modId, String modName)
{
this(modId, modName, null);
}
public static void preInit()
{
for (ModCompat compat : values())
{
if (compat.compatClass != null)
{
compat.compatClass.preInit(compat);
}
}
}
public static void init()
{
for (ModCompat compat : values())
{
if (compat.isLoaded() && compat.compatClass != null)
{
compat.compatClass.init();
}
}
}
public static void postInit()
{
for (ModCompat compat : values())
{
if (compat.isLoaded() && compat.compatClass != null)
{
compat.compatClass.postInit();
}
}
}
public static void registerLabel(Class clazz)
{
if (WAILA.isLoaded())
{
((WailaCompat)WAILA.compatClass).registerLabelProvider(clazz);
}
ItemLabeler.registerClass(clazz);
}
public String getModId()
{
return modId;
}
public String getModName()
{
return modName;
}
public boolean isLoaded()
{
return loaded;
}
@SuppressWarnings(value = "unchecked")
public <T extends CompatBase> T getCompatClass()
{
return (T)compatClass;
}
}