use pocketmine\network\mcpe\protocol\serializer\PacketSerializer; use pocketmine\network\mcpe\protocol\types\ChunkCacheBlob; use function count; class ClientCacheMissResponsePacket extends DataPacket implements ClientboundPacket{ public const NETWORK_ID = ProtocolInfo::CLIENT_CACHE_MISS_RESPONSE_PACKET; /** @var ChunkCacheBlob[] */ private $blobs = []; /** * @param ChunkCacheBlob[] $blobs */ public static function create(array $blobs) : self{ //type check (static function(ChunkCacheBlob ...$blobs) : void{})(...$blobs); $result = new self; $result->blobs = $blobs; return $result; } /** * @return ChunkCacheBlob[] */ public function getBlobs() : array{ return $this->blobs; } protected function decodePayload(PacketSerializer $in) : void{ for($i = 0, $count = $in->getUnsignedVarInt(); $i < $count; ++$i){ $hash = $in->getLLong(); $payload = $in->getString(); $this->blobs[] = new ChunkCacheBlob($hash, $payload); } } protected function encodePayload(PacketSerializer $out) : void{ $out->putUnsignedVarInt(count($this->blobs)); foreach($this->blobs as $blob){ $out->putLLong($blob->getHash()); $out->putString($blob->getPayload()); } } public function handle(PacketHandlerInterface $handler) : bool{ return $handler->handleClientCacheMissResponse($this); } }