private static float getHeightValue(SimplexNoise noise, int x, int z) { // 使用long避免整数溢出 final long xl = (long) x; final long zl = (long) z; // 修复1:主要平方和计算 float baseDist = Mth.sqrt((float)(xl * xl + zl * zl)); float f = 100.0F - baseDist * 8.0F; f = Mth.clamp(f, -100.0F, 80.0F); int i = x / 2; int j = z / 2; int k = x % 2; int l = z % 2; for (int i1 = -12; i1 <= 12; i1++) { for (int j1 = -12; j1 <= 12; j1++) { // 修复2:循环内的坐标也使用long final long k1 = (long)(i + i1); final long l1 = (long)(j + j1); // 修复3:避免大整数转float的精度损失 float absK1 = Math.abs(k1); float absL1 = Math.abs(l1); if (absK1 > 1e7f) absK1 = (float) Math.floor(absK1 / 1e7f) * 1e7f; if (absL1 > 1e7f) absL1 = (float) Math.floor(absL1 / 1e7f) * 1e7f; if (k1 * k1 + l1 * l1 > 4096L && noise.getValue((double)k1, (double)l1) < -0.9F) { // 修复4:使用处理后的精度值 float f1 = (absK1 * 3439.0F + absL1 * 147.0F) % 13.0F + 9.0F; // 修复5:局部坐标计算安全(值域小,无溢出风险) float dx = (float)(k - i1 * 2); float dz = (float)(l - j1 * 2); float localDist = Mth.sqrt(dx * dx + dz * dz); float f4 = 100.0F - localDist * f1; f4 = Mth.clamp(f4, -100.0F, 80.0F); f = Math.max(f, f4); } } } return f; }