25    public function __construct(
 
   27        private int $requestResult,
 
   28        private string $terrainData,
 
   35    public function getRequestResult() : 
int{ 
return $this->requestResult; }
 
   37    public function getTerrainData() : 
string{ 
return $this->terrainData; }
 
   43    public static function read(ByteBufferReader $in, 
bool $cacheEnabled) : 
self{
 
   44        $offset = SubChunkPositionOffset::read($in);
 
   46        $requestResult = Byte::readUnsigned($in);
 
   48        $data = !$cacheEnabled || $requestResult !== SubChunkRequestResult::SUCCESS_ALL_AIR ? CommonTypes::getString($in) : 
"";
 
   50        $heightMapDataType = Byte::readUnsigned($in);
 
   51        $heightMapData = match ($heightMapDataType) {
 
   52            SubChunkPacketHeightMapType::NO_DATA => 
null,
 
   53            SubChunkPacketHeightMapType::DATA => SubChunkPacketHeightMapInfo::read($in),
 
   54            SubChunkPacketHeightMapType::ALL_TOO_HIGH => SubChunkPacketHeightMapInfo::allTooHigh(),
 
   55            SubChunkPacketHeightMapType::ALL_TOO_LOW => SubChunkPacketHeightMapInfo::allTooLow(),
 
   59        $renderHeightMapDataType = Byte::readUnsigned($in);
 
   60        $renderHeightMapData = match ($renderHeightMapDataType) {
 
   61            SubChunkPacketHeightMapType::NO_DATA => 
null,
 
   62            SubChunkPacketHeightMapType::DATA => SubChunkPacketHeightMapInfo::read($in),
 
   63            SubChunkPacketHeightMapType::ALL_TOO_HIGH => SubChunkPacketHeightMapInfo::allTooHigh(),
 
   64            SubChunkPacketHeightMapType::ALL_TOO_LOW => SubChunkPacketHeightMapInfo::allTooLow(),
 
   65            SubChunkPacketHeightMapType::ALL_COPIED => $heightMapData,
 
   66            default => 
throw new PacketDecodeException(
"Unknown render heightmap data type $renderHeightMapDataType")
 
   78    public function write(ByteBufferWriter $out, 
bool $cacheEnabled) : 
void{
 
   79        $this->offset->write($out);
 
   81        Byte::writeUnsigned($out, $this->requestResult);
 
   83        if(!$cacheEnabled || $this->requestResult !== SubChunkRequestResult::SUCCESS_ALL_AIR){
 
   84            CommonTypes::putString($out, $this->terrainData);
 
   87        if($this->heightMap === 
null){
 
   88            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::NO_DATA);
 
   89        }elseif($this->heightMap->isAllTooLow()){
 
   90            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::ALL_TOO_LOW);
 
   91        }elseif($this->heightMap->isAllTooHigh()){
 
   92            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::ALL_TOO_HIGH);
 
   94            $heightMapData = $this->heightMap; 
 
   95            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::DATA);
 
   96            $heightMapData->write($out);
 
   99        if($this->renderHeightMap === 
null){
 
  100            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::ALL_COPIED);
 
  101        }elseif($this->renderHeightMap->isAllTooLow()){
 
  102            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::ALL_TOO_LOW);
 
  103        }elseif($this->renderHeightMap->isAllTooHigh()){
 
  104            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::ALL_TOO_HIGH);
 
  106            $renderHeightMapData = $this->renderHeightMap; 
 
  107            Byte::writeUnsigned($out, SubChunkPacketHeightMapType::DATA);
 
  108            $renderHeightMapData->write($out);