From dab4c6e16b5747b0021a3f6f3767ea739a199db9 Mon Sep 17 00:00:00 2001 From: Toon Schoenmakers Date: Mon, 12 Oct 2020 20:34:30 +0200 Subject: [PATCH] Zero pad chunks before saving them to the disk This makes the unused data inside region files more repeatable. Which will result in better compression in case the entire world directory is compressed (like in backups). Which will naturally result in smaller backups. --- ...hunks-before-saving-them-to-the-disk.patch | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Spigot-Server-Patches/Zero-pad-chunks-before-saving-them-to-the-disk.patch diff --git a/Spigot-Server-Patches/Zero-pad-chunks-before-saving-them-to-the-disk.patch b/Spigot-Server-Patches/Zero-pad-chunks-before-saving-them-to-the-disk.patch new file mode 100644 index 0000000000..3b03b436b5 --- /dev/null +++ b/Spigot-Server-Patches/Zero-pad-chunks-before-saving-them-to-the-disk.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Toon Schoenmakers +Date: Mon, 12 Oct 2020 18:59:12 +0200 +Subject: [PATCH] Zero pad chunks before saving them to the disk + +This makes the unused data inside region files more repeatable. +Which will result in better compression in case the entire world directory +is compressed (like in backups). Which will naturally result in smaller backups. + +diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/RegionFile.java ++++ b/src/main/java/net/minecraft/server/RegionFile.java +@@ -0,0 +0,0 @@ public class RegionFile implements AutoCloseable { + } + + } ++ private static final ByteBuffer zero = ByteBuffer.allocateDirect(4096); + // Paper end + class ChunkBuffer extends ByteArrayOutputStream { + + private final ChunkCoordIntPair b; + + public ChunkBuffer(ChunkCoordIntPair chunkcoordintpair) { +- super(8096); ++ super(8192); // Paper + super.write(0); + super.write(0); + super.write(0); +@@ -0,0 +0,0 @@ public class RegionFile implements AutoCloseable { + ByteBuffer bytebuffer = ByteBuffer.wrap(this.buf, 0, this.count); + + bytebuffer.putInt(0, this.count - 5 + 1); ++ ++ // Paper start ++ int size = (this.count + 4095) & ~4095; ++ ++ // increase the limit to be the next chunk of 4096 ++ bytebuffer.limit(size); ++ ++ // now just fill the rest with zeros from our static buffer ++ bytebuffer.put(zero); ++ // Paper end ++ + RegionFile.this.a(this.b, bytebuffer); + } + }