Chunk: stop exposing SplFixedArray<SubChunk> to the API

this fixes a large number of PHPStan errors, and also brings us a step closer to negative-build-height readiness.
This commit is contained in:
Dylan K. Taylor
2021-10-01 22:17:28 +01:00
parent 42bf9578ce
commit 5b818827db
5 changed files with 14 additions and 73 deletions

View File

@@ -46,7 +46,7 @@ final class ChunkSerializer{
* Chunks are sent in a stack, so every chunk below the top non-empty one must be sent.
*/
public static function getSubChunkCount(Chunk $chunk) : int{
for($count = $chunk->getSubChunks()->count(); $count > 0; --$count){
for($count = count($chunk->getSubChunks()); $count > 0; --$count){
if($chunk->getSubChunk($count - 1)->isEmptyFast()){
continue;
}

View File

@@ -299,11 +299,11 @@ class Chunk{
}
/**
* @return \SplFixedArray|SubChunk[]
* @phpstan-return \SplFixedArray<SubChunk>
* @return SubChunk[]
* @phpstan-return array<int, SubChunk>
*/
public function getSubChunks() : \SplFixedArray{
return $this->subChunks;
public function getSubChunks() : array{
return $this->subChunks->toArray();
}
/**

View File

@@ -67,7 +67,7 @@ final class FastChunkSerializer{
//subchunks
$subChunks = $chunk->getSubChunks();
$count = $subChunks->count();
$count = count($subChunks);
$stream->putByte($count);
foreach($subChunks as $y => $subChunk){

View File

@@ -30,6 +30,7 @@ use pocketmine\world\format\SubChunk;
use pocketmine\world\utils\SubChunkExplorer;
use pocketmine\world\utils\SubChunkExplorerStatus;
use pocketmine\world\World;
use function count;
use function max;
class SkyLightUpdate extends LightUpdate{
@@ -114,7 +115,7 @@ class SkyLightUpdate extends LightUpdate{
//have to avoid filling full light for any subchunk that contains a heightmap Y coordinate
$highestHeightMapPlusOne = max($chunk->getHeightMapArray()) + 1;
$lowestClearSubChunk = ($highestHeightMapPlusOne >> SubChunk::COORD_BIT_SIZE) + (($highestHeightMapPlusOne & SubChunk::COORD_MASK) !== 0 ? 1 : 0);
$chunkHeight = $chunk->getSubChunks()->count();
$chunkHeight = count($chunk->getSubChunks());
for($y = 0; $y < $lowestClearSubChunk && $y < $chunkHeight; $y++){
$chunk->getSubChunk($y)->setBlockSkyLightArray(LightArray::fill(0));
}
@@ -173,7 +174,7 @@ class SkyLightUpdate extends LightUpdate{
* @phpstan-param \SplFixedArray<bool> $directSkyLightBlockers
*/
private static function recalculateHeightMap(Chunk $chunk, \SplFixedArray $directSkyLightBlockers) : HeightArray{
$maxSubChunkY = $chunk->getSubChunks()->count() - 1;
$maxSubChunkY = count($chunk->getSubChunks()) - 1;
for(; $maxSubChunkY >= 0; $maxSubChunkY--){
if(!$chunk->getSubChunk($maxSubChunkY)->isEmptyFast()){
break;