示例#1
0
        /// <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();
                }
            }
        }