Skip to content

Commit 4c8b9d5

Browse files
fix: missing NBT tile entity data for clipboards on disk (#3389)
1 parent dbd33d6 commit 4c8b9d5

File tree

1 file changed

+18
-3
lines changed
  • worldedit-core/src/main/java/com/fastasyncworldedit/core/util

1 file changed

+18
-3
lines changed

worldedit-core/src/main/java/com/fastasyncworldedit/core/util/MainUtil.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import net.jpountz.lz4.LZ4Compressor;
3434
import net.jpountz.lz4.LZ4Factory;
3535
import net.jpountz.lz4.LZ4FastDecompressor;
36+
import net.jpountz.xxhash.XXHashFactory;
3637
import org.apache.logging.log4j.Logger;
3738
import org.enginehub.linbus.tree.LinCompoundTag;
3839

@@ -103,6 +104,7 @@ public class MainUtil {
103104
private static final HttpClient HTTP_CLIENT = HttpClient.newBuilder()
104105
.followRedirects(HttpClient.Redirect.NORMAL)
105106
.build();
107+
private static final int LZ4_DEFAULT_SEED = 0x9747b28c;
106108

107109
public static List<String> filter(String prefix, List<String> suggestions) {
108110
if (prefix.isEmpty()) {
@@ -299,14 +301,27 @@ public static FaweOutputStream getCompressedOS(OutputStream os, int amount, int
299301
LZ4Factory factory = LZ4Factory.fastestInstance();
300302
int fastAmount = 1 + ((amount - 1) % 3);
301303
for (int i = 0; i < fastAmount; i++) {
302-
os = new LZ4BlockOutputStream(os, buffer, factory.fastCompressor());
304+
// (syncFlush can't be provided without providing explicit Checksum instance)
305+
//noinspection resource - default LZ4 implementation doesn't close Checksum
306+
os = new LZ4BlockOutputStream(
307+
os, buffer, factory.fastCompressor(),
308+
XXHashFactory.fastestInstance().newStreamingHash32(LZ4_DEFAULT_SEED).asChecksum(), true
309+
);
303310
}
304311
int highAmount = amount > 3 ? 1 : 0;
305312
for (int i = 0; i < highAmount; i++) {
306313
if (amount == 9) {
307-
os = new LZ4BlockOutputStream(os, buffer, factory.highCompressor(17));
314+
//noinspection resource - default LZ4 implementation doesn't close Checksum
315+
os = new LZ4BlockOutputStream(
316+
os, buffer, factory.highCompressor(17),
317+
XXHashFactory.fastestInstance().newStreamingHash32(LZ4_DEFAULT_SEED).asChecksum(), true
318+
);
308319
} else {
309-
os = new LZ4BlockOutputStream(os, buffer, factory.highCompressor());
320+
//noinspection resource - default LZ4 implementation doesn't close Checksum
321+
os = new LZ4BlockOutputStream(
322+
os, buffer, factory.highCompressor(),
323+
XXHashFactory.fastestInstance().newStreamingHash32(LZ4_DEFAULT_SEED).asChecksum(), true
324+
);
310325
}
311326
}
312327
os = new FastBufferedOutputStream(os, buffer);

0 commit comments

Comments
 (0)