public override void readPacketData(DataInputStream datainputstream) { xPosition = datainputstream.readInt(); yPosition = datainputstream.readShort(); zPosition = datainputstream.readInt(); xSize = datainputstream.read() + 1; ySize = datainputstream.read() + 1; zSize = datainputstream.read() + 1; chunkSize = datainputstream.readInt(); var abyte0 = new byte[chunkSize]; datainputstream.readFully(abyte0); chunk = new byte[(xSize * ySize * zSize * 5) / 2]; var inflater = new Inflater(); inflater.setInput(abyte0); try { inflater.inflate(chunk); } catch (DataFormatException dataformatexception) { throw new IOException("Bad compressed data format"); } finally { inflater.end(); } }
public NbtNode Read(int x, int z) { lock (this) { MoveToHeaderPosition(x, z); var index = _filePointer.ReadInt32(); if (index == 0) { return(null); // Not yet generated } int usedSectors = index & 0xFF; int sectorOffset = index >> 8; _filePointer.Seek(sectorOffset * 4096, SeekOrigin.Begin); int chunkLength = _filePointer.ReadInt32(); if (chunkLength == -1) { return(null); // Not yet generated } byte compressionMode = _filePointer.ReadByte(); MemoryStream decompressStream; if (compressionMode == 0) { } if (compressionMode == 1) { byte[] buffer = new byte[chunkLength]; _filePointer.Read(buffer, 0, buffer.Length); buffer = Decompress(buffer); decompressStream = new MemoryStream(buffer); } else { byte[] buffer = new byte[chunkLength]; _filePointer.Read(buffer, 0, buffer.Length); var def = new Inflater(); decompressStream = new MemoryStream(); def.setInput(buffer); int i = 0; buffer = new byte[1024 * 1024]; try { while (!def.finished() && (i = def.inflate(buffer)) > 0) { decompressStream.Write(buffer, 0, i); } } catch { return(null); } decompressStream.Seek(0, SeekOrigin.Begin); } return(new NbtReader().ReadNbtFile(decompressStream)); } }