aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0405-Fix-missing-chunks-due-to-integer-overflow.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0405-Fix-missing-chunks-due-to-integer-overflow.patch')
-rw-r--r--patches/server/0405-Fix-missing-chunks-due-to-integer-overflow.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/patches/server/0405-Fix-missing-chunks-due-to-integer-overflow.patch b/patches/server/0405-Fix-missing-chunks-due-to-integer-overflow.patch
new file mode 100644
index 0000000000..979e1e474e
--- /dev/null
+++ b/patches/server/0405-Fix-missing-chunks-due-to-integer-overflow.patch
@@ -0,0 +1,29 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: David Slovikosky <[email protected]>
+Date: Tue, 9 Jun 2020 00:10:03 -0700
+Subject: [PATCH] Fix missing chunks due to integer overflow
+
+This patch fixes a bug in the EndIslandDensityFunction class where the distance
+from 0,0 squared overflows the maximum size of an integer. The overflow leads
+to hard chunk borders around 370,000 blocks from 0,0. After this cutoff there
+is a few hundred thousand block gap before end land resuming to generate at
+530,000 blocks from spawn. This is due to the integer flipping back and forth.
+
+The fix for the issue is quite simple, casting chunk coordinates to longs
+allows the distance calculation to avoid overflow and work as intended.
+
+This issue is being tracked in Mojira ticket MC-159283
+
+diff --git a/src/main/java/net/minecraft/world/level/levelgen/DensityFunctions.java b/src/main/java/net/minecraft/world/level/levelgen/DensityFunctions.java
+index 299116c5c4d25c78a2af00bb44c4f51ac04286e8..fac92f37c32e0398ebc05d9a0378446fcabaef1a 100644
+--- a/src/main/java/net/minecraft/world/level/levelgen/DensityFunctions.java
++++ b/src/main/java/net/minecraft/world/level/levelgen/DensityFunctions.java
+@@ -502,7 +502,7 @@ public final class DensityFunctions {
+ int j = z / 2;
+ int k = x % 2;
+ int l = z % 2;
+- float f = 100.0F - Mth.sqrt((float)(x * x + z * z)) * 8.0F;
++ float f = 100.0F - Mth.sqrt((long) x * (long) x + (long) z * (long) z) * 8.0F; // Paper - cast ints to long to avoid integer overflow
+ f = Mth.clamp(f, -100.0F, 80.0F);
+
+ for(int m = -12; m <= 12; ++m) {