/// <summary> /// Generates object from unzipped chunk data. Do not use with the MemoryStreams held in region object. /// </summary> /// <param name="data">Unzipped chunk data in form of a memory stream.</param> public void Read(MemoryStream data) { BinaryReader reader = new BinaryReader(data); xm = reader.ReadInt32(); mm = reader.ReadInt32(); rm = reader.ReadInt32(); savedInWorldTicks = reader.ReadUInt64(); for (int i = 0; i < 64; ++i) { bool flag = reader.ReadBoolean(); if (flag) { cbl[i] = new ChunkBlockLayer(); cbl[i].Read(reader); } } cbc = new ChunkBlockChannel(); cbc.Read(reader); reader.Read(im, 0, 256); reader.Read(terrainHeight, 0, 256); reader.Read(biomeId, 0, 256); reader.Read(biomeIntensity, 0, 1536); dominantBiome = reader.ReadByte(); areaMasterDominantBiome = reader.ReadByte(); int chunkCustomDataCount = (int)reader.ReadUInt16(); for (int j = 0; j < chunkCustomDataCount; ++j) { ChunkCustomData chunkCustomData = new ChunkCustomData(); chunkCustomData.Read(reader); chunkCustomDataDictionary[chunkCustomData.key] = chunkCustomData; } reader.Read(pr, 0, 256); reader.Read(jr, 0, 256); reader.Read(fr, 0, 256); cm.Read(reader); vm.Read(reader); gm.Read(reader); km.Read(reader); needsLightCalculation = reader.ReadBoolean(); int entityCount = reader.ReadInt32(); for (int k = 0; k < entityCount; ++k) { EntityCreationData entityCreationData = new EntityCreationData(); entityCreationData.Read(reader); entityCreationDataList.Add(entityCreationData); } int tileEntityCount = reader.ReadInt32(); for (int l = 0; l < tileEntityCount; ++l) { TileEntityType type = (TileEntityType)reader.ReadInt32(); TileEntity tileEntity = TileEntity.Instantiate(type); tileEntity.Read(reader); tileEntityDictionary[tileEntity.localChunkPosition] = tileEntity; } int entitySpawnerCount = (int)reader.ReadUInt16(); entitySpawnerSaveVersion = (uint)reader.ReadByte(); for (int m = 0; m < entitySpawnerCount; ++m) { EntitySpawner entitySpawner = new EntitySpawner(); entitySpawner.Read(reader); entitySpawnerList.Add(entitySpawner); } bool flag2 = reader.ReadBoolean(); if (flag2) { ur = new ushort[16]; for (int n = 0; n < 16; ++n) { ur[n] = reader.ReadUInt16(); } } }