mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-08 10:53:05 +00:00
Improved heightmap generation
This commit is contained in:
@ -176,6 +176,8 @@ interface FullChunk{
|
||||
*/
|
||||
public function setHeightMap($x, $z, $value);
|
||||
|
||||
public function recalculateHeightMap();
|
||||
|
||||
/**
|
||||
* @param int $x 0-15
|
||||
* @param int $z 0-15
|
||||
|
@ -151,12 +151,6 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
|
||||
$this->getProvider()->getLevel()->timings->syncChunkLoadTileEntitiesTimer->stopTiming();
|
||||
|
||||
for($z = 0; $z < 16; ++$z){
|
||||
for($x = 0; $x < 16; ++$x){
|
||||
$this->setHeightMap($x, $z, $this->getHighestBlockAt($x, $z));
|
||||
}
|
||||
}
|
||||
|
||||
$this->NBTentities = null;
|
||||
$this->NBTtiles = null;
|
||||
$this->hasChanged = false;
|
||||
@ -228,10 +222,27 @@ abstract class BaseFullChunk implements FullChunk{
|
||||
$this->heightMap[($z << 4) + $x] = $value;
|
||||
}
|
||||
|
||||
public function getHighestBlockAt($x, $z){
|
||||
public function recalculateHeightMap(){
|
||||
for($z = 0; $z < 16; ++$z){
|
||||
for($x = 0; $x < 16; ++$x){
|
||||
$this->setHeightMap($x, $z, $this->getHighestBlockAt($x, $z, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getHighestBlockAt($x, $z, $cache = true){
|
||||
if($cache){
|
||||
$h = $this->getHeightMap($x, $z);
|
||||
|
||||
if($h !== 0 and $h !== 127){
|
||||
return $h;
|
||||
}
|
||||
}
|
||||
|
||||
$column = $this->getBlockIdColumn($x, $z);
|
||||
for($y = 127; $y >= 0; --$y){
|
||||
if($column{$y} !== "\x00"){
|
||||
$this->setHeightMap($x, $z, $y);
|
||||
return $y;
|
||||
}
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ class RegionLoader{
|
||||
$full = $half . $half;
|
||||
$nbt->Blocks = new ByteArray("Blocks", $full);
|
||||
$nbt->Data = new ByteArray("Data", $half);
|
||||
$nbt->SkyLight = new ByteArray("SkyLight", $half);
|
||||
$nbt->SkyLight = new ByteArray("SkyLight", str_repeat("\xff", 16384));
|
||||
$nbt->BlockLight = new ByteArray("BlockLight", $half);
|
||||
|
||||
$nbt->Entities = new Enum("Entities", []);
|
||||
|
Reference in New Issue
Block a user