package com.amadornes.framez;
import net.minecraftforge.common.MinecraftForge;
import org.apache.logging.log4j.Logger;
import com.amadornes.framez.api.FramezAPI;
import com.amadornes.framez.client.gui.GuiHandler;
import com.amadornes.framez.compat.CompatibilityUtils;
import com.amadornes.framez.hax.GuiHax;
import com.amadornes.framez.init.FramezBlocks;
import com.amadornes.framez.init.FramezItems;
import com.amadornes.framez.modifier.FrameModifierRegistry;
import com.amadornes.framez.modifier.MotorModifierRegistry;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialBronze;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialCopper;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialElectrum;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialEnderium;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialGold;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialInvar;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialIron;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialSilver;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialTin;
import com.amadornes.framez.modifier.frame.FrameModifierMaterialWood;
import com.amadornes.framez.modifier.frame.FrameModifierSimple;
import com.amadornes.framez.modifier.frame.FrameSideModifierLatching;
import com.amadornes.framez.movement.FrameMovementRegistry;
import com.amadornes.framez.movement.MovementScheduler;
import com.amadornes.framez.movement.data.MovementDataProviderDefault;
import com.amadornes.framez.movement.handler.MovementHandlerDefault;
import com.amadornes.framez.movement.handler.MovementHandlerFMP;
import com.amadornes.framez.movement.handler.MovementHandlerFluid;
import com.amadornes.framez.network.NetworkHandler;
import com.amadornes.framez.part.PartFactory;
import com.amadornes.framez.part.PartFrame;
import com.amadornes.framez.proxy.CommonProxy;
import com.amadornes.framez.ref.ModInfo;
import com.amadornes.framez.util.ThreadBlockChecking;
import com.amadornes.framez.util.WrenchUtils;
import cpw.mods.fml.common.FMLCommonHandler;
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.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
@Mod(modid = ModInfo.MODID, name = ModInfo.NAME, dependencies = "required-after:qmunitylib")
public class Framez {
@Instance(ModInfo.MODID)
public static Framez instance;
@SidedProxy(serverSide = "com.amadornes.framez.proxy.CommonProxy", clientSide = "com.amadornes.framez.proxy.ClientProxy")
public static CommonProxy proxy;
public static Logger log;
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
log = event.getModLog();
FramezAPI.setup(new FramezAPIImpl());
ThreadBlockChecking.instance().start();
CompatibilityUtils.preInit(event);
/*
* Register default movement handlers and data providers
*/
FrameMovementRegistry.instance().registerMovementHandler(new MovementHandlerDefault());
FrameMovementRegistry.instance().registerMovementHandler(new MovementHandlerFluid());
MovementHandlerFMP fmpHandler = new MovementHandlerFMP();
FrameMovementRegistry.instance().registerMovementHandler(fmpHandler);
FrameMovementRegistry.instance().registerStickyProvider(fmpHandler);
FrameMovementRegistry.instance().registerMovementDataProvider(new MovementDataProviderDefault());
/*
* Register frame modifiers
*/
FrameModifierRegistry.instance().registerModifier(new FrameModifierSimple());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialWood());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialIron());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialCopper());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialTin());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialSilver());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialGold());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialBronze());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialInvar());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialElectrum());
FrameModifierRegistry.instance().registerModifier(new FrameModifierMaterialEnderium());
/*
* Register frame side modifiers
*/
FrameModifierRegistry.instance().registerModifier(new FrameSideModifierLatching());
}
@EventHandler
public void init(FMLInitializationEvent event) {
/*
* Register modifiers
*/
MotorModifierRegistry.instance().registerCombination("dc");
MotorModifierRegistry.instance().registerCombination("eu");
MotorModifierRegistry.instance().registerCombination("rf");
MotorModifierRegistry.instance().registerCombination("eu", "rf");
MotorModifierRegistry.instance().registerCombination("ae2");
FrameModifierRegistry.instance().getAllCombinations(PartFrame.class);
/*
* Register items, blocks and events
*/
FramezItems.init();
FramezItems.register();
FramezBlocks.init();
FramezBlocks.register();
MinecraftForge.EVENT_BUS.register(MovementScheduler.instance());
FMLCommonHandler.instance().bus().register(MovementScheduler.instance());
MinecraftForge.EVENT_BUS.register(new WrenchUtils());
/*
* Register multiparts, networking, rendering and GUI-related stuff
*/
PartFactory.init();
NetworkHandler.instance().init();
proxy.registerRenderers();
NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());
CompatibilityUtils.init(event);
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
CompatibilityUtils.postInit(event);
try {
GuiHax.doGuiHax();
} catch (Exception e) {
e.printStackTrace();
FMLCommonHandler.instance().exitJava(-1, true);
}
}
@EventHandler
public void serverStart(FMLServerStartedEvent event) {
ThreadBlockChecking.instance().onJoinWorld();
}
@EventHandler
public void serverStop(FMLServerStoppedEvent event) {
ThreadBlockChecking.instance().onLeaveWorld();
}
}