public static void addBiomes() {

    if (Loader.isModLoaded("BuildCraft|Core") && ConfigBC.generateBCBiomes) {
      BiomeGenBase[] b = BiomeGenBase.getBiomeGenArray();

      for (int i = 0; i < 256; i++) {
        if (b[i] != null) {
          BiomeGenBase bcBiome = b[i];
          String biomeName = b[i].biomeName;
          String biomeClass = b[i].getBiomeClass().getName();

          if (biomeName == "Desert Oil Field"
              && biomeClass == "buildcraft.energy.worldgen.BiomeGenOilDesert") {
            if (ConfigBC.generateBCDesertOilField) {

              bcDesertOilField = new RealisticBiomeBCDesertOilField(bcBiome);

              BiomeBase.addBiome(bcDesertOilField);
              BiomeBase.addVillageBiome(bcDesertOilField);
            }
          } else if (biomeName == "Ocean Oil Field"
              && biomeClass == "buildcraft.energy.worldgen.BiomeGenOilOcean") {
            if (ConfigBC.generateBCOceanOilField) {

              bcOceanOilField = new RealisticBiomeBCOceanOilField(bcBiome);

              BiomeBase.addBiome(bcOceanOilField);
              BiomeBase.addVillageBiome(bcOceanOilField);
            }
          }
        }
      }
    }
  }
  public RealisticBiomeEBWoodlands(BiomeGenBase ebBiome) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.TEMPERATE),
        new TerrainEBWoodlands(),
        new SurfaceEBWoodlands(
            ebTopBlock, // Block top
            ebTopByte, // byte topByte
            ebFillBlock, // Block filler,
            ebFillByte, // byte fillerByte
            ebMixTopBlock, // Block mixTop,
            ebMixTopByte, // byte mixTopByte,
            ebMixFillBlock, // Block mixFill,
            ebMixFillByte, // byte mixFillByte,
            ebCliff1Block, // Block cliff1,
            ebCliff1Byte, // byte cliff1Byte,
            ebCliff2Block, // Block cliff2,
            ebCliff2Byte, // byte cliff2Byte,
            1f, // float mixWidth,
            -0.15f, // float mixHeight,
            2f, // float smallWidth,
            0.5f // float smallStrength
            ));

    this.setRealisticBiomeName("EB Woodlands");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEB.weightEBWoodlands;
    this.generateVillages = ConfigEB.villageEBWoodlands;
  }
  public RealisticBiomeVanillaRoofedForest() {

    super(
        BiomeGenBase.roofedForest,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.TEMPERATE),
        new TerrainVanillaRoofedForest(),
        new SurfaceVanillaRoofedForest(
            Blocks.grass,
            Blocks.dirt,
            false,
            null,
            0f,
            1.5f,
            60f,
            65f,
            1.5f,
            Blocks.dirt,
            (byte) 2,
            0.08f));

    this.setRealisticBiomeName("Vanilla Roofed Forest");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigVanilla.weightVanillaRoofedForest;
    this.generateVillages = ConfigVanilla.villageVanillaRoofedForest;
  }
  public RealisticBiomeEBForestedValley(BiomeGenBase ebBiome, BiomeConfig config) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.TEMPERATE),
        new TerrainEBForestedValley(),
        new SurfaceEBForestedValley(
            ebTopBlock, // Block top
            ebTopByte, // byte topByte
            ebFillBlock, // Block filler,
            ebFillByte, // byte fillerByte
            ebMixTopBlock, // Block mixTop,
            ebMixTopByte, // byte mixTopByte,
            ebMixFillBlock, // Block mixFill,
            ebMixFillByte, // byte mixFillByte,
            ebCliff1Block, // Block cliff1,
            ebCliff1Byte, // byte cliff1Byte,
            ebCliff2Block, // Block cliff2,
            ebCliff2Byte, // byte cliff2Byte,
            1f, // float mixWidth,
            -0.15f, // float mixHeight,
            2f, // float smallWidth,
            0.5f // float smallStrength
            ));

    this.config = config;
  }
  public RealisticBiomeEBBorealPlateauM(BiomeGenBase ebBiome) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainEBBorealPlateauM(70f, 180f, 7f, 100f, 38f, 260f, 68f),
        new SurfaceEBBorealPlateauM(
            ebTopBlock, // Block top
            ebTopByte, // byte topByte
            ebFillBlock, // Block filler,
            ebFillByte, // byte fillerByte
            ebMixTopBlock, // Block mixTop,
            ebMixTopByte, // byte mixTopByte,
            ebMixFillBlock, // Block mixFill,
            ebMixFillByte, // byte mixFillByte,
            ebCliff1Block, // Block cliff1,
            ebCliff1Byte, // byte cliff1Byte,
            ebCliff2Block, // Block cliff2,
            ebCliff2Byte, // byte cliff2Byte,
            1f, // float mixWidth,
            -0.15f, // float mixHeight,
            2f, // float smallWidth,
            0.5f // float smallStrength
            ));

    this.setRealisticBiomeName("EB Boreal Plateau M");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEB.weightEBBorealPlateauM;
    this.generateVillages = ConfigEB.villageEBBorealPlateauM;
  }
 public RealisticBiomeVanillaForest() {
   super(
       BiomeGenBase.forest,
       BiomeBase.climatizedBiome(BiomeGenBase.river, BiomeBase.Climate.TEMPERATE),
       new TerrainVanillaForest(),
       new SurfaceVanillaForest(topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone));
 }
 public RealisticBiomeVanillaFrozenRiver() {
   super(
       BiomeGenBase.frozenRiver,
       BiomeBase.climatizedBiome(BiomeGenBase.river, BiomeBase.Climate.ICE),
       new TerrainVanillaFrozenRiver(),
       new SurfaceVanillaFrozenRiver(
           Blocks.snow, Blocks.snow, Blocks.snow, Blocks.snow, (byte) 0, 0));
 }
  public RealisticBiomeEBSandstoneRangesM(BiomeGenBase ebBiome) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainEBSandstoneRangesM(false, 35f, 80f, 30f, 20f, 10),
        new SurfaceEBSandstoneRangesM(ebBiome.topBlock, ebBiome.fillerBlock, (byte) 0, 20));

    this.setRealisticBiomeName("EB Sandstone Ranges M");
    this.biomeCategory = BiomeCategory.HOT;
    this.biomeWeight = ConfigEB.weightEBSandstoneRangesM;
  }
  public RealisticBiomeBOPOriginValley() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.TEMPERATE),
        new TerrainBOPOriginValley(10f, 80f, 68f, 200f),
        new SurfaceBOPOriginValley(topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone));

    this.setRealisticBiomeName("BOP Origin Valley");
    this.biomeCategory = BiomeCategory.COLD;
    this.biomeWeight = ConfigBOP.weightBOPoriginValley;
  }
  public RealisticBiomeBOPAlpsForest(BiomeConfig config) {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.frozenRiver, Climate.ICE),
        new TerrainBOPAlpsForest(),
        new SurfaceBOPAlpsForest(
            topBlock, fillerBlock, false, null, 0f, 1.5f, 60f, 65f, 1.5f, Blocks.stone, 0.15f));

    this.config = config;
    this.generatesEmeralds = true;
  }
  public RealisticBiomeBOPDeciduousForest() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainBOPDeciduousForest(0f, 140f, 68f, 200f),
        new SurfaceBOPDeciduousForest(topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone));

    this.setRealisticBiomeName("BOP Deciduous Forest");
    this.biomeCategory = BiomeCategory.HOT;
    this.biomeWeight = ConfigBOP.weightBOPdeciduousForest;
  }
  public RealisticBiomeBOPVolcano() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainBOPVolcano(),
        new SurfaceBOPVolcano(topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone));

    this.setRealisticBiomeName("BOP Volcano");
    this.biomeCategory = BiomeCategory.HOT;
    this.biomeWeight = ConfigBOP.weightBOPvolcano;
  }
  public RealisticBiomeBOPDryRiver() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.WET),
        new TerrainBOPDryRiver(),
        new SurfaceBOPDryRiver());

    this.setRealisticBiomeName("BOP Dry River");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigBOP.weightBOPDryRiver;
    this.generateVillages = ConfigBOP.villageBOPDryRiver;
  }
  public RealisticBiomeBOPOriginValley() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.TEMPERATE),
        new TerrainBOPOriginValley(63f, 80f, 38f),
        new SurfaceBOPOriginValley(topBlock, fillerBlock));

    this.setRealisticBiomeName("BOP Origin Valley");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigBOP.weightBOPOriginValley;
    this.generateVillages = ConfigBOP.villageBOPOriginValley;
  }
  public RealisticBiomeEBXLBirchForest() {
    super(
        ebxlBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainEBXLBirchForest(230f, 120f, 0f),
        new SurfaceEBXLBirchForest(topBlock, fillerBlock, false, null, 0.95f));

    this.setRealisticBiomeName("EBXL Birch Forest");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEBXL.weightEBXL_birchforest;
    this.generateVillages = ConfigEBXL.villageEBXL_birchforest;
  }
  public RealisticBiomeBOPArctic() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.frozenRiver, Climate.ICE),
        new TerrainBOPArctic(),
        new SurfaceBOPArctic(topBlock, fillerBlock));

    this.setRealisticBiomeName("BOP Arctic");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigBOP.weightBOPArctic;
    this.generateVillages = ConfigBOP.villageBOPArctic;
  }
  public RealisticBiomeBOPCanyonRavine() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainBOPCanyonRavine(true, 35f, 160f, 60f, 40f, 69f),
        new SurfaceBOPCanyonRavine(topBlock, fillerBlock, (byte) 0, 0));

    this.setRealisticBiomeName("BOP Canyon Ravine");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigBOP.weightBOPcanyonRavine;
    this.generateVillages = ConfigBOP.villageBOPcanyonRavine;
  }
  public RealisticBiomeEBPlateau(BiomeGenBase ebBiome) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainEBPlateau(200f, 100f, 0f),
        new SurfaceEBPlateau(ebBiome.topBlock, ebBiome.fillerBlock, false, null, 0.95f));

    this.setRealisticBiomeName("EB Plateau");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEB.weightEBPlateau;
    this.generateVillages = ConfigEB.villageEBPlateau;
  }
  public RealisticBiomeBOPOutback() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.OASIS),
        new TerrainBOPOutback(300f),
        new SurfaceBOPOutback(
            topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone, (byte) 0, 1));

    this.setRealisticBiomeName("BOP Outback");
    this.biomeCategory = BiomeCategory.HOT;
    this.biomeWeight = ConfigBOP.weightBOPoutback;
  }
  public RealisticBiomeBOPSeasonalForest() {
    super(
        bopBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.TEMPERATE),
        new TerrainBOPSeasonalForest(0f, 140f, 68f, 200f),
        new SurfaceBOPSeasonalForest(topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone));

    this.setRealisticBiomeName("BOP Seasonal Forest");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigBOP.weightBOPSeasonalForest;
    this.generateVillages = ConfigBOP.villageBOPSeasonalForest;
  }
  public RealisticBiomeEBVolcanoM(BiomeGenBase ebBiome) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainEBVolcanoM(),
        surface);

    this.setRealisticBiomeName("EB Volcano M");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEB.weightEBVolcanoM;
    this.generateVillages = ConfigEB.villageEBVolcanoM;
  }
  public RealisticBiomeHLDesertIsland() {

    super(
        hlBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainHLDesertIsland(90f, 180f, 13f, 100f, 38f, 260f, 71f),
        new SurfaceHLDesertIsland(topBlock, fillerBlock, Blocks.stone, Blocks.cobblestone));

    this.setRealisticBiomeName("HL Desert Island");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigHL.weightHLDesertIsland;
    this.generateVillages = ConfigHL.villageHLDesertIsland;
  }
  public RealisticBiomeHLCliffs() {

    super(
        hlBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainHLCliffs(230f, 120f, 0f),
        new SurfaceHLCliffs(topBlock, fillerBlock, false, null, 0.95f));

    this.setRealisticBiomeName("HL Cliffs");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigHL.weightHLCliffs;
    this.generateVillages = ConfigHL.villageHLCliffs;
  }
  public RealisticBiomeHLRainforest() {

    super(
        hlBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.WET),
        new TerrainHLRainforest(120f, 300f),
        new SurfaceHLRainforest(topBlock, fillerBlock, false, null, 1.3f));

    this.setRealisticBiomeName("HL Rainforest");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigHL.weightHL_rainforest;
    this.generateVillages = ConfigHL.villageHL_rainforest;
  }
  public RealisticBiomeEBPineForest(BiomeGenBase ebBiome) {
    super(
        ebBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainEBPineForest(),
        new SurfaceEBPineForest(
            ebBiome.topBlock, ebBiome.fillerBlock, Blocks.stone, Blocks.cobblestone));

    this.setRealisticBiomeName("EB Pine Forest");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEB.weightEBPineForest;
    this.generateVillages = ConfigEB.villageEBPineForest;
  }
  public RealisticBiomeEBXLSavanna() {
    super(
        ebxlBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.OASIS),
        new TerrainEBXLSavanna(),
        new SurfaceEBXLSavanna(
            topBlock, fillerBlock, Blocks.sand, Blocks.stone, Blocks.cobblestone, 13f, 0.27f));

    this.setRealisticBiomeName("EBXL Savanna");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEBXL.weightEBXLSavanna;
    this.generateVillages = ConfigEBXL.villageEBXLSavanna;
  }
  public RealisticBiomeVanillaSavannaPlateau() {

    super(
        BiomeGenBase.savannaPlateau,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.HOT),
        new TerrainVanillaSavannaPlateau(230f, 120f, 0f),
        new SurfaceVanillaSavannaPlateau(
            Blocks.grass, Blocks.dirt, false, null, 0f, 1.5f, 60f, 65f, 1.5f, Blocks.stone, 0.20f));

    this.setRealisticBiomeName("Vanilla Savanna Plateau");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigVanilla.weightVanillaSavannaPlateau;
    this.generateVillages = ConfigVanilla.villageVanillaSavannaPlateau;
  }
  public RealisticBiomeEBXLSnowForest() {
    super(
        ebxlBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.frozenRiver, Climate.ICE),
        new TerrainEBXLSnowForest(),
        new SurfaceEBXLSnowForest(topBlock, fillerBlock));

    ebxlBiome.setTemperatureRainfall(-2f, ebxlBiome.rainfall);

    this.setRealisticBiomeName("EBXL Snow Forest");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigEBXL.weightEBXLSnowForest;
    this.generateVillages = ConfigEBXL.villageEBXLSnowForest;
  }
  public RealisticBiomeVanillaExtremeHillsEdge() {

    super(
        BiomeGenBase.extremeHillsEdge,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainVanillaExtremeHillsEdge(10f, 120f, 68f, 200f),
        new SurfaceVanillaExtremeHillsEdge(
            topBlock, fillerBlock, Blocks.grass, Blocks.dirt, 60f, -0.14f, 14f, 0.25f));

    this.setRealisticBiomeName("Vanilla Extreme Hills Edge");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigVanilla.weightVanillaExtremeHillsEdge;
    this.generateVillages = ConfigVanilla.villageVanillaExtremeHillsEdge;
    this.generatesEmeralds = true;
  }
  public RealisticBiomeATGSnowyGravelBeach(BiomeGenBase atgBiome) {
    super(
        atgBiome,
        BiomeBase.climatizedBiome(BiomeGenBase.river, Climate.COLD),
        new TerrainATGSnowyGravelBeach(),
        new SurfaceATGSnowyGravelBeach(
            atgBiome.topBlock,
            atgBiome.fillerBlock,
            atgBiome.topBlock,
            atgBiome.fillerBlock,
            (byte) 0,
            1));

    this.setRealisticBiomeName("ATG Snowy Gravel Beach");
    this.biomeSize = BiomeSize.NORMAL;
    this.biomeWeight = ConfigATG.weightATGSnowyGravelBeach;
    this.generateVillages = ConfigATG.villageATGSnowyGravelBeach;
  }