129 $nbt->readCompressed($data, ZLIB_ENCODING_DEFLATE);
131 $chunk = $nbt->getData();
133 if(!isset($chunk->Level) or !($chunk->Level instanceof
CompoundTag)){
134 throw new ChunkException(
"Invalid NBT format");
137 $chunk = $chunk->Level;
140 $fullIds = isset($chunk->Blocks) ? $chunk->Blocks->getValue() : str_repeat(
"\x00", 32768);
141 $fullData = isset($chunk->Data) ? $chunk->Data->getValue() : (str_repeat(
"\x00", 16384));
142 $fullSkyLight = isset($chunk->SkyLight) ? $chunk->SkyLight->getValue() : str_repeat(
"\xff", 16384);
143 $fullBlockLight = isset($chunk->BlockLight) ? $chunk->BlockLight->getValue() : (str_repeat(
"\x00", 16384));
145 for($y = 0; $y < 8; ++$y){
148 for($i = 0; $i < 256; ++$i){
149 $ids .= substr($fullIds, $offset, 16);
154 for($i = 0; $i < 256; ++$i){
155 $data .= substr($fullData, $offset, 8);
160 for($i = 0; $i < 256; ++$i){
161 $skyLight .= substr($fullSkyLight, $offset, 8);
166 for($i = 0; $i < 256; ++$i){
167 $blockLight .= substr($fullBlockLight, $offset, 8);
170 $subChunks[$y] =
new SubChunk($ids, $data, $skyLight, $blockLight);
173 if(isset($chunk->BiomeColors)){
175 }elseif(isset($chunk->Biomes)){
176 $biomeIds = $chunk->Biomes->getValue();
182 if(isset($chunk->HeightMap)){
184 $heightMap = array_values(unpack(
"C*", $chunk->HeightMap->getValue()));
186 $heightMap = $chunk->HeightMap->getValue(); #blameshoghicp
194 isset($chunk->Entities) ? $chunk->Entities->getValue() : [],
195 isset($chunk->TileEntities) ? $chunk->TileEntities->getValue() : [],
199 $result->setLightPopulated(isset($chunk->LightPopulated) ? ((
bool) $chunk->LightPopulated->getValue()) :
false);
200 $result->setPopulated(isset($chunk->TerrainPopulated) ? ((
bool) $chunk->TerrainPopulated->getValue()) :
false);
201 $result->setGenerated(
true);
203 }
catch(\Throwable $e){