2013-10-22 20:09:21 +01:00
package tconstruct.util ;
import java.util.ArrayList ;
import java.util.List ;
2013-12-06 16:18:07 +00:00
import mantle.crash.CallableSuppConfig ;
import mantle.crash.CallableUnsuppConfig ;
2013-12-19 08:12:02 -08:00
import net.minecraft.client.gui.GuiMainMenu ;
import net.minecraftforge.client.event.GuiOpenEvent ;
import net.minecraftforge.common.MinecraftForge ;
import net.minecraftforge.event.ForgeSubscribe ;
import tconstruct.TConstruct ;
import cpw.mods.fml.common.FMLCommonHandler ;
import cpw.mods.fml.common.ICrashCallable ;
import cpw.mods.fml.common.Loader ;
import cpw.mods.fml.relauncher.Side ;
import cpw.mods.fml.relauncher.SideOnly ;
2013-12-05 00:29:59 -05:00
2013-11-10 13:57:35 -08:00
public class EnvironmentChecks
{
2013-10-22 20:09:21 +01:00
2013-11-10 13:57:35 -08:00
private EnvironmentChecks ()
{
} // Singleton
2013-10-22 20:09:21 +01:00
/**
* Checks for conflicting stuff in environment; adds callable to any crash logs if so.
2013-11-23 09:31:19 -05:00
* Note: This code adds additional data to crashlogs. It does not trigger any crashes.
2013-10-22 20:09:21 +01:00
*/
2013-12-19 08:12:02 -08:00
private static List < String > incompatibilities = new ArrayList < String > ();
private static EnvironmentChecks instance = new EnvironmentChecks ();
2013-11-10 13:57:35 -08:00
public static void verifyEnvironmentSanity ()
{
2013-10-30 22:15:03 +00:00
List < String > modIds = new ArrayList < String > ();
2013-10-24 12:27:50 +01:00
2013-11-10 13:57:35 -08:00
if ( Loader . isModLoaded ( "gregtech_addon" ))
{
2013-12-19 08:12:02 -08:00
TConstruct . logger . severe ( "Tinkers' Construct and GregTech are incompatible for the following reasons:" );
TConstruct . logger . severe ( modCompatDetails ( "GregTech" , true ));
2013-10-22 20:09:21 +01:00
modIds . add ( "gregtech_addon" );
2013-12-19 08:12:02 -08:00
incompatibilities . add ( "GregTech" );
2013-10-30 22:15:03 +00:00
}
2013-10-22 20:09:21 +01:00
2013-12-06 16:57:33 +00:00
// Bukkit/Magic Launcher/Optifine are caught by Mantle, so we no longer check for those.
2013-11-30 19:50:18 +00:00
2013-11-10 13:57:35 -08:00
if ( modIds . size () == 0 )
{
2013-12-06 16:18:07 +00:00
ICrashCallable callable = new CallableSuppConfig ( "TConstruct" );
2013-10-24 12:27:50 +01:00
FMLCommonHandler . instance (). registerCrashCallable ( callable );
2013-11-10 13:57:35 -08:00
}
else
{
2013-12-06 16:18:07 +00:00
ICrashCallable callable = new CallableUnsuppConfig ( "TConstruct" , modIds );
2013-10-30 22:15:03 +00:00
FMLCommonHandler . instance (). registerCrashCallable ( callable );
2013-10-22 20:09:21 +01:00
}
2013-12-19 08:12:02 -08:00
if ( incompatibilities . size () > 0 && FMLCommonHandler . instance (). getEffectiveSide () == Side . CLIENT )
{
MinecraftForge . EVENT_BUS . register ( instance );
}
2013-10-22 20:09:21 +01:00
}
2013-12-19 08:12:02 -08:00
public static String modCompatDetails ( String type , boolean consoleFormat )
{
String n = consoleFormat ? System . getProperty ( "line.separator" ) : "\n" ;
if ( type . equals ( "GregTech" ))
{
return "- GregTech is an \"IndustrialCraft 2 addon\". People do not expect a total conversion meta-mod that alters every other mod when they install it the first time." + n
+ "- The ore dictionary's purpose is interchangable items and mod compatibility. It is not a tool to bend people to your will." + n
+ "- GregTech actively breaks mods with \"invalid ore dictionary entries\"." + n
+ "- The mod has a blacklist that can corrupt worlds of people on it." + n
+ "- The author blames any problems introduced by his mod on others. See \"NotMyFaultException\" for intentional crashes.)" ;
}
return "" ;
}
@SideOnly ( Side . CLIENT )
@ForgeSubscribe
public void openMainMenu ( GuiOpenEvent event )
{
if ( event . gui instanceof GuiMainMenu )
{
if ( incompatibilities . size () > 0 )
{
event . gui = new EnvironmentGui ( event . gui , incompatibilities );
}
MinecraftForge . EVENT_BUS . unregister ( instance );
}
}
2013-10-22 20:09:21 +01:00
}