Пример #1
0
        public void Write(int x, short y, int z, NbtNode node)
        {
            lock (this)
            {
                NbtWriter    writer = new NbtWriter();
                MemoryStream stream = new MemoryStream();
                writer.WriteFile(stream, node);
                byte[] buffer = Compress(stream.ToArray());
                _sizes.Add(buffer.Length);
                int usedSectors = ((buffer.Length + 5) % _sectorSize) == 0
                                      ? (buffer.Length + 5) / _sectorSize
                                      : (buffer.Length + 5) / _sectorSize + 1;
                MoveToHeaderPosition(x, y, z);
                _filePointer.Write(0);

                int sectorPostion = FindFreeSector(usedSectors);
                int sector        = (sectorPostion << 9) | usedSectors;

                MoveToHeaderPosition(x, y, z);

                _filePointer.Write(sector);

                _filePointer.Seek(_headerSize + sectorPostion * _sectorSize, SeekOrigin.Begin);
                _filePointer.Write(buffer.Length);
                _filePointer.Write((byte)2);  //Zlib Compression
                _filePointer.Write(buffer);
                _filePointer.Flush();
            }
        }