@Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      OpenSimplexNoise simplex,
      CellNoise cell,
      float strength,
      float river) {

    /**
     * Using rDecorateSeedBiome() to partially decorate the biome? If so, then comment out this
     * method.
     */
    rOreGenSeedBiome(world, rand, chunkX, chunkY, simplex, cell, strength, river, baseBiome);

    // boulders
    for (int l = 0; l < 3f * strength; ++l) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);

      if (k1 < 95 && rand.nextInt(16) == 0) {
        (new WorldGenBlob(Blocks.mossy_cobblestone, 0, rand)).generate(world, rand, i1, k1, j1);
      }
    }

    // trees
    float l = simplex.noise2(chunkX / 100f, chunkY / 100f) * 6f + 0.8f;
    for (int b1 = 0; b1 < l * 4f * strength; b1++) {
      int j6 = chunkX + rand.nextInt(16) + 8;
      int k10 = chunkY + rand.nextInt(16) + 8;
      int z52 = world.getHeightValue(j6, k10);

      if (rand.nextInt(24) == 0) {
        // WorldGenerator worldgenerator = new WorldGenTreeSpruceSmall(1 + rand.nextInt(2));
        WorldGenerator worldgenerator = new WorldGenTreePineEuro();
        worldgenerator.setScale(1.0D, 1.0D, 1.0D);
        worldgenerator.generate(world, rand, j6, z52, k10);
      }
    }

    if (l > 0f && rand.nextInt(6) == 0) {
      int x22 = chunkX + rand.nextInt(16) + 8;
      int z22 = chunkY + rand.nextInt(16) + 8;
      int y22 = world.getHeightValue(x22, z22);
      (new WorldGenLog(1, 3 + rand.nextInt(4), false)).generate(world, rand, x22, y22, z22);
    }

    for (int b = 0; b < 2f * strength; b++) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);
      if (rand.nextInt(10) == 0) {
        (new WorldGenTreeShrub(rand.nextInt(5) + 4, rand.nextInt(2), rand.nextInt(2)))
            .generate(world, rand, i1, k1, j1);
      } else {
        (new WorldGenTreeShrub(rand.nextInt(4) + 1, rand.nextInt(2), rand.nextInt(2)))
            .generate(world, rand, i1, k1, j1);
      }
    }

    if (rand.nextInt((int) (3f / strength)) == 0) {
      int k15 = chunkX + rand.nextInt(16) + 8;
      int k17 = rand.nextInt(64) + 64;
      int k20 = chunkY + rand.nextInt(16) + 8;

      if (rand.nextBoolean()) {
        (new WorldGenFlowers(Blocks.brown_mushroom)).generate(world, rand, k15, k17, k20);
      } else {
        (new WorldGenFlowers(Blocks.red_mushroom)).generate(world, rand, k15, k17, k20);
      }
    }

    if (rand.nextInt((int) (20f / strength)) == 0) {
      int j16 = chunkX + rand.nextInt(16) + 8;
      int j18 = rand.nextInt(128);
      int j21 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenPumpkin()).generate(world, rand, j16, j18, j21);
    }

    for (int l14 = 0; l14 < 10f * strength; l14++) {
      int l19 = chunkX + rand.nextInt(16) + 8;
      int k22 = rand.nextInt(128);
      int j24 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenGrass(Blocks.tallgrass, 1)).generate(world, rand, l19, k22, j24);
    }
  }
  @Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      OpenSimplexNoise simplex,
      CellNoise cell,
      float strength,
      float river) {

    for (int i23 = 0; i23 < 1; i23++) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);

      if (k1 < 80) {
        (new WorldGenBlockBlob(Blocks.cobblestone, 0)).generate(world, rand, i1, k1, j1);
      }
    }

    if (river > 0.7f) {
      if (river > 0.86f) {
        for (int b33 = 0; b33 < 10f * strength; b33++) {
          int j6 = chunkX + rand.nextInt(16) + 8;
          int k10 = chunkY + rand.nextInt(16) + 8;
          int z52 = world.getHeightValue(j6, k10);

          if (z52 < 100f || (z52 < 120f && rand.nextInt(10) == 0)) {
            WorldGenerator worldgenerator =
                rand.nextInt(4) != 0 ? new WorldGenShrub(0, 0) : new WorldGenTreeSavanna(1);
            worldgenerator.setScale(1.0D, 1.0D, 1.0D);
            worldgenerator.generate(world, rand, j6, z52, k10);
          }
        }
      }

      for (int k18 = 0; k18 < 12f * strength; k18++) {
        int k21 = chunkX + rand.nextInt(16) + 8;
        int j23 = rand.nextInt(160);
        int k24 = chunkY + rand.nextInt(16) + 8;
        if (j23 < 120f) {
          (new WorldGenCacti(false)).generate(world, rand, k21, j23, k24);
        }
      }

      for (int f25 = 0; f25 < 2f * strength; f25++) {
        int i18 = chunkX + rand.nextInt(16) + 8;
        int i23 = chunkY + rand.nextInt(16) + 8;
        (new WorldGenReed()).generate(world, rand, i18, 60 + rand.nextInt(8), i23);
      }

      if (rand.nextInt(28) == 0) {
        int j16 = chunkX + rand.nextInt(16) + 8;
        int j18 = rand.nextInt(128);
        int j21 = chunkY + rand.nextInt(16) + 8;
        (new WorldGenPumpkin()).generate(world, rand, j16, j18, j21);
      }

      for (int f23 = 0; f23 < 3; f23++) {
        int j15 = chunkX + rand.nextInt(16) + 8;
        int j17 = rand.nextInt(128);
        int j20 = chunkY + rand.nextInt(16) + 8;
        (new WorldGenFlowers(new int[] {9, 9, 9, 9, 3, 3, 3, 3, 3, 2, 2, 2, 11, 11, 11}))
            .generate(world, rand, j15, j17, j20);
      }

      for (int l14 = 0; l14 < 15; l14++) {
        int l19 = chunkX + rand.nextInt(16) + 8;
        int k22 = rand.nextInt(128);
        int j24 = chunkY + rand.nextInt(16) + 8;

        if (rand.nextInt(3) == 0) {
          (new WorldGenGrass(Blocks.double_plant, 2)).generate(world, rand, l19, k22, j24);
        } else {
          (new WorldGenGrass(Blocks.tallgrass, 1)).generate(world, rand, l19, k22, j24);
        }
      }
    } else {
      int a = 6 - (int) (simplex.noise2(chunkX / 100f, chunkY / 100f) * 10);
      if (a < 1 || rand.nextInt(a) == 0) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 100f || (z52 < 120f && rand.nextInt(10) == 0)) {
          WorldGenerator worldgenerator =
              rand.nextInt(14) != 0 ? new WorldGenShrub(0, 0) : new WorldGenTreeSavanna(1);
          worldgenerator.setScale(1.0D, 1.0D, 1.0D);
          worldgenerator.generate(world, rand, j6, z52, k10);
        }
      }

      for (int k18 = 0; k18 < 70; k18++) {
        int k21 = chunkX + rand.nextInt(16) + 8;
        int j23 = 64 + rand.nextInt(64);
        int k24 = chunkY + rand.nextInt(16) + 8;
        if (j23 < 120f) {
          (new WorldGenCacti(false)).generate(world, rand, k21, j23, k24);
        }
      }

      if (rand.nextInt((int) (3f / strength)) == 0) {
        int i18 = chunkX + rand.nextInt(16) + 8;
        int i23 = chunkY + rand.nextInt(16) + 8;
        (new WorldGenReed()).generate(world, rand, i18, 60 + rand.nextInt(8), i23);
      }

      if (rand.nextInt(28) == 0) {
        int j16 = chunkX + rand.nextInt(16) + 8;
        int j18 = rand.nextInt(128);
        int j21 = chunkY + rand.nextInt(16) + 8;
        (new WorldGenPumpkin()).generate(world, rand, j16, j18, j21);
      }

      for (int f23 = 0; f23 < 3; f23++) {
        int j15 = chunkX + rand.nextInt(16) + 8;
        int j17 = rand.nextInt(128);
        int j20 = chunkY + rand.nextInt(16) + 8;
        (new WorldGenFlowers(new int[] {9, 9, 9, 9, 3, 3, 3, 3, 3, 2, 2, 2, 11, 11, 11}))
            .generate(world, rand, j15, j17, j20);
      }

      for (int l14 = 0; l14 < 15; l14++) {
        int l19 = chunkX + rand.nextInt(16) + 8;
        int k22 = rand.nextInt(128);
        int j24 = chunkY + rand.nextInt(16) + 8;

        if (rand.nextInt(3) == 0) {
          (new WorldGenGrass(Blocks.double_plant, 2)).generate(world, rand, l19, k22, j24);
        } else {
          (new WorldGenGrass(Blocks.tallgrass, 1)).generate(world, rand, l19, k22, j24);
        }
      }
    }
  }
  @Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      OpenSimplexNoise simplex,
      CellNoise cell,
      float strength,
      float river) {

    /**
     * Using rDecorateSeedBiome() to partially decorate the biome? If so, then comment out this
     * method.
     */
    rOreGenSeedBiome(world, rand, chunkX, chunkY, simplex, cell, strength, river, baseBiome);

    float l = simplex.noise2(chunkX / 80f, chunkY / 80f) * 60f - 15f;

    for (int b1 = 0; b1 < 2 * strength; b1++) {
      if (rand.nextInt(2) == 0) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 230) {
          if (rand.nextInt(32) == 0) {
            WorldGenerator worldgenerator = TreeGen.greatOak(rand);
            worldgenerator.setScale(1.0D, 1.0D, 1.0D);
            worldgenerator.generate(world, rand, j6, z52, k10);
          } else {
            WorldGenerator worldgenerator = TreeGen.birch();
            worldgenerator.setScale(1.0D, 1.0D, 1.0D);
            worldgenerator.generate(world, rand, j6, z52, k10);
          }
        }
      }
    }

    if (l > 5f) {
      for (int b2 = 0; b2 < 4f * strength; b2++) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 220) {
          WorldGenerator worldgenerator =
              rand.nextInt(2) == 0
                  ? TreeGen.birch()
                  : rand.nextInt(10) != 0
                      ? new WorldGenTrees(false)
                      : new WorldGenForest(false, false);
          worldgenerator.setScale(1.0D, 1.0D, 1.0D);
          worldgenerator.generate(world, rand, j6, z52, k10);
        }
      }
    }

    if (rand.nextInt((int) (32f / strength)) == 0) {
      int x22 = chunkX + rand.nextInt(16) + 8;
      int z22 = chunkY + rand.nextInt(16) + 8;
      int y22 = world.getHeightValue(x22, z22);
      if (y22 < 100) {
        if (rand.nextBoolean()) {
          (new WorldGenLog(Blocks.log, 0, Blocks.leaves, -1, 3 + rand.nextInt(4)))
              .generate(world, rand, x22, y22, z22);
        } else {
          (new WorldGenLog(Blocks.log, 2, Blocks.leaves, -1, 3 + rand.nextInt(4)))
              .generate(world, rand, x22, y22, z22);
        }
      }
    }

    for (int f24 = 0; f24 < 3f * strength; f24++) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);
      if (k1 < 110) {
        (new WorldGenTreeShrub(rand.nextInt(4) + 1, 0, rand.nextInt(3)))
            .generate(world, rand, i1, k1, j1);
      }
    }

    for (int f23 = 0; f23 < 8f * strength; f23++) {
      int j15 = chunkX + rand.nextInt(16) + 8;
      int j17 = rand.nextInt(128);
      int j20 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenFlowers(new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}))
          .generate(world, rand, j15, j17, j20);
    }

    for (int l14 = 0; l14 < 12f * strength; l14++) {
      int l19 = chunkX + rand.nextInt(16) + 8;
      int k22 = rand.nextInt(128);
      int j24 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenGrass(Blocks.tallgrass, 1)).generate(world, rand, l19, k22, j24);
    }
  }
  @Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      PerlinNoise perlin,
      CellNoise cell,
      float strength,
      float river) {
    if (rand.nextInt((int) (2f / strength)) == 0) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);
      if (k1 < 85) {
        (new DecoBlob(Blocks.cobblestone, 0)).generate(world, rand, i1, k1, j1);
      }
    }

    float t = perlin.noise2(chunkX / 30f, chunkY / 30f) * 8f;
    t = t > 4f ? 4f : t;

    if (t > 0f) {
      if (rand.nextInt((int) ((10f - t) / strength)) == 0) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 82) {
          WorldGenerator worldgenerator =
              new DecoJungleTall(
                  Blocks.log,
                  2,
                  Blocks.leaves,
                  2,
                  6 + rand.nextInt(4),
                  3 + rand.nextInt(2),
                  9f + rand.nextFloat() * 4f,
                  3,
                  0.32f,
                  0.1f);
          worldgenerator.setScale(1.0D, 1.0D, 1.0D);
          worldgenerator.generate(world, rand, j6, z52, k10);
        }
      }
    }

    if (river > 0.8f) {
      for (int b33 = 0; b33 < 8f * strength; b33++) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 82) {
          WorldGenerator worldgenerator =
              rand.nextInt(2) != 0 ? new WorldGenShrub(0, 0) : new DecoSavannah(1, false);
          worldgenerator.setScale(1.0D, 1.0D, 1.0D);
          worldgenerator.generate(world, rand, j6, z52, k10);
        }
      }
    } else {
      for (int b33 = 0; b33 < (1f + t) * strength; b33++) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 82) {
          WorldGenerator worldgenerator =
              rand.nextInt(6) != 0 ? new WorldGenShrub(0, 0) : new DecoSavannah(1, false);
          worldgenerator.setScale(1.0D, 1.0D, 1.0D);
          worldgenerator.generate(world, rand, j6, z52, k10);
        }
      }
    }

    if (rand.nextInt((int) (3f / strength)) == 0) {
      int i18 = chunkX + rand.nextInt(16) + 8;
      int i23 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenReed()).generate(world, rand, i18, 60 + rand.nextInt(8), i23);
    }

    if (rand.nextInt(28) == 0) {
      int j16 = chunkX + rand.nextInt(16) + 8;
      int j18 = rand.nextInt(128);
      int j21 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenPumpkin()).generate(world, rand, j16, j18, j21);
    }

    for (int f23 = 0; f23 < 3; f23++) {
      int j15 = chunkX + rand.nextInt(16) + 8;
      int j17 = rand.nextInt(128);
      int j20 = chunkY + rand.nextInt(16) + 8;
      (new DecoFlowers(new int[] {9, 9, 9, 9, 3, 3, 3, 3, 3, 2, 2, 2, 11, 11, 11}))
          .generate(world, rand, j15, j17, j20);
    }

    for (int k18 = 0; k18 < 26f * strength; k18++) {
      int k21 = chunkX + rand.nextInt(16) + 8;
      int j23 = 66 + rand.nextInt(20);
      int k24 = chunkY + rand.nextInt(16) + 8;
      (new DecoCacti(false)).generate(world, rand, k21, j23, k24);
    }

    for (int l14 = 0; l14 < 8f * strength; l14++) {
      int l19 = chunkX + rand.nextInt(16) + 8;
      int k22 = 60 + rand.nextInt(40);
      int j24 = chunkY + rand.nextInt(16) + 8;

      if (rand.nextInt(3) == 0) {
        (new DecoGrass(Blocks.double_plant, 2)).generate(world, rand, l19, k22, j24);
      } else {
        (new DecoGrass(Blocks.tallgrass, 1)).generate(world, rand, l19, k22, j24);
      }
    }
  }
  @Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      OpenSimplexNoise simplex,
      CellNoise cell,
      float strength,
      float river) {

    /**
     * Using rDecorateSeedBiome() to partially decorate the biome? If so, then comment out this
     * method.
     */
    rOreGenSeedBiome(world, rand, chunkX, chunkY, simplex, cell, strength, river, baseBiome);

    for (int l = 0; l < 6f * strength; ++l) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);

      if (k1 < 95 && rand.nextInt(16) == 0) {
        (new WorldGenBlob(Blocks.cobblestone, 0, rand)).generate(world, rand, i1, k1, j1);
      }
    }

    float l = simplex.noise2(chunkX / 100f, chunkY / 100f) * 12f + 4f;
    for (int b1 = 0; b1 < l * strength; b1++) {
      int j6 = chunkX + rand.nextInt(16) + 8;
      int k10 = chunkY + rand.nextInt(16) + 8;
      int z52 = world.getHeightValue(j6, k10);

      if (z52 < 90) {
        WorldGenerator worldgenerator =
            rand.nextInt(8) != 0
                ? new WorldGenTreePine(4, rand.nextInt(4) == 0 ? 1 : 0)
                : rand.nextInt(3) != 0
                    ? new WorldGenTreePineSmall(3 + rand.nextInt(6), 6 + rand.nextInt(8), 0)
                    : new WorldGenIceSpike();
        worldgenerator.setScale(1.0D, 1.0D, 1.0D);
        worldgenerator.generate(world, rand, j6, z52, k10);
      } else if (z52 < 120) {
        WorldGenerator worldgenerator =
            rand.nextInt(4) != 0
                ? new WorldGenTreePineSmall(
                    1 + rand.nextInt(3), 3 + rand.nextInt(5), rand.nextInt(2))
                : new WorldGenIceSpike();
        worldgenerator.setScale(1.0D, 1.0D, 1.0D);
        worldgenerator.generate(world, rand, j6, z52, k10);
      }
    }

    if (rand.nextInt((int) (12f / strength)) == 0) {
      int x22 = chunkX + rand.nextInt(16) + 8;
      int z22 = chunkY + rand.nextInt(16) + 8;
      int y22 = world.getHeightValue(x22, z22);
      if (y22 < 100) {
        (new WorldGenLog(1, 3 + rand.nextInt(4), false)).generate(world, rand, x22, y22, z22);
      }
    }
  }
  @Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      PerlinNoise perlin,
      CellNoise cell,
      float strength,
      float river) {
    if (rand.nextInt((int) (15f / strength)) == 0) {
      int i2 = chunkX + rand.nextInt(16) + 8;
      int i8 = chunkY + rand.nextInt(16) + 8;
      int l4 = world.getHeightValue(i2, i8);
      if (l4 > 63 && l4 < 105) {
        (new WorldGenLakes(Blocks.water)).generate(world, rand, i2, l4, i8);
      }
    }

    for (int l = 0; l < 6f * strength; ++l) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);
      if (k1 < 95 && (k1 < 64 || rand.nextInt(15) == 0)) {
        (new DecoBlob(Blocks.mossy_cobblestone, 0)).generate(world, rand, i1, k1, j1);
      }
    }

    if (rand.nextInt((int) (25f / strength)) == 0) {
      int j16 = chunkX + rand.nextInt(16) + 8;
      int j18 = rand.nextInt(128);
      int j21 = chunkY + rand.nextInt(16) + 8;
      (new WorldGenPumpkin()).generate(world, rand, j16, j18, j21);
    }

    for (int f23 = 0; f23 < 2f * strength; f23++) {
      int j15 = chunkX + rand.nextInt(16) + 8;
      int j17 = rand.nextInt(128);
      int j20 = chunkY + rand.nextInt(16) + 8;
      (new DecoFlowers(new int[] {9, 0, 3})).generate(world, rand, j15, j17, j20);
    }

    for (int l14 = 0; l14 < 3f * strength; l14++) {
      int l19 = chunkX + rand.nextInt(16) + 8;
      int k22 = rand.nextInt(128);
      int j24 = chunkY + rand.nextInt(16) + 8;
      (new DecoGrass(Blocks.tallgrass, 1)).generate(world, rand, l19, k22, j24);
    }

    // trees
    float l = perlin.noise2(chunkX / 100f, chunkY / 100f) * 5f - 0.5f;
    for (int b1 = 0; b1 < l * 2f * strength; b1++) {
      int j6 = chunkX + rand.nextInt(16) + 8;
      int k10 = chunkY + rand.nextInt(16) + 8;
      int z52 = world.getHeightValue(j6, k10);

      if (z52 < 75) {
        WorldGenerator worldgenerator =
            rand.nextInt(8) != 0
                ? new DecoSmallSpruce(1 + rand.nextInt(2))
                : new DecoSmallPine(1 + rand.nextInt(3), 2 + rand.nextInt(4));
        worldgenerator.setScale(1.0D, 1.0D, 1.0D);
        worldgenerator.generate(world, rand, j6, z52, k10);
      } else if (z52 < 110) {
        WorldGenerator worldgenerator =
            rand.nextInt(4) != 0
                ? new DecoSmallSpruce(rand.nextInt(2))
                : new DecoSmallPine(2 + rand.nextInt(2), 4 + rand.nextInt(5));
        worldgenerator.setScale(1.0D, 1.0D, 1.0D);
        worldgenerator.generate(world, rand, j6, z52, k10);
      }
    }

    if (l > -0.4f) {
      for (int b = 0; b < 2f * strength; b++) {
        int i1 = chunkX + rand.nextInt(16) + 8;
        int j1 = chunkY + rand.nextInt(16) + 8;
        int k1 = world.getHeightValue(i1, j1);
        if (k1 < 110) {
          if (rand.nextInt(10) == 0) {
            (new DecoShrub(rand.nextInt(5) + 4, rand.nextInt(2), rand.nextInt(2)))
                .generate(world, rand, i1, k1, j1);
          } else {
            (new DecoShrub(rand.nextInt(4) + 1, rand.nextInt(2), rand.nextInt(2)))
                .generate(world, rand, i1, k1, j1);
          }
        }
      }
    }
  }
  @Override
  public void rDecorate(
      World world,
      Random rand,
      int chunkX,
      int chunkY,
      OpenSimplexNoise simplex,
      CellNoise cell,
      float strength,
      float river) {

    /**
     * Using rDecorateSeedBiome() to partially decorate the biome? If so, then comment out this
     * method.
     */
    // rOreGenSeedBiome(world, rand, chunkX, chunkY, simplex, cell, strength, river, baseBiome);

    float l = simplex.noise2(chunkX / 80f, chunkY / 80f) * 60f - 15f;
    // float l = simplex.noise3(chunkX / 80f, chunkY / 80f, simplex.noise2(chunkX / 60f, chunkY /
    // 60f)) * 60f - 15f;

    for (int l1 = 0; l1 < 2f * strength; ++l1) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);

      if (k1 < 80 && rand.nextInt(20) == 0) {
        if (rand.nextInt(8) != 0) {
          (new WorldGenBlob(Blocks.mossy_cobblestone, 0, rand)).generate(world, rand, i1, k1, j1);
        } else {
          (new WorldGenBlob(Blocks.web, 0, rand)).generate(world, rand, i1, k1, j1);
        }
      }
    }

    if (l > 0f) {
      for (int b2 = 0; b2 < 24f * strength; b2++) {
        int j6 = chunkX + rand.nextInt(16) + 8;
        int k10 = chunkY + rand.nextInt(16) + 8;
        int z52 = world.getHeightValue(j6, k10);

        if (z52 < 120) {
          WorldGenerator worldgenerator =
              new WorldGenTreeMangrove(
                  Blocks.log2,
                  1,
                  Blocks.leaves2,
                  1,
                  9 + rand.nextInt(5),
                  3 + rand.nextInt(2),
                  13f,
                  3,
                  0.32f,
                  0.1f);
          worldgenerator.setScale(1.0D, 1.0D, 1.0D);
          worldgenerator.generate(world, rand, j6, z52, k10);
        }
      }
    }

    if (rand.nextInt((int) (10f / strength)) == 0) {
      int x22 = chunkX + rand.nextInt(16) + 8;
      int z22 = chunkY + rand.nextInt(16) + 8;
      int y22 = world.getHeightValue(x22, z22);
      if (y22 < 100) {
        (new WorldGenLog(Blocks.log2, 1, Blocks.leaves2, -1, 9 + rand.nextInt(5)))
            .generate(world, rand, x22, y22, z22);
      }
    }

    for (int f24 = 0; f24 < strength; f24++) {
      int i1 = chunkX + rand.nextInt(16) + 8;
      int j1 = chunkY + rand.nextInt(16) + 8;
      int k1 = world.getHeightValue(i1, j1);
      if (k1 < 110) {
        (new WorldGenTreeShrub(rand.nextInt(4) + 1, 0, rand.nextInt(3)))
            .generate(world, rand, i1, k1, j1);
      }
    }

    if (TerrainGen.decorate(world, rand, chunkX, chunkY, GRASS)) {

      for (int l14 = 0; l14 < 10f * strength; l14++) {
        int l19 = chunkX + rand.nextInt(16) + 8;
        int k22 = rand.nextInt(128);
        int j24 = chunkY + rand.nextInt(16) + 8;
        int grassMeta;

        if (rand.nextInt(16) == 0) {
          grassMeta = 0;
        } else {
          grassMeta = 1;
        }

        (new WorldGenGrass(Blocks.tallgrass, grassMeta)).generate(world, rand, l19, k22, j24);
      }

      for (int l14 = 0; l14 < 8f * strength; l14++) {
        int l19 = chunkX + rand.nextInt(16) + 8;
        int k22 = rand.nextInt(128);
        int j24 = chunkY + rand.nextInt(16) + 8;

        if (rand.nextInt(6) == 0) {
          (new WorldGenGrass(Blocks.double_plant, RandomUtil.getRandomInt(rand, 2, 3)))
              .generate(world, rand, l19, k22, j24);
        }
      }

      for (int l14 = 0; l14 < 4f * strength; l14++) {
        int l19 = chunkX + rand.nextInt(16) + 8;
        int k22 = rand.nextInt(128);
        int j24 = chunkY + rand.nextInt(16) + 8;
        int grassMeta;

        if (rand.nextInt(16) == 0) {
          grassMeta = 0;
        } else {
          grassMeta = RandomUtil.getRandomInt(rand, 1, 2);
        }

        (new WorldGenGrass(Blocks.tallgrass, grassMeta)).generate(world, rand, l19, k22, j24);
      }
    }

    rDecorateSeedBiome(world, rand, chunkX, chunkY, simplex, cell, strength, river, baseBiome);

    int k15 = chunkX + rand.nextInt(16) + 8;
    int k20 = chunkY + rand.nextInt(16) + 8;
    int k17 = world.getHeightValue(k15, k20);

    if (rand.nextBoolean()) {
      (new WorldGenFlowers(Blocks.brown_mushroom)).generate(world, rand, k15, k17, k20);
    } else {
      (new WorldGenFlowers(Blocks.red_mushroom)).generate(world, rand, k15, k17, k20);
    }
  }