mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-19 14:59:25 +00:00
120 lines
5.5 KiB
Diff
120 lines
5.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com>
|
|
Date: Sun, 6 Jul 2025 03:24:48 +0300
|
|
Subject: [PATCH] Carpet-Fixes: Optimized getBiome method
|
|
|
|
Original license: MIT
|
|
Original project: https://github.com/fxmorin/carpet-fixes
|
|
|
|
diff --git a/net/minecraft/world/level/biome/BiomeManager.java b/net/minecraft/world/level/biome/BiomeManager.java
|
|
index 73962e79a0f3d892e3155443a1b84508b0f4042e..c5fa1d7613410593f5b430968398c4ab1b40a98b 100644
|
|
--- a/net/minecraft/world/level/biome/BiomeManager.java
|
|
+++ b/net/minecraft/world/level/biome/BiomeManager.java
|
|
@@ -14,6 +14,7 @@ public class BiomeManager {
|
|
private static final int ZOOM_MASK = 3;
|
|
private final BiomeManager.NoiseBiomeSource noiseBiomeSource;
|
|
private final long biomeZoomSeed;
|
|
+ private static final double maxOffset = 0.4500000001D; // DivineMC - Carpet-Fixes: Optimized getBiome method
|
|
|
|
public BiomeManager(BiomeManager.NoiseBiomeSource noiseBiomeSource, long biomeZoomSeed) {
|
|
this.noiseBiomeSource = noiseBiomeSource;
|
|
@@ -29,39 +30,68 @@ public class BiomeManager {
|
|
}
|
|
|
|
public Holder<Biome> getBiome(BlockPos pos) {
|
|
- int i = pos.getX() - 2;
|
|
- int i1 = pos.getY() - 2;
|
|
- int i2 = pos.getZ() - 2;
|
|
- int i3 = i >> 2;
|
|
- int i4 = i1 >> 2;
|
|
- int i5 = i2 >> 2;
|
|
- double d = (i & 3) / 4.0;
|
|
- double d1 = (i1 & 3) / 4.0;
|
|
- double d2 = (i2 & 3) / 4.0;
|
|
- int i6 = 0;
|
|
- double d3 = Double.POSITIVE_INFINITY;
|
|
-
|
|
- for (int i7 = 0; i7 < 8; i7++) {
|
|
- boolean flag = (i7 & 4) == 0;
|
|
- boolean flag1 = (i7 & 2) == 0;
|
|
- boolean flag2 = (i7 & 1) == 0;
|
|
- int i8 = flag ? i3 : i3 + 1;
|
|
- int i9 = flag1 ? i4 : i4 + 1;
|
|
- int i10 = flag2 ? i5 : i5 + 1;
|
|
- double d4 = flag ? d : d - 1.0;
|
|
- double d5 = flag1 ? d1 : d1 - 1.0;
|
|
- double d6 = flag2 ? d2 : d2 - 1.0;
|
|
- double fiddledDistance = getFiddledDistance(this.biomeZoomSeed, i8, i9, i10, d4, d5, d6);
|
|
- if (d3 > fiddledDistance) {
|
|
- i6 = i7;
|
|
- d3 = fiddledDistance;
|
|
+ // DivineMC start - Carpet-Fixes: Optimized getBiome method
|
|
+ int xMinus2 = pos.getX() - 2;
|
|
+ int yMinus2 = pos.getY() - 2;
|
|
+ int zMinus2 = pos.getZ() - 2;
|
|
+ int x = xMinus2 >> 2;
|
|
+ int y = yMinus2 >> 2;
|
|
+ int z = zMinus2 >> 2;
|
|
+ double quartX = (double) (xMinus2 & 3) / 4.0;
|
|
+ double quartY = (double) (yMinus2 & 3) / 4.0;
|
|
+ double quartZ = (double) (zMinus2 & 3) / 4.0;
|
|
+ int smallestX = 0;
|
|
+ double smallestDist = Double.POSITIVE_INFINITY;
|
|
+
|
|
+ for (int biomeX = 0; biomeX < 8; ++biomeX) {
|
|
+ boolean everyOtherQuad = (biomeX & 4) == 0;
|
|
+ boolean everyOtherPair = (biomeX & 2) == 0;
|
|
+ boolean everyOther = (biomeX & 1) == 0;
|
|
+ double quartXX = everyOtherQuad ? quartX : quartX - 1.0;
|
|
+ double quartYY = everyOtherPair ? quartY : quartY - 1.0;
|
|
+ double quartZZ = everyOther ? quartZ : quartZ - 1.0;
|
|
+
|
|
+ double maxQuartYY = 0.0, maxQuartZZ = 0.0;
|
|
+ if (biomeX != 0) {
|
|
+ maxQuartYY = Mth.square(Math.max(quartYY + maxOffset, Math.abs(quartYY - maxOffset)));
|
|
+ maxQuartZZ = Mth.square(Math.max(quartZZ + maxOffset, Math.abs(quartZZ - maxOffset)));
|
|
+ double maxQuartXX = Mth.square(Math.max(quartXX + maxOffset, Math.abs(quartXX - maxOffset)));
|
|
+ if (smallestDist < maxQuartXX + maxQuartYY + maxQuartZZ) continue;
|
|
+ }
|
|
+
|
|
+ int xx = everyOtherQuad ? x : x + 1;
|
|
+ int yy = everyOtherPair ? y : y + 1;
|
|
+ int zz = everyOther ? z : z + 1;
|
|
+
|
|
+ long seed = LinearCongruentialGenerator.next(this.biomeZoomSeed, xx);
|
|
+ seed = LinearCongruentialGenerator.next(seed, yy);
|
|
+ seed = LinearCongruentialGenerator.next(seed, zz);
|
|
+ seed = LinearCongruentialGenerator.next(seed, xx);
|
|
+ seed = LinearCongruentialGenerator.next(seed, yy);
|
|
+ seed = LinearCongruentialGenerator.next(seed, zz);
|
|
+ double offsetX = getFiddle(seed);
|
|
+ double sqrX = Mth.square(quartXX + offsetX);
|
|
+ if (biomeX != 0 && smallestDist < sqrX + maxQuartYY + maxQuartZZ) continue;
|
|
+ seed = LinearCongruentialGenerator.next(seed, this.biomeZoomSeed);
|
|
+ double offsetY = getFiddle(seed);
|
|
+ double sqrY = Mth.square(quartYY + offsetY);
|
|
+ if (biomeX != 0 && smallestDist < sqrX + sqrY + maxQuartZZ) continue;
|
|
+ seed = LinearCongruentialGenerator.next(seed, this.biomeZoomSeed);
|
|
+ double offsetZ = getFiddle(seed);
|
|
+ double biomeDist = sqrX + sqrY + Mth.square(quartZZ + offsetZ);
|
|
+
|
|
+ if (smallestDist > biomeDist) {
|
|
+ smallestX = biomeX;
|
|
+ smallestDist = biomeDist;
|
|
}
|
|
}
|
|
|
|
- int i7x = (i6 & 4) == 0 ? i3 : i3 + 1;
|
|
- int i11 = (i6 & 2) == 0 ? i4 : i4 + 1;
|
|
- int i12 = (i6 & 1) == 0 ? i5 : i5 + 1;
|
|
- return this.noiseBiomeSource.getNoiseBiome(i7x, i11, i12);
|
|
+ return this.noiseBiomeSource.getNoiseBiome(
|
|
+ (smallestX & 4) == 0 ? x : x + 1,
|
|
+ (smallestX & 2) == 0 ? y : y + 1,
|
|
+ (smallestX & 1) == 0 ? z : z + 1
|
|
+ );
|
|
+ // DivineMC end - Carpet-Fixes: Optimized getBiome method
|
|
}
|
|
|
|
public Holder<Biome> getNoiseBiomeAtPosition(double x, double y, double z) {
|