@EventHandler
  public void load(FMLInitializationEvent event) {
    MFRRegistry.registerPlantable(
        new PlantableStandard(Block.sapling.blockID, Block.sapling.blockID));
    MFRRegistry.registerPlantable(
        new PlantableStandard(Item.pumpkinSeeds.itemID, Block.pumpkinStem.blockID));
    MFRRegistry.registerPlantable(
        new PlantableStandard(Item.melonSeeds.itemID, Block.melonStem.blockID));
    MFRRegistry.registerPlantable(
        new PlantableStandard(Block.mushroomBrown.blockID, Block.mushroomBrown.blockID));
    MFRRegistry.registerPlantable(
        new PlantableStandard(Block.mushroomRed.blockID, Block.mushroomRed.blockID));
    MFRRegistry.registerPlantable(new PlantableCropPlant(Item.seeds.itemID, Block.crops.blockID));
    MFRRegistry.registerPlantable(new PlantableCropPlant(Item.carrot.itemID, Block.carrot.blockID));
    MFRRegistry.registerPlantable(new PlantableCropPlant(Item.potato.itemID, Block.potato.blockID));
    MFRRegistry.registerPlantable(new PlantableNetherWart());
    MFRRegistry.registerPlantable(
        new PlantableCocoa(Item.dyePowder.itemID, Block.cocoaPlant.blockID, 3));
    MFRRegistry.registerPlantable(
        new PlantableStandard(
            MineFactoryReloadedCore.rubberSaplingBlock.blockID,
            MineFactoryReloadedCore.rubberSaplingBlock.blockID));

    MFRRegistry.registerHarvestable(new HarvestableWood(Block.wood.blockID));
    MFRRegistry.registerHarvestable(new HarvestableTreeLeaves(Block.leaves.blockID));
    MFRRegistry.registerHarvestable(
        new HarvestableStandard(Block.reed.blockID, HarvestType.LeaveBottom));
    MFRRegistry.registerHarvestable(
        new HarvestableStandard(Block.cactus.blockID, HarvestType.LeaveBottom));
    MFRRegistry.registerHarvestable(
        new HarvestableStandard(Block.plantRed.blockID, HarvestType.Normal));
    MFRRegistry.registerHarvestable(
        new HarvestableStandard(Block.plantYellow.blockID, HarvestType.Normal));
    MFRRegistry.registerHarvestable(new HarvestableShrub(Block.tallGrass.blockID));
    MFRRegistry.registerHarvestable(new HarvestableShrub(Block.deadBush.blockID));
    MFRRegistry.registerHarvestable(
        new HarvestableStandard(Block.mushroomCapBrown.blockID, HarvestType.Tree));
    MFRRegistry.registerHarvestable(
        new HarvestableStandard(Block.mushroomCapRed.blockID, HarvestType.Tree));
    MFRRegistry.registerHarvestable(new HarvestableMushroom(Block.mushroomBrown.blockID));
    MFRRegistry.registerHarvestable(new HarvestableMushroom(Block.mushroomRed.blockID));
    MFRRegistry.registerHarvestable(
        new HarvestableStemPlant(Block.pumpkin.blockID, HarvestType.Normal));
    MFRRegistry.registerHarvestable(
        new HarvestableStemPlant(Block.melon.blockID, HarvestType.Normal));
    MFRRegistry.registerHarvestable(new HarvestableCropPlant(Block.crops.blockID, 7));
    MFRRegistry.registerHarvestable(new HarvestableCropPlant(Block.carrot.blockID, 7));
    MFRRegistry.registerHarvestable(new HarvestableCropPlant(Block.potato.blockID, 7));
    MFRRegistry.registerHarvestable(new HarvestableVine());
    MFRRegistry.registerHarvestable(new HarvestableNetherWart());
    MFRRegistry.registerHarvestable(new HarvestableCocoa());
    MFRRegistry.registerHarvestable(
        new HarvestableWood(MineFactoryReloadedCore.rubberWoodBlock.blockID));
    MFRRegistry.registerHarvestable(
        new HarvestableTreeLeaves(MineFactoryReloadedCore.rubberLeavesBlock.blockID));

    MFRRegistry.registerFertilizable(new FertilizableSapling(Block.sapling.blockID));
    MFRRegistry.registerFertilizable(new FertilizableCropPlant(Block.crops.blockID, 7));
    MFRRegistry.registerFertilizable(new FertilizableCropPlant(Block.carrot.blockID, 7));
    MFRRegistry.registerFertilizable(new FertilizableCropPlant(Block.potato.blockID, 7));
    MFRRegistry.registerFertilizable(new FertilizableGiantMushroom(Block.mushroomBrown.blockID));
    MFRRegistry.registerFertilizable(new FertilizableGiantMushroom(Block.mushroomRed.blockID));
    MFRRegistry.registerFertilizable(new FertilizableStemPlants(Block.pumpkinStem.blockID));
    MFRRegistry.registerFertilizable(new FertilizableStemPlants(Block.melonStem.blockID));
    MFRRegistry.registerFertilizable(new FertilizableNetherWart());
    MFRRegistry.registerFertilizable(new FertilizableCocoa(Block.cocoaPlant.blockID));
    MFRRegistry.registerFertilizable(new FertilizableGrass());
    MFRRegistry.registerFertilizable(
        new FertilizableSapling(MineFactoryReloadedCore.rubberSaplingBlock.blockID));

    MFRRegistry.registerFertilizer(
        new FertilizerStandard(MineFactoryReloadedCore.fertilizerItem.itemID, 0));
    if (MFRConfig.enableBonemealFertilizing.getBoolean(false)) {
      MFRRegistry.registerFertilizer(new FertilizerStandard(Item.dyePowder.itemID, 15));
    } else {
      MFRRegistry.registerFertilizer(
          new FertilizerStandard(Item.dyePowder.itemID, 15, FertilizerType.Grass));
    }

    MFRRegistry.registerRanchable(new RanchableCow());
    MFRRegistry.registerRanchable(new RanchableMooshroom());
    MFRRegistry.registerRanchable(new RanchableSheep());
    MFRRegistry.registerRanchable(new RanchableSquid());
    MFRRegistry.registerRanchable(new RanchableChicken());

    if (MFRConfig.conveyorNeverCapturesPlayers.getBoolean(false)) {
      MFRRegistry.registerConveyerBlacklist(EntityPlayer.class);
    }

    if (!MFRConfig.conveyorCaptureNonItems.getBoolean(true)) {
      MFRRegistry.registerConveyerBlacklist(Entity.class);
    }

    MFRRegistry.registerGrinderBlacklist(EntityPlayer.class);
    MFRRegistry.registerGrinderBlacklist(EntityDragon.class);
    MFRRegistry.registerGrinderBlacklist(EntityWither.class);
    MFRRegistry.registerGrinderBlacklist(EntityVillager.class);

    MFRRegistry.registerGrindable(
        new GrindableStandard(
            EntityChicken.class,
            new MobDrop[] {new MobDrop(30, null), new MobDrop(10, new ItemStack(Item.egg))},
            false));
    MFRRegistry.registerGrindable(
        new GrindableStandard(
            EntityOcelot.class,
            new MobDrop[] {
              new MobDrop(10, new ItemStack(Item.fishRaw)),
              new MobDrop(10, new ItemStack(Item.silk))
            }));
    MFRRegistry.registerGrindable(
        new GrindableStandard(EntityWolf.class, new ItemStack(Item.bone)));
    MFRRegistry.registerGrindable(new GrindableZombiePigman());
    MFRRegistry.registerGrindable(new GrindableEnderman());
    MFRRegistry.registerGrindable(
        new GrindableSlime(EntitySlime.class, new ItemStack(Item.slimeBall), 1));
    MFRRegistry.registerGrindable(
        new GrindableSlime(
            EntityPinkSlime.class, new ItemStack(MineFactoryReloadedCore.pinkSlimeballItem), 1));
    MFRRegistry.registerGrindable(
        new GrindableSlime(EntityMagmaCube.class, new ItemStack(Item.magmaCream), 1) {
          @Override
          protected boolean shouldDrop(EntitySlime slime) {
            return slime.getSlimeSize() <= dropSize;
          }
        });

    MFRRegistry.registerSludgeDrop(50, new ItemStack(Block.sand));
    MFRRegistry.registerSludgeDrop(40, new ItemStack(Block.dirt));
    MFRRegistry.registerSludgeDrop(30, new ItemStack(Item.clay, 4));
    MFRRegistry.registerSludgeDrop(10, new ItemStack(Block.gravel));
    MFRRegistry.registerSludgeDrop(5, new ItemStack(Block.slowSand));
    MFRRegistry.registerSludgeDrop(3, new ItemStack(Block.mycelium));
    MFRRegistry.registerSludgeDrop(1, new ItemStack(Block.netherrack));

    MFRRegistry.registerSafariNetHandler(new EntityLivingBaseHandler());
    MFRRegistry.registerSafariNetHandler(new EntityLivingHandler());
    MFRRegistry.registerSafariNetHandler(new EntityAgeableHandler());
    MFRRegistry.registerSafariNetHandler(new SheepHandler());
    MFRRegistry.registerSafariNetHandler(new SlimeHandler());

    MFRRegistry.registerMobEggHandler(new VanillaEggHandler());

    MFRRegistry.registerRubberTreeBiome("Swampland");
    MFRRegistry.registerRubberTreeBiome("Forest");
    MFRRegistry.registerRubberTreeBiome("Taiga");
    MFRRegistry.registerRubberTreeBiome("TaigaHills");
    MFRRegistry.registerRubberTreeBiome("Jungle");
    MFRRegistry.registerRubberTreeBiome("JungleHills");

    MFRRegistry.registerSafariNetBlacklist(EntityPlayer.class);
    MFRRegistry.registerSafariNetBlacklist(EntityDragon.class);
    MFRRegistry.registerSafariNetBlacklist(EntityWither.class);

    MFRRegistry.registerRandomMobProvider(new VanillaMobProvider());

    MFRRegistry.registerLiquidDrinkHandler("water", new DrinkHandlerWater());
    MFRRegistry.registerLiquidDrinkHandler("lava", new DrinkHandlerLava());
    MFRRegistry.registerLiquidDrinkHandler("milk", new DrinkHandlerMilk());
    MFRRegistry.registerLiquidDrinkHandler("biofuel", new DrinkHandlerBiofuel());
    MFRRegistry.registerLiquidDrinkHandler("bioethanol", new DrinkHandlerBiofuel());
    MFRRegistry.registerLiquidDrinkHandler("sewage", new DrinkHandlerSewage());
    MFRRegistry.registerLiquidDrinkHandler("sludge", new DrinkHandlerSludge());
    MFRRegistry.registerLiquidDrinkHandler("mobessence", new DrinkHandlerMobEssence());
    MFRRegistry.registerLiquidDrinkHandler("meat", new DrinkHandlerMeat());
    MFRRegistry.registerLiquidDrinkHandler("pinkslime", new DrinkHandlerPinkSlime());
    MFRRegistry.registerLiquidDrinkHandler("chocolatemilk", new DrinkHandlerChocolateMilk());
    MFRRegistry.registerLiquidDrinkHandler("mushroomsoup", new DrinkHandlerMushroomSoup());

    MFRRegistry.registerRedNetLogicCircuit(new AdderAnalog());
    MFRRegistry.registerRedNetLogicCircuit(new AdderDigitalFull());
    MFRRegistry.registerRedNetLogicCircuit(new AdderDigitalHalf());
    MFRRegistry.registerRedNetLogicCircuit(new And2());
    MFRRegistry.registerRedNetLogicCircuit(new And3());
    MFRRegistry.registerRedNetLogicCircuit(new And4());
    MFRRegistry.registerRedNetLogicCircuit(new Counter());
    MFRRegistry.registerRedNetLogicCircuit(new DecomposeIntToDecimal());
    MFRRegistry.registerRedNetLogicCircuit(new Delay());
    MFRRegistry.registerRedNetLogicCircuit(new DeMux16Analog());
    MFRRegistry.registerRedNetLogicCircuit(new DeMux4());
    MFRRegistry.registerRedNetLogicCircuit(new Equal());
    MFRRegistry.registerRedNetLogicCircuit(new Fanout());
    MFRRegistry.registerRedNetLogicCircuit(new FlipFlopJK());
    MFRRegistry.registerRedNetLogicCircuit(new FlipFlopT());
    MFRRegistry.registerRedNetLogicCircuit(new Greater());
    MFRRegistry.registerRedNetLogicCircuit(new GreaterOrEqual());
    MFRRegistry.registerRedNetLogicCircuit(new Inverter());
    MFRRegistry.registerRedNetLogicCircuit(new LatchDGated());
    MFRRegistry.registerRedNetLogicCircuit(new LatchSR());
    MFRRegistry.registerRedNetLogicCircuit(new LatchSRGated());
    MFRRegistry.registerRedNetLogicCircuit(new Less());
    MFRRegistry.registerRedNetLogicCircuit(new LessOrEqual());
    MFRRegistry.registerRedNetLogicCircuit(new Max2());
    MFRRegistry.registerRedNetLogicCircuit(new Max3());
    MFRRegistry.registerRedNetLogicCircuit(new Max4());
    MFRRegistry.registerRedNetLogicCircuit(new Min2());
    MFRRegistry.registerRedNetLogicCircuit(new Min3());
    MFRRegistry.registerRedNetLogicCircuit(new Min4());
    MFRRegistry.registerRedNetLogicCircuit(new Multipulse());
    MFRRegistry.registerRedNetLogicCircuit(new Mux4());
    MFRRegistry.registerRedNetLogicCircuit(new Nand2());
    MFRRegistry.registerRedNetLogicCircuit(new Nand3());
    MFRRegistry.registerRedNetLogicCircuit(new Nand4());
    MFRRegistry.registerRedNetLogicCircuit(new Negator());
    MFRRegistry.registerRedNetLogicCircuit(new Noop());
    MFRRegistry.registerRedNetLogicCircuit(new Nor2());
    MFRRegistry.registerRedNetLogicCircuit(new Nor3());
    MFRRegistry.registerRedNetLogicCircuit(new Nor4());
    MFRRegistry.registerRedNetLogicCircuit(new NotEqual());
    MFRRegistry.registerRedNetLogicCircuit(new OneShot());
    MFRRegistry.registerRedNetLogicCircuit(new Or2());
    MFRRegistry.registerRedNetLogicCircuit(new Or3());
    MFRRegistry.registerRedNetLogicCircuit(new Or4());
    MFRRegistry.registerRedNetLogicCircuit(new Passthrough());
    MFRRegistry.registerRedNetLogicCircuit(new PassthroughGated());
    MFRRegistry.registerRedNetLogicCircuit(new PassthroughRoundRobin());
    MFRRegistry.registerRedNetLogicCircuit(new PulseLengthener());
    MFRRegistry.registerRedNetLogicCircuit(new RandomizerAnalog());
    MFRRegistry.registerRedNetLogicCircuit(new RandomizerDigital());
    MFRRegistry.registerRedNetLogicCircuit(new SevenSegmentEncoder());
    MFRRegistry.registerRedNetLogicCircuit(new SawtoothFalling());
    MFRRegistry.registerRedNetLogicCircuit(new SawtoothRising());
    MFRRegistry.registerRedNetLogicCircuit(new Scaler());
    MFRRegistry.registerRedNetLogicCircuit(new SchmittTrigger());
    MFRRegistry.registerRedNetLogicCircuit(new Sine());
    MFRRegistry.registerRedNetLogicCircuit(new Square());
    MFRRegistry.registerRedNetLogicCircuit(new Subtractor());
    MFRRegistry.registerRedNetLogicCircuit(new Triangle());
    MFRRegistry.registerRedNetLogicCircuit(new Xnor2());
    MFRRegistry.registerRedNetLogicCircuit(new Xnor3());
    MFRRegistry.registerRedNetLogicCircuit(new Xnor4());
    MFRRegistry.registerRedNetLogicCircuit(new Xor2());
    MFRRegistry.registerRedNetLogicCircuit(new Xor3());
    MFRRegistry.registerRedNetLogicCircuit(new Xor4());

    MFRRegistry.registerFruitLogBlockId(Block.wood.blockID);
    MFRRegistry.registerFruit(new FruitCocoa(Block.cocoaPlant.blockID));

    MFRRegistry.registerAutoSpawnerBlacklist("VillagerGolem");

    MFRRegistry.registerSpawnHandler(new SpawnableHorse());
    MFRRegistry.registerSpawnHandler(new SpawnableEnderman());

    MFRRegistry.registerNeedleAmmoType(
        MineFactoryReloadedCore.needlegunAmmoStandardItem.itemID,
        (INeedleAmmo) MineFactoryReloadedCore.needlegunAmmoStandardItem);
    MFRRegistry.registerNeedleAmmoType(
        MineFactoryReloadedCore.needlegunAmmoLavaItem.itemID,
        (INeedleAmmo) MineFactoryReloadedCore.needlegunAmmoLavaItem);
    MFRRegistry.registerNeedleAmmoType(
        MineFactoryReloadedCore.needlegunAmmoSludgeItem.itemID,
        (INeedleAmmo) MineFactoryReloadedCore.needlegunAmmoSludgeItem);
    MFRRegistry.registerNeedleAmmoType(
        MineFactoryReloadedCore.needlegunAmmoSewageItem.itemID,
        (INeedleAmmo) MineFactoryReloadedCore.needlegunAmmoSewageItem);
    MFRRegistry.registerNeedleAmmoType(
        MineFactoryReloadedCore.needlegunAmmoFireItem.itemID,
        (INeedleAmmo) MineFactoryReloadedCore.needlegunAmmoFireItem);
    MFRRegistry.registerNeedleAmmoType(
        MineFactoryReloadedCore.needlegunAmmoAnvilItem.itemID,
        (INeedleAmmo) MineFactoryReloadedCore.needlegunAmmoAnvilItem);
  }