Applied-Energistics-2-tiler.../integration/IntegrationNode.java

125 lines
2.9 KiB
Java
Raw Normal View History

package appeng.integration;
import java.lang.reflect.Field;
import appeng.api.exceptions.ModNotInstalled;
2014-02-09 06:08:27 +01:00
import appeng.core.AEConfig;
import appeng.core.AELog;
import cpw.mods.fml.common.Loader;
public class IntegrationNode
{
IntegrationStage state = IntegrationStage.PREINIT;
IntegrationStage failedStage = IntegrationStage.PREINIT;
Throwable exception = null;
String displayName;
String modID;
2014-07-24 00:26:23 +02:00
IntegrationType shortName;
String name = null;
Class classValue = null;
Object instance;
IIntegrationModule mod = null;
2014-07-24 00:26:23 +02:00
public IntegrationNode(String dspname, String _modID, IntegrationType sName, String n) {
displayName = dspname;
shortName = sName;
modID = _modID;
name = n;
}
2014-08-08 07:36:31 +02:00
@Override
public String toString()
{
return shortName.name() + ":" + state.name();
}
void Call(IntegrationStage stage)
{
if ( state != IntegrationStage.FAILED )
{
if ( state.ordinal() > stage.ordinal() )
return;
try
{
switch (stage)
{
case PREINIT:
boolean enabled = modID == null || Loader.isModLoaded( modID );
2014-02-09 06:08:27 +01:00
AEConfig.instance
.addCustomCategoryComment(
"ModIntegration",
"Valid Values are 'AUTO', 'ON', or 'OFF' - defaults to 'AUTO' ; Suggested that you leave this alone unless your experiencing an issue, or wish to disable the integration for a reason." );
2014-02-09 06:08:27 +01:00
String Mode = AEConfig.instance.get( "ModIntegration", displayName.replace( " ", "" ), "AUTO" ).getString();
if ( Mode.toUpperCase().equals( "ON" ) )
enabled = true;
if ( Mode.toUpperCase().equals( "OFF" ) )
enabled = false;
if ( enabled )
{
classValue = getClass().getClassLoader().loadClass( name );
mod = (IIntegrationModule) classValue.getConstructor().newInstance();
Field f = classValue.getField( "instance" );
f.set( classValue, instance = mod );
}
else
throw new ModNotInstalled( modID );
2014-08-08 07:36:31 +02:00
state = IntegrationStage.INIT;
break;
case INIT:
mod.Init();
2014-08-08 07:36:31 +02:00
state = IntegrationStage.POSTINIT;
break;
case POSTINIT:
mod.PostInit();
2014-08-08 07:36:31 +02:00
state = IntegrationStage.READY;
break;
case FAILED:
default:
break;
}
}
catch (Throwable t)
{
failedStage = stage;
exception = t;
state = IntegrationStage.FAILED;
}
}
if ( stage == IntegrationStage.POSTINIT )
{
if ( state == IntegrationStage.FAILED )
{
AELog.info( displayName + " - Integration Disabled" );
if ( !(exception instanceof ModNotInstalled) )
AELog.integration( exception );
}
else
{
AELog.info( displayName + " - Integration Enable" );
}
}
}
public boolean isActive()
{
if ( state == IntegrationStage.PREINIT )
Call( IntegrationStage.PREINIT );
return state != IntegrationStage.FAILED;
}
}