public static ChunkData Deserialize(ref SpanReader br, bool isOverworld) { var result = new ChunkData { ChunkX = br.ReadAsInt(), ChunkZ = br.ReadAsInt(), FullChunk = br.ReadAsBoolean(), PrimaryBitMask = br.ReadAsVarInt(out _), Heightmaps = br.ReadAsNbtTag(), }; var hasBioms = result.FullChunk; if (hasBioms) { result.Biomes = br.ReadAsIntArray(1024); } result.Size = br.ReadAsVarInt(out _); var dataReader = br.ReadAsSubReader((int)result.Size); var data = new List <ChunkSection>(); while (!dataReader.IsCosumed) { data.Add(ChunkSection.Deserialize(ref dataReader, isOverworld)); } result.Data = data.ToArray(); result.NumberOfBlockEntities = br.ReadAsVarInt(out _); result.BlockEntities = br.ReadAsNbtTagArray((int)result.NumberOfBlockEntities); return(result); }