diff --git a/src/pocketmine/level/format/Chunk.php b/src/pocketmine/level/format/Chunk.php index b1fcada26..360fe51eb 100644 --- a/src/pocketmine/level/format/Chunk.php +++ b/src/pocketmine/level/format/Chunk.php @@ -363,13 +363,11 @@ interface Chunk{ public function networkSerialize() : string; /** - * Serializes a chunk without compression for use in AsyncTasks. - * - * @param Chunk $chunk + * Serializes the chunk without compression for use in AsyncTasks. * * @return string */ - public static function fastSerialize(Chunk $chunk) : string; + public function fastSerialize() : string; /** * Deserializes a chunk from fast serialization diff --git a/src/pocketmine/level/format/generic/ChunkRequestTask.php b/src/pocketmine/level/format/generic/ChunkRequestTask.php index fb5718d5d..d0665a7c8 100644 --- a/src/pocketmine/level/format/generic/ChunkRequestTask.php +++ b/src/pocketmine/level/format/generic/ChunkRequestTask.php @@ -21,6 +21,7 @@ namespace pocketmine\level\format\generic; +use pocketmine\level\format\Chunk; use pocketmine\level\Level; use pocketmine\nbt\NBT; use pocketmine\scheduler\AsyncTask; @@ -40,7 +41,7 @@ class ChunkRequestTask extends AsyncTask{ public function __construct(Level $level, Chunk $chunk){ $this->levelId = $level->getId(); - $this->chunk = GenericChunk::fastSerialize($chunk); + $this->chunk = $chunk->fastSerialize(); $this->chunkX = $chunk->getX(); $this->chunkZ = $chunk->getZ(); diff --git a/src/pocketmine/level/format/generic/GenericChunk.php b/src/pocketmine/level/format/generic/GenericChunk.php index b05c47bc2..7ba53fbbc 100644 --- a/src/pocketmine/level/format/generic/GenericChunk.php +++ b/src/pocketmine/level/format/generic/GenericChunk.php @@ -621,13 +621,13 @@ class GenericChunk implements Chunk{ return $result; } - public static function fastSerialize(Chunk $chunk) : string{ + public function fastSerialize() : string{ $stream = new BinaryStream(); - $stream->putInt($chunk->x); - $stream->putInt($chunk->z); + $stream->putInt($this->x); + $stream->putInt($this->z); $count = 0; $subChunks = ""; - foreach($chunk->subChunks as $y => $subChunk){ + foreach($this->subChunks as $y => $subChunk){ if($subChunk instanceof EmptySubChunk){ continue; } @@ -636,9 +636,9 @@ class GenericChunk implements Chunk{ } $stream->putByte($count); $stream->put($subChunks); - $stream->put(pack("C*", ...$chunk->getHeightMapArray()) . - $chunk->getBiomeIdArray() . - chr(($chunk->lightPopulated ? 1 << 2 : 0) | ($chunk->terrainPopulated ? 1 << 1 : 0) | ($chunk->terrainGenerated ? 1 : 0))); + $stream->put(pack("C*", ...$this->heightMap) . + $this->biomeIds . + chr(($this->lightPopulated ? 1 << 2 : 0) | ($this->terrainPopulated ? 1 << 1 : 0) | ($this->terrainGenerated ? 1 : 0))); //TODO: tiles and entities return $stream->getBuffer(); } diff --git a/src/pocketmine/level/generator/GenerationTask.php b/src/pocketmine/level/generator/GenerationTask.php index 2684f13d6..1b7e01313 100644 --- a/src/pocketmine/level/generator/GenerationTask.php +++ b/src/pocketmine/level/generator/GenerationTask.php @@ -33,13 +33,11 @@ class GenerationTask extends AsyncTask{ public $state; public $levelId; public $chunk; - public $chunkClass; public function __construct(Level $level, Chunk $chunk){ $this->state = true; $this->levelId = $level->getId(); - $this->chunk = GenericChunk::fastSerialize($chunk); - $this->chunkClass = get_class($chunk); + $this->chunk = $chunk->fastSerialize(); } public function onRun(){ @@ -65,7 +63,7 @@ class GenerationTask extends AsyncTask{ $chunk = $manager->getChunk($chunk->getX(), $chunk->getZ()); $chunk->setGenerated(); - $this->chunk = GenericChunk::fastSerialize($chunk); + $this->chunk = $chunk->fastSerialize(); $manager->setChunk($chunk->getX(), $chunk->getZ(), null); } diff --git a/src/pocketmine/level/generator/LightPopulationTask.php b/src/pocketmine/level/generator/LightPopulationTask.php index e6540610c..931404c95 100644 --- a/src/pocketmine/level/generator/LightPopulationTask.php +++ b/src/pocketmine/level/generator/LightPopulationTask.php @@ -31,12 +31,10 @@ class LightPopulationTask extends AsyncTask{ public $levelId; public $chunk; - public $chunkClass; public function __construct(Level $level, Chunk $chunk){ $this->levelId = $level->getId(); - $this->chunk = GenericChunk::fastDeserialize($this->chunk); - $this->chunkClass = get_class($chunk); + $this->chunk = $chunk->fastSerialize(); } public function onRun(){ @@ -51,7 +49,7 @@ class LightPopulationTask extends AsyncTask{ $chunk->populateSkyLight(); $chunk->setLightPopulated(); - $this->chunk = GenericChunk::fastSerialize($chunk); + $this->chunk = $chunk->fastSerialize(); } public function onCompletion(Server $server){ diff --git a/src/pocketmine/level/generator/PopulationTask.php b/src/pocketmine/level/generator/PopulationTask.php index 869a5fa85..167ba783c 100644 --- a/src/pocketmine/level/generator/PopulationTask.php +++ b/src/pocketmine/level/generator/PopulationTask.php @@ -47,7 +47,7 @@ class PopulationTask extends AsyncTask{ public function __construct(Level $level, Chunk $chunk){ $this->state = true; $this->levelId = $level->getId(); - $this->chunk = GenericChunk::fastSerialize($chunk); + $this->chunk = $chunk->fastSerialize(); for($i = 0; $i < 9; ++$i){ if($i === 4){ @@ -56,7 +56,7 @@ class PopulationTask extends AsyncTask{ $xx = -1 + $i % 3; $zz = -1 + (int) ($i / 3); $ck = $level->getChunk($chunk->getX() + $xx, $chunk->getZ() + $zz, false); - $this->{"chunk$i"} = $ck !== null ? GenericChunk::fastSerialize($ck) : null; + $this->{"chunk$i"} = $ck !== null ? $ck->fastSerialize() : null; } } @@ -118,7 +118,7 @@ class PopulationTask extends AsyncTask{ $chunk->populateSkyLight(); $chunk->setLightPopulated(); $chunk->setPopulated(); - $this->chunk = GenericChunk::fastSerialize($chunk); + $this->chunk = $chunk->fastSerialize(); $manager->setChunk($chunk->getX(), $chunk->getZ(), null); @@ -141,7 +141,7 @@ class PopulationTask extends AsyncTask{ continue; } - $this->{"chunk$i"} = $chunks[$i] !== null ? GenericChunk::fastSerialize($chunks[$i]) : null; + $this->{"chunk$i"} = $chunks[$i] !== null ? $chunks[$i]->fastSerialize() : null; } }