package shedar.mods.ic2.nuclearcontrol;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
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.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import java.io.File;
import java.util.List;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;
import org.apache.logging.log4j.Logger;
import shedar.mods.ic2.nuclearcontrol.blocks.BlockNuclearControlLight;
import shedar.mods.ic2.nuclearcontrol.blocks.BlockNuclearControlMain;
import shedar.mods.ic2.nuclearcontrol.crossmod.CrossModLoader;
import shedar.mods.ic2.nuclearcontrol.crossmod.RF.CrossBuildcraft;
import shedar.mods.ic2.nuclearcontrol.crossmod.RF.CrossRF;
import shedar.mods.ic2.nuclearcontrol.crossmod.gregtech.GregtechRecipes;
import shedar.mods.ic2.nuclearcontrol.crossmod.ic2.IC2Cross;
import shedar.mods.ic2.nuclearcontrol.crossmod.ic2.IC2Type;
import shedar.mods.ic2.nuclearcontrol.crossmod.opencomputers.CrossOpenComputers;
import shedar.mods.ic2.nuclearcontrol.crossmod.railcraft.CrossRailcraft;
import shedar.mods.ic2.nuclearcontrol.items.ItemCard55Reactor;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardEnergyArrayLocation;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardEnergySensorLocation;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardLiquidArrayLocation;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardMultipleSensorLocation;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardReactorSensorLocation;
import shedar.mods.ic2.nuclearcontrol.items.ItemCardText;
import shedar.mods.ic2.nuclearcontrol.items.ItemKitEnergySensor;
import shedar.mods.ic2.nuclearcontrol.items.ItemKitMultipleSensor;
import shedar.mods.ic2.nuclearcontrol.items.ItemKitReactorSensor;
import shedar.mods.ic2.nuclearcontrol.items.ItemNuclearControlLight;
import shedar.mods.ic2.nuclearcontrol.items.ItemNuclearControlMain;
import shedar.mods.ic2.nuclearcontrol.items.ItemRemoteMonitor;
import shedar.mods.ic2.nuclearcontrol.items.ItemTimeCard;
import shedar.mods.ic2.nuclearcontrol.items.ItemToolDigitalThermometer;
import shedar.mods.ic2.nuclearcontrol.items.ItemToolThermometer;
import shedar.mods.ic2.nuclearcontrol.items.ItemUpgrade;
import shedar.mods.ic2.nuclearcontrol.network.ChannelHandler;
import shedar.mods.ic2.nuclearcontrol.panel.ScreenManager;
import shedar.mods.ic2.nuclearcontrol.recipes.RecipesNew;
import shedar.mods.ic2.nuclearcontrol.recipes.RecipesOld;
@Mod(modid = "IC2NuclearControl", name = "Nuclear Control 2", version = "@VERSION@", dependencies = "required-after:IC2", guiFactory = "shedar.mods.ic2.nuclearcontrol.gui.GuiFactory")
public class IC2NuclearControl {
// The instance of your mod forge uses
@Instance
public static IC2NuclearControl instance;
// Says where the client and server 'proxy' code is loaded.
@SidedProxy(clientSide = "shedar.mods.ic2.nuclearcontrol.ClientProxy", serverSide = "shedar.mods.ic2.nuclearcontrol.CommonProxy")
// The proxy to be used by client and server
public static CommonProxy proxy;
// Mod's creative tab
public static IC2NCCreativeTabs tabIC2NC = new IC2NCCreativeTabs();
// For logging purposes
public static Logger logger;
public static ConfigurationHandler config;
protected File configFile;
protected File configDir;
public static boolean isServer;
public String allowedAlarms;
public List<String> serverAllowedAlarms;
public static Item itemToolThermometer;
public static Item itemToolDigitalThermometer;
public static Item itemRemoteSensorKit;
public static Item itemEnergySensorKit;
public static Item itemMultipleSensorKit;
public static Item itemSensorLocationCard;
public static Item itemEnergySensorLocationCard;
public static Item itemMultipleSensorLocationCard;
public static Item itemEnergyArrayLocationCard;
public static Item itemTimeCard;
public static Item itemUpgrade;
public static Item itemTextCard;
public static Item itemLiquidArrayLocationCard;
public static Item itemWindCard;
public static Item itemRemoteMonitor;
public static Item item55ReactorCard;
public static BlockNuclearControlMain blockNuclearControlMain;
public static BlockNuclearControlLight blockNuclearControlLight;
public int modelId;
public int alarmRange;
public int SMPMaxAlarmRange;
public int maxAlarmRange;
//public static boolean isHttpSensorAvailableClient;
//public static boolean isHttpSensorAvailableServer;
public String httpSensorKey;
public List<String> availableAlarms;
public int remoteThermalMonitorEnergyConsumption;
public ScreenManager screenManager = new ScreenManager();
public int screenRefreshPeriod;
public int rangeTriggerRefreshPeriod;
public boolean disableCapes;
public String recipes;
public CrossBuildcraft crossBC;
public CrossRailcraft crossRailcraft;
public CrossRF crossRF;
public CrossOpenComputers crossOC;
public IC2Cross crossIc2;
protected void initBlocks() {
blockNuclearControlMain = new BlockNuclearControlMain();
blockNuclearControlLight = new BlockNuclearControlLight();
itemToolThermometer = new ItemToolThermometer().setUnlocalizedName("ItemToolThermometer");
itemToolDigitalThermometer = new ItemToolDigitalThermometer(1, 80, 80).setUnlocalizedName("ItemToolDigitalThermometer");
itemSensorLocationCard = new ItemCardReactorSensorLocation().setUnlocalizedName("ItemSensorLocationCard");
itemUpgrade = new ItemUpgrade();
itemTimeCard = new ItemTimeCard().setUnlocalizedName("ItemTimeCard");
itemTextCard = new ItemCardText().setUnlocalizedName("ItemTextCard");
itemEnergySensorLocationCard = new ItemCardEnergySensorLocation().setUnlocalizedName("ItemEnergySensorLocationCard");
itemEnergyArrayLocationCard = new ItemCardEnergyArrayLocation().setUnlocalizedName("ItemEnergyArrayLocationCard");
itemMultipleSensorLocationCard = new ItemCardMultipleSensorLocation();
itemMultipleSensorKit = new ItemKitMultipleSensor().setUnlocalizedName("ItemCounterSensorKit");
itemEnergySensorKit = new ItemKitEnergySensor().setUnlocalizedName("ItemEnergySensorKit");
itemRemoteSensorKit = new ItemKitReactorSensor().setUnlocalizedName("ItemRemoteSensorKit");
itemLiquidArrayLocationCard = new ItemCardLiquidArrayLocation().setUnlocalizedName("ItemLiquidArrayLocationCard");
item55ReactorCard = new ItemCard55Reactor().setUnlocalizedName("Item55ReactorCard");
itemRemoteMonitor = new ItemRemoteMonitor().setUnlocalizedName("remoteMonitor");
}
protected void registerBlocks() {
GameRegistry.registerBlock(blockNuclearControlMain, ItemNuclearControlMain.class, "blockNuclearControlMain");
GameRegistry.registerBlock(blockNuclearControlLight, ItemNuclearControlLight.class,"blockNuclearControlLight");
GameRegistry.registerItem(itemToolThermometer, "ItemToolThermometer");
GameRegistry.registerItem(itemToolDigitalThermometer, "ItemToolDigitalThermometer");
GameRegistry.registerItem(itemRemoteSensorKit, "ItemRemoteSensorKit");
GameRegistry.registerItem(itemEnergySensorKit, "ItemEnergySensorKit");
GameRegistry.registerItem(itemMultipleSensorKit, "ItemMultipleSensorKit");
GameRegistry.registerItem(itemSensorLocationCard, "ItemSensorLocationCard");
GameRegistry.registerItem(itemEnergySensorLocationCard, "ItemEnergySensorLocationCard");
GameRegistry.registerItem(itemMultipleSensorLocationCard, "ItemMultipleSensorLocationCard");
GameRegistry.registerItem(itemEnergyArrayLocationCard, "ItemEnergyArrayLocationCard");
GameRegistry.registerItem(itemTimeCard, "ItemTimeCard");
GameRegistry.registerItem(itemUpgrade, "ItemUpgrade");
GameRegistry.registerItem(itemTextCard, "ItemTextCard");
GameRegistry.registerItem(itemLiquidArrayLocationCard, "ItemLiquidArrayLocationCard");
GameRegistry.registerItem(item55ReactorCard, "Item55ReactorCard");
GameRegistry.registerItem(itemRemoteMonitor, "remoteMonitor");
}
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
logger = event.getModLog();
if (event.getSide() == Side.CLIENT)
isServer = false;
else
isServer = true;
// Loads configuration
config = new ConfigurationHandler();
FMLCommonHandler.instance().bus().register(config);
config.init(event.getSuggestedConfigurationFile());
// registers channel handler
ChannelHandler.init();
// Register event handlers
MinecraftForge.EVENT_BUS.register(ServerTickHandler.instance);
FMLCommonHandler.instance().bus().register(ServerTickHandler.instance);
if (!isServer) {
MinecraftForge.EVENT_BUS.register(ClientTickHandler.instance);
FMLCommonHandler.instance().bus().register(ClientTickHandler.instance);
}
NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy);
CrossModLoader.preinit();
}
@EventHandler
public void init(FMLInitializationEvent event) {
IC2NuclearControl.instance.screenManager = new ScreenManager();
initBlocks();
registerBlocks();
proxy.registerTileEntities();
CrossModLoader.init();
if(Loader.isModLoaded("OpenComputers")) crossOC = new CrossOpenComputers();
//Registers waila stuff
//FMLInterModComms.sendMessage("Waila", "register", "shedar.mods.ic2.nuclearcontrol.crossmod.waila.CrossWaila.callbackRegister");
//CrossBigReactors.doStuff();
//CrossAppeng.RegistrationCheck();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
if(!disableCapes) {
proxy.cape();
}
CrossModLoader.postinit();
crossBC = new CrossBuildcraft();
crossRailcraft = new CrossRailcraft();
crossRF = new CrossRF();
crossIc2 = IC2Cross.getIC2Cross();
if (crossIc2.getType() == IC2Type.SPEIGER) {
if (recipes.equalsIgnoreCase("normal-force")) {
logger.info("Loading normal recipes with IC2 Classic may prevent certain recipes working");
RecipesNew.addRecipes();
} else if (recipes.equalsIgnoreCase("gregtech-force")) {
logger.info("Loading Gregtech recipes with IC2 Classic will prevent certain recipes working");
GregtechRecipes.addRecipes();
} else {
RecipesOld.addOldRecipes();
}
} else if (recipes.equalsIgnoreCase("old")) {
RecipesOld.addOldRecipes();
} else if (recipes.equalsIgnoreCase("gregtech") || recipes.equalsIgnoreCase("gregtech5")) {
GregtechRecipes.addRecipes();
logger.info("Hard... I mean, FUN recipes turned on! Have fun!");
} else {
RecipesNew.addRecipes();
}
/*
//I thought about doing this, but I didn't :P
ItemStack dBlock = new ItemStack(Blocks.diamond_block);
dBlock.setStackDisplayName("ERROR: report to skyboy!");
Recipes.advRecipes.addRecipe(dBlock, new Object[]{
"GGG", "GGG", "GGG",
'G', "greggy_greg_do_please_kindly_stuff_a_sock_in_it"});*/
}
}