package advancedsystemsmanager;
import advancedsystemsmanager.commands.ParentCommand;
import advancedsystemsmanager.compatibility.ModCompat;
import advancedsystemsmanager.helpers.*;
import advancedsystemsmanager.client.gui.GuiHandler;
import advancedsystemsmanager.naming.EventHandler;
import advancedsystemsmanager.network.MessageHandler;
import advancedsystemsmanager.network.PacketEventHandler;
import advancedsystemsmanager.proxy.CommonProxy;
import advancedsystemsmanager.reference.Files;
import advancedsystemsmanager.reference.Metadata;
import advancedsystemsmanager.reference.Reference;
import advancedsystemsmanager.registry.*;
import advancedsystemsmanager.tileentities.TileEntityQuantumCable;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.ModMetadata;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.network.FMLEventChannel;
import cpw.mods.fml.common.network.NetworkRegistry;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.classloading.FMLForgePlugin;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.MinecraftForge;
import thevault.registry.Registerer;
import thevault.utils.LogHelper;
import java.io.File;
@Mod(modid = Reference.ID, name = Reference.NAME, version = Reference.VERSION_FULL)
public class AdvancedSystemsManager
{
public static FMLEventChannel packetHandler;
@SidedProxy(clientSide = "advancedsystemsmanager.proxy.ClientProxy", serverSide = "advancedsystemsmanager.proxy.CommonProxy")
public static CommonProxy PROXY;
@Mod.Instance(value = Reference.ID)
public static AdvancedSystemsManager INSTANCE;
@Mod.Metadata(Reference.ID)
public static ModMetadata metadata;
public static GuiHandler guiHandler = new GuiHandler();
public static LogHelper log = new LogHelper(Reference.ID);
public static ConfigHandler configHandler;
public static CreativeTabs creativeTab;
public static Registerer registerer;
public static ThemeHandler themeHandler;
public static WorldSaveHelper worldSave;
public static boolean DEV_ENVIRONMENT = FMLForgePlugin.RUNTIME_DEOBF;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event)
{
metadata = Metadata.init(metadata);
Files.CONFIG_DIR = new File(event.getModConfigurationDirectory() + File.separator + Reference.ID);
if (!Files.CONFIG_DIR.exists()) Files.CONFIG_DIR.mkdir();
configHandler = new ConfigHandler(new File(Files.CONFIG_DIR.getAbsolutePath() + File.separator + event.getSuggestedConfigurationFile().getName()));
configHandler.init();
creativeTab = new CreativeTabs(Reference.ID)
{
@Override
public ItemStack getIconItemStack()
{
return ClusterRegistry.MANAGER.getItemStack();
}
@Override
public Item getTabIconItem()
{
return null;
}
};
registerer = new Registerer(log, PROXY, configHandler);
registerer.scan(BlockRegistry.class, event.getSide());
registerer.scan(ItemRegistry.class, event.getSide());
BlockRegistry.registerBlocks();
MessageHandler.init();
packetHandler = NetworkRegistry.INSTANCE.newEventDrivenChannel(Reference.NETWORK_ID);
ModCompat.preInit();
worldSave = new WorldSaveHelper();
MinecraftForge.EVENT_BUS.register(worldSave);
}
@Mod.EventHandler
public void init(FMLInitializationEvent event)
{
PROXY.init();
packetHandler.register(new PacketEventHandler());
NetworkRegistry.INSTANCE.registerGuiHandler(AdvancedSystemsManager.INSTANCE, guiHandler);
OreDictionaryHelper.registerUsefulThings();
EventHandler handler = new EventHandler();
FMLCommonHandler.instance().bus().register(handler);
MinecraftForge.EVENT_BUS.register(handler);
PROXY.initHandlers();
RemapHelper.registerMappings();
ModCompat.init();
}
@Mod.EventHandler
@SuppressWarnings(value = "unchecked")
public void postInit(FMLPostInitializationEvent event)
{
ModCompat.postInit();
}
@Mod.EventHandler
public void loadComplete(FMLLoadCompleteEvent event)
{
configHandler.loadPowerValues();
}
@Mod.EventHandler
public void missingMapping(FMLMissingMappingsEvent event)
{
RemapHelper.handleRemap(event);
}
@Mod.EventHandler
public void serverAboutToStart(FMLServerAboutToStartEvent event)
{
create(Files.WORLD_SAVE_DIR = new File(DimensionManager.getCurrentSaveRootDirectory().getPath() + File.separator + "asm_data"));
create(Files.MANAGER_SAVE_DIR = new File(Files.WORLD_SAVE_DIR, "managers"));
FactoryMappingRegistry.load();
}
@Mod.EventHandler
public void serverStart(FMLServerStartingEvent event)
{
ModItemHelper.init();
event.registerServerCommand(ParentCommand.instance);
}
private void create(File file)
{
if (!file.exists()) file.mkdir();
}
@Mod.EventHandler
public void serverStop(FMLServerStoppingEvent event)
{
TileEntityQuantumCable.clearRegistry();
}
}