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);