208 $this->random->setSeed(0xdeadbeef ^ ($chunkX << 8) ^ $chunkZ ^ $this->level->getSeed());
212 $chunk = $this->level->getChunk($chunkX, $chunkZ);
216 for($x = 0; $x < 16; ++$x){
217 for($z = 0; $z < 16; ++$z){
222 $biome = $this->
pickBiome($chunkX * 16 + $x, $chunkZ * 16 + $z);
223 $chunk->setBiomeId($x, $z, $biome->getId());
225 for($sx = -self::$SMOOTH_SIZE; $sx <= self::$SMOOTH_SIZE; ++$sx){
226 for($sz = -self::$SMOOTH_SIZE; $sz <= self::$SMOOTH_SIZE; ++$sz){
228 $weight = self::$GAUSSIAN_KERNEL[$sx + self::$SMOOTH_SIZE][$sz + self::$SMOOTH_SIZE];
230 if($sx === 0 and $sz === 0){
233 $index =
Level::chunkHash($chunkX * 16 + $x + $sx, $chunkZ * 16 + $z + $sz);
234 if(isset($biomeCache[$index])){
235 $adjacent = $biomeCache[$index];
237 $biomeCache[$index] = $adjacent = $this->
pickBiome($chunkX * 16 + $x + $sx, $chunkZ * 16 + $z + $sz);
241 $minSum += ($adjacent->getMinElevation() - 1) * $weight;
242 $maxSum += $adjacent->getMaxElevation() * $weight;
244 $weightSum += $weight;
248 $minSum /= $weightSum;
249 $maxSum /= $weightSum;
252 for($y = 127; $y >= 0; --$y){
260 $noiseAdjustment = 2 * (($maxSum - $y) / ($maxSum - $minSum)) - 1;
264 $caveLevel = $minSum - 10;
265 $distAboveCaveLevel = max(0, $y - $caveLevel);
267 $noiseAdjustment = min($noiseAdjustment, 0.4 + ($distAboveCaveLevel / 10));
268 $noiseValue = $noise[$x][$z][$y] + $noiseAdjustment;
273 }elseif($y <= $this->waterHeight && $solidLand ==
false){
280 foreach($this->generationPopulators as $populator){
281 $populator->populate($this->level, $chunkX, $chunkZ, $this->random);