@Mod.EventHandler
  public void postInit(FMLPostInitializationEvent event) {
    IERecipes.postInitCrusherAndArcRecipes();
    for (IECompatModule compat : IECompatModule.modules) compat.postInit();

    ExcavatorHandler.recalculateChances();
    IEContent.postInit();
    proxy.postInit();

    new ThreadContributorSpecialsDownloader();
  }
  @Mod.EventHandler
  public void preInit(FMLPreInitializationEvent event) {
    IELogger.debug = VERSION.startsWith("${");
    Config.init(event);
    IEContent.preInit();

    WireType.cableLossRatio = Config.getDoubleArray("cableLossRatio");
    WireType.cableTransferRate = Config.getIntArray("cableTransferRate");
    WireType.cableColouration = Config.getIntArray("cableColouration");
    WireType.cableLength = Config.getIntArray("cableLength");

    for (int b : Config.getIntArray("oreDimBlacklist")) IEWorldGen.oreDimBlacklist.add(b);
    IEApi.modPreference = Arrays.asList(Config.getStringArray("preferredOres"));
    IECompatModule.preInit();
  }
  @Mod.EventHandler
  public void init(FMLInitializationEvent event) {
    IEContent.init();

    GameRegistry.registerWorldGenerator(new IEWorldGen(), 0);
    MinecraftForge.EVENT_BUS.register(new EventHandler());
    FMLCommonHandler.instance().bus().register(new EventHandler());
    NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy);
    proxy.init();

    Lib.IC2 = Loader.isModLoaded("IC2") && Config.getBoolean("ic2compat");
    Lib.GREG = Loader.isModLoaded("gregtech") && Config.getBoolean("gregtechcompat");
    Config.setBoolean("ic2Manual", Lib.IC2);
    Config.setBoolean("gregManual", Lib.GREG);
    for (IECompatModule compat : IECompatModule.modules) compat.init();

    int messageId = 0;
    packetHandler.registerMessage(
        MessageMineralListSync.Handler.class,
        MessageMineralListSync.class,
        messageId++,
        Side.CLIENT);
    packetHandler.registerMessage(
        MessageTileSync.Handler.class, MessageTileSync.class, messageId++, Side.SERVER);
    packetHandler.registerMessage(
        MessageSpeedloaderSync.Handler.class,
        MessageSpeedloaderSync.class,
        messageId++,
        Side.CLIENT);
    packetHandler.registerMessage(
        MessageSkyhookSync.Handler.class, MessageSkyhookSync.class, messageId++, Side.CLIENT);
    packetHandler.registerMessage(
        MessageMinecartShaderSync.HandlerServer.class,
        MessageMinecartShaderSync.class,
        messageId++,
        Side.SERVER);
    packetHandler.registerMessage(
        MessageMinecartShaderSync.HandlerClient.class,
        MessageMinecartShaderSync.class,
        messageId++,
        Side.CLIENT);
    packetHandler.registerMessage(
        MessageRequestBlockUpdate.Handler.class,
        MessageRequestBlockUpdate.class,
        messageId++,
        Side.SERVER);
  }
  @Mod.EventHandler
  public void init(FMLInitializationEvent event) {
    IEContent.init();

    GameRegistry.registerWorldGenerator(new IEWorldGen(), 0);
    MinecraftForge.EVENT_BUS.register(new EventHandler());
    FMLCommonHandler.instance().bus().register(new EventHandler());
    NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy);
    proxy.init();

    Lib.IC2 = Loader.isModLoaded("IC2") && Config.getBoolean("ic2compat");
    Lib.GREG = Loader.isModLoaded("gregtech") && Config.getBoolean("gregtechcompat");
    for (IECompatModule compat : IECompatModule.modules) compat.init();

    packetHandler.registerMessage(
        MessageMineralListSync.Handler.class, MessageMineralListSync.class, 0, Side.CLIENT);
  }
  @Mod.EventHandler
  public void preInit(FMLPreInitializationEvent event) {
    IELogger.debug = VERSION.startsWith("${");
    Config.init(event);
    IEContent.preInit();

    WireType.cableLossRatio = Config.getDoubleArray("cableLossRatio");
    WireType.cableTransferRate = Config.getIntArray("cableTransferRate");
    WireType.cableColouration = Config.getIntArray("cableColouration");
    WireType.cableLength = Config.getIntArray("cableLength");

    for (int b : Config.getIntArray("oreDimBlacklist")) IEWorldGen.oreDimBlacklist.add(b);
    IEApi.modPreference = Arrays.asList(Config.getStringArray("preferredOres"));
    IEApi.prefixToIngotMap.put("ingot", new Integer[] {1, 1});
    IEApi.prefixToIngotMap.put("nugget", new Integer[] {1, 9});
    IEApi.prefixToIngotMap.put("block", new Integer[] {9, 1});
    IEApi.prefixToIngotMap.put("plate", new Integer[] {1, 1});
    IEApi.prefixToIngotMap.put("gear", new Integer[] {4, 1});
    IEApi.prefixToIngotMap.put("rod", new Integer[] {2, 1});
    IEApi.prefixToIngotMap.put("fence", new Integer[] {6, 16});
    IECompatModule.preInitModules();
  }