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