diff options
Diffstat (limited to 'patches/server/0374-Fix-missing-chunks-due-to-integer-overflow.patch')
-rw-r--r-- | patches/server/0374-Fix-missing-chunks-due-to-integer-overflow.patch | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/patches/server/0374-Fix-missing-chunks-due-to-integer-overflow.patch b/patches/server/0374-Fix-missing-chunks-due-to-integer-overflow.patch new file mode 100644 index 0000000000..e7af97469b --- /dev/null +++ b/patches/server/0374-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 6171d57a0e5d1aecadfb2c23a72a92d897ca41ee..b09bc1dac649ce9f4826edc1923c843804226993 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/DensityFunctions.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/DensityFunctions.java +@@ -521,7 +521,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++) { |