public void Write(int x, int z, NbtNode node)
        {
            lock (this)
            {
                NbtWriter    writer = new NbtWriter();
                MemoryStream stream = new MemoryStream();
                writer.WriteFile(stream, node);
                byte[] buffer      = Compress(stream.ToArray());
                int    usedSectors = ((buffer.Length + 5) % 4096) == 0
                                      ? (buffer.Length + 5) / 4096
                                      : (buffer.Length + 5) / 4096 + 1;
                MoveToHeaderPosition(x, z);
                _filePointer.Write(0);

                int sectorPostion = FindFreeSector(usedSectors);
                Console.WriteLine("Saving chunk {0},{1} at position {2}.", x, z, sectorPostion);
                int sector = (sectorPostion << 8) | usedSectors;

                MoveToHeaderPosition(x, z);

                _filePointer.Write(sector);

                _filePointer.Seek(sectorPostion * 4096, SeekOrigin.Begin);
                _filePointer.Write(buffer.Length);
                _filePointer.Write((byte)1);  //GZip Compression
                _filePointer.Write(buffer);
                _filePointer.Flush();
            }
        }
        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();
            }
        }
        public void Write(int x, int z, NbtNode node)
        {
            lock (this)
            {
                NbtWriter writer = new NbtWriter();
                MemoryStream stream = new MemoryStream();
                writer.WriteFile(stream, node);
                byte[] buffer = Compress(stream.ToArray());
                int usedSectors = ((buffer.Length + 5)%4096) == 0
                                      ? (buffer.Length + 5)/4096
                                      : (buffer.Length + 5)/4096 + 1;
                MoveToHeaderPosition(x, z);
                _filePointer.Write(0);

                int sectorPostion = FindFreeSector(usedSectors);
                Console.WriteLine("Saving chunk {0},{1} at position {2}.", x, z, sectorPostion);
                int sector = (sectorPostion << 8) | usedSectors;

                MoveToHeaderPosition(x, z);

                _filePointer.Write(sector);

                _filePointer.Seek(sectorPostion*4096, SeekOrigin.Begin);
                _filePointer.Write(buffer.Length);
                _filePointer.Write((byte) 1); //GZip Compression
                _filePointer.Write(buffer);
                _filePointer.Flush();
            }
        }