readCompressed($data)->mustGetCompoundTag(); }catch(NbtDataException $e){ throw new CorruptedChunkException($e->getMessage(), 0, $e); } if(!$chunk->hasTag("Level")){ throw new CorruptedChunkException("'Level' key is missing from chunk NBT"); } $chunk = $chunk->getCompoundTag("Level"); $subChunks = []; $fullIds = $chunk->hasTag("Blocks", ByteArrayTag::class) ? $chunk->getByteArray("Blocks") : str_repeat("\x00", 32768); $fullData = $chunk->hasTag("Data", ByteArrayTag::class) ? $chunk->getByteArray("Data") : str_repeat("\x00", 16384); for($y = 0; $y < 8; ++$y){ $subChunks[$y] = new SubChunk(BlockLegacyIds::AIR << 4, [SubChunkConverter::convertSubChunkFromLegacyColumn($fullIds, $fullData, $y)]); } if($chunk->hasTag("BiomeColors", IntArrayTag::class)){ $biomeIds = ChunkUtils::convertBiomeColors($chunk->getIntArray("BiomeColors")); //Convert back to original format }elseif($chunk->hasTag("Biomes", ByteArrayTag::class)){ $biomeIds = $chunk->getByteArray("Biomes"); }else{ $biomeIds = ""; } $result = new Chunk( $chunk->getInt("xPos"), $chunk->getInt("zPos"), $subChunks, $chunk->hasTag("Entities", ListTag::class) ? self::getCompoundList("Entities", $chunk->getListTag("Entities")) : [], $chunk->hasTag("TileEntities", ListTag::class) ? self::getCompoundList("TileEntities", $chunk->getListTag("TileEntities")) : [], $biomeIds ); $result->setPopulated($chunk->getByte("TerrainPopulated", 0) !== 0); $result->setGenerated(true); return $result; } protected static function getRegionFileExtension() : string{ return "mcr"; } protected static function getPcWorldFormatVersion() : int{ return 19132; } public function getWorldHeight() : int{ //TODO: add world height options return 128; } }