public DataPoint2D generateHumidityAt(int x, int z) {
      /* Rasterize the coordinates */
      x =
          MathHelper.floor((float) x / DefaultWorldProvider.SAMPLE_RATE_HORIZONTAL)
              * DefaultWorldProvider.SAMPLE_RATE_HORIZONTAL;
      z =
          MathHelper.floor((float) z / DefaultWorldProvider.SAMPLE_RATE_HORIZONTAL)
              * DefaultWorldProvider.SAMPLE_RATE_HORIZONTAL;

      DataResults dr = gatherDataAround(_humidities, x, z, 40);

      if (dr.count == 0) {
        DataPoint2D data = new DataPoint2D(x, z, _random.randomInt(60, 80));
        _humidities.add(data);
        return data;
      } else {
        float diff = _random.exponentialRandom(100.0f, 4);
        diff = _random.randomBoolean() ? diff : -diff;
        DataPoint2D data =
            new DataPoint2D(x, z, (int) MathHelper.clamp(dr.avg + diff, 30.0f, 95.0f));
        _humidities.add(data);
        if (DEBUG_WOLRD_PROVIDER)
          System.out.println("Humidity (" + x + ", " + z + ") = " + data.getData());
        return data;
      }
    }
    public DataPoint2D generateTemperatureAt(int x, int z) {
      /* Rasterize the coordinates */
      x =
          MathHelper.floorDivision(x, DefaultWorldProvider.SAMPLE_RATE_TEMPERATURE)
              * DefaultWorldProvider.SAMPLE_RATE_TEMPERATURE;
      z =
          MathHelper.floorDivision(z, DefaultWorldProvider.SAMPLE_RATE_TEMPERATURE)
              * DefaultWorldProvider.SAMPLE_RATE_TEMPERATURE;

      DataResults dr = gatherDataAround(_temperatures, x, z, 50);

      if (dr.count == 0) {
        DataPoint2D data = new DataPoint2D(x, z, _random.randomInt(25, 32));
        _temperatures.add(data);
        return data;
      } else {
        float diff = _random.exponentialRandom(16.0f, 2);
        diff = _random.randomBoolean() ? diff : -diff;
        DataPoint2D data =
            new DataPoint2D(x, z, (int) MathHelper.clamp(dr.avg + diff, 10.0f, 50.0f));
        _temperatures.add(data);
        if (DEBUG_WOLRD_PROVIDER)
          System.out.println("Temp (" + x + ", " + z + ") = " + data.getData());
        return data;
      }
    }
  private void generateSpawnPoint() {
    SmartRandom random = new SmartRandom(new Random());
    for (int i = 1; i <= 15; ++i) {
      int x = random.randomInt(-5 * i, 5 * i);
      int z = random.randomInt(-5 * i, 5 * i);
      int y = getHeightAt(x, z);

      _spawnPoint = new Vec3f(x + 0.5f, y + 1.5f, z + 0.5f);
      byte spawnPointBlock = 0;
      while (spawnPointBlock <= 0) {
        spawnPointBlock = _world.getChunkManager().getBlock(x, y, z, true, true, true);
        try {
          Thread.sleep(100);
        } catch (Exception e) {
        }
      }
      if (BlockManager.getInstance().getBlockType(spawnPointBlock).getName().equals("grass")) {
        byte above = _world.getChunkManager().getBlock(x, y + 1, z, true, true, true);
        if (above == 0) {
          above = _world.getChunkManager().getBlock(x, y + 2, z, true, true, true);
          if (above == 0) {
            break;
          }
        }
      }
    }
  }