Beans
This commit is contained in:
@@ -344,28 +344,7 @@ public class WorldImporter implements IDataImporter {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
try (var decompressedData = this.decompress(b, new InputStream() {
|
try (var decompressedData = this.decompress(b, data)) {
|
||||||
private long offset = 0;
|
|
||||||
@Override
|
|
||||||
public int read() {
|
|
||||||
return MemoryUtil.memGetByte(data.address + (this.offset++)) & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int read(byte[] b, int off, int len) {
|
|
||||||
len = Math.min(len, this.available());
|
|
||||||
if (len == 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
UnsafeUtil.memcpy(data.address+this.offset, len, b, off); this.offset+=len;
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int available() {
|
|
||||||
return (int) (data.size-this.offset);
|
|
||||||
}
|
|
||||||
})) {
|
|
||||||
if (decompressedData == null) {
|
if (decompressedData == null) {
|
||||||
Logger.error("Error decompressing chunk data");
|
Logger.error("Error decompressing chunk data");
|
||||||
} else {
|
} else {
|
||||||
@@ -388,13 +367,38 @@ public class WorldImporter implements IDataImporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataInputStream decompress(byte flags, InputStream stream) throws IOException {
|
private static InputStream createInputStream(MemoryBuffer data) {
|
||||||
|
return new InputStream() {
|
||||||
|
private long offset = 0;
|
||||||
|
@Override
|
||||||
|
public int read() {
|
||||||
|
return MemoryUtil.memGetByte(data.address + (this.offset++)) & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read(byte[] b, int off, int len) {
|
||||||
|
len = Math.min(len, this.available());
|
||||||
|
if (len == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
UnsafeUtil.memcpy(data.address+this.offset, len, b, off); this.offset+=len;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int available() {
|
||||||
|
return (int) (data.size-this.offset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataInputStream decompress(byte flags, MemoryBuffer stream) throws IOException {
|
||||||
ChunkCompressionFormat chunkStreamVersion = ChunkCompressionFormat.get(flags);
|
ChunkCompressionFormat chunkStreamVersion = ChunkCompressionFormat.get(flags);
|
||||||
if (chunkStreamVersion == null) {
|
if (chunkStreamVersion == null) {
|
||||||
Logger.error("Chunk has invalid chunk stream version");
|
Logger.error("Chunk has invalid chunk stream version");
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return new DataInputStream(chunkStreamVersion.wrap(stream));
|
return new DataInputStream(chunkStreamVersion.wrap(createInputStream(stream)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user