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(); } }