@Override
  public void setWorldSeed(String seed) {
    _pGen1 = new PerlinNoise(seed.hashCode());
    _pGen1.setOctaves(8);

    _pGen2 = new PerlinNoise(seed.hashCode() + 1);
    _pGen2.setOctaves(8);

    _pGen3 = new PerlinNoise(seed.hashCode() + 2);
    _pGen3.setOctaves(8);

    _pGen4 = new PerlinNoise(seed.hashCode() + 3);
    _pGen5 = new PerlinNoise(seed.hashCode() + 4);
    _pGen8 = new PerlinNoise(seed.hashCode() + 7);
  }
  private double calcHillDensity(double x, double y, double z) {
    double x1, y1, z1;

    x1 = x * 0.008;
    y1 = y * 0.006;
    z1 = z * 0.008;

    double result = _pGen5.fBm(x1, y1, z1) - 0.1;

    return result > 0.0 ? result : 0;
  }
  private double calcMountainDensity(double x, double y, double z) {
    double x1, y1, z1;

    x1 = x * 0.002;
    y1 = y * 0.001;
    z1 = z * 0.002;

    double result = _pGen4.fBm(x1, y1, z1);

    return result > 0.0 ? result : 0;
  }
 private double calcCaveDensity(double x, double y, double z) {
   return _pGen8.fBm(x * 0.02, y * 0.02, z * 0.02);
 }
 private double calcRiverTerrain(double x, double z) {
   return TeraMath.clamp(
       (java.lang.Math.sqrt(java.lang.Math.abs(_pGen3.fBm(0.0008 * x, 0, 0.0008 * z))) - 0.1)
           * 7.0);
 }
 private double calcOceanTerrain(double x, double z) {
   return TeraMath.clamp(_pGen2.fBm(0.0009 * x, 0, 0.0009 * z) * 8.0);
 }
 private double calcBaseTerrain(double x, double z) {
   return TeraMath.clamp((_pGen1.fBm(0.004 * x, 0, 0.004 * z) + 1.0) / 2.0);
 }