Code/net/minecraft/util/Mth.java

750 lines
26 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.util;
import java.util.Locale;
import java.util.UUID;
import java.util.function.IntPredicate;
import java.util.stream.IntStream;
import net.minecraft.Util;
import net.minecraft.core.Vec3i;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import org.apache.commons.lang3.math.Fraction;
import org.apache.commons.lang3.math.NumberUtils;
import org.joml.Quaternionf;
import org.joml.Vector3f;
public class Mth {
private static final long UUID_VERSION = 61440L;
private static final long UUID_VERSION_TYPE_4 = 16384L;
private static final long UUID_VARIANT = -4611686018427387904L;
private static final long UUID_VARIANT_2 = Long.MIN_VALUE;
public static final float PI = (float) Math.PI;
public static final float HALF_PI = (float) (Math.PI / 2);
public static final float TWO_PI = (float) (Math.PI * 2);
public static final float DEG_TO_RAD = (float) (Math.PI / 180.0);
public static final float RAD_TO_DEG = 180.0F / (float)Math.PI;
public static final float EPSILON = 1.0E-5F;
public static final float SQRT_OF_TWO = sqrt(2.0F);
private static final float SIN_SCALE = 10430.378F;
public static final Vector3f Y_AXIS = new Vector3f(0.0F, 1.0F, 0.0F);
public static final Vector3f X_AXIS = new Vector3f(1.0F, 0.0F, 0.0F);
public static final Vector3f Z_AXIS = new Vector3f(0.0F, 0.0F, 1.0F);
private static final float[] SIN = Util.make(new float[65536], p_14077_ -> {
for (int i = 0; i < p_14077_.length; i++) {
p_14077_[i] = (float)Math.sin(i * Math.PI * 2.0 / 65536.0);
}
});
private static final RandomSource RANDOM = RandomSource.createThreadSafe();
private static final int[] MULTIPLY_DE_BRUIJN_BIT_POSITION = new int[]{
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
};
private static final double ONE_SIXTH = 0.16666666666666666;
private static final int FRAC_EXP = 8;
private static final int LUT_SIZE = 257;
private static final double FRAC_BIAS = Double.longBitsToDouble(4805340802404319232L);
private static final double[] ASIN_TAB = new double[257];
private static final double[] COS_TAB = new double[257];
public static float sin(float p_14032_) {
return SIN[(int)(p_14032_ * 10430.378F) & 65535];
}
public static float cos(float p_14090_) {
return SIN[(int)(p_14090_ * 10430.378F + 16384.0F) & 65535];
}
public static float sqrt(float p_14117_) {
return (float)Math.sqrt(p_14117_);
}
public static int floor(float p_14144_) {
int i = (int)p_14144_;
return p_14144_ < i ? i - 1 : i;
}
public static int floor(double p_14108_) {
int i = (int)p_14108_;
return p_14108_ < i ? i - 1 : i;
}
public static long lfloor(double p_14135_) {
long i = (long)p_14135_;
return p_14135_ < i ? i - 1L : i;
}
public static float abs(float p_14155_) {
return Math.abs(p_14155_);
}
public static int abs(int p_14041_) {
return Math.abs(p_14041_);
}
public static int ceil(float p_14168_) {
int i = (int)p_14168_;
return p_14168_ > i ? i + 1 : i;
}
public static int ceil(double p_14166_) {
int i = (int)p_14166_;
return p_14166_ > i ? i + 1 : i;
}
public static int clamp(int p_14046_, int p_14047_, int p_14048_) {
return Math.min(Math.max(p_14046_, p_14047_), p_14048_);
}
public static long clamp(long p_300696_, long p_298059_, long p_299237_) {
return Math.min(Math.max(p_300696_, p_298059_), p_299237_);
}
public static float clamp(float p_14037_, float p_14038_, float p_14039_) {
return p_14037_ < p_14038_ ? p_14038_ : Math.min(p_14037_, p_14039_);
}
public static double clamp(double p_14009_, double p_14010_, double p_14011_) {
return p_14009_ < p_14010_ ? p_14010_ : Math.min(p_14009_, p_14011_);
}
public static double clampedLerp(double p_14086_, double p_14087_, double p_14088_) {
if (p_14088_ < 0.0) {
return p_14086_;
} else {
return p_14088_ > 1.0 ? p_14087_ : lerp(p_14088_, p_14086_, p_14087_);
}
}
public static float clampedLerp(float p_144921_, float p_144922_, float p_144923_) {
if (p_144923_ < 0.0F) {
return p_144921_;
} else {
return p_144923_ > 1.0F ? p_144922_ : lerp(p_144923_, p_144921_, p_144922_);
}
}
public static double absMax(double p_14006_, double p_14007_) {
if (p_14006_ < 0.0) {
p_14006_ = -p_14006_;
}
if (p_14007_ < 0.0) {
p_14007_ = -p_14007_;
}
return Math.max(p_14006_, p_14007_);
}
public static int floorDiv(int p_14043_, int p_14044_) {
return Math.floorDiv(p_14043_, p_14044_);
}
public static int nextInt(RandomSource p_216272_, int p_216273_, int p_216274_) {
return p_216273_ >= p_216274_ ? p_216273_ : p_216272_.nextInt(p_216274_ - p_216273_ + 1) + p_216273_;
}
public static float nextFloat(RandomSource p_216268_, float p_216269_, float p_216270_) {
return p_216269_ >= p_216270_ ? p_216269_ : p_216268_.nextFloat() * (p_216270_ - p_216269_) + p_216269_;
}
public static double nextDouble(RandomSource p_216264_, double p_216265_, double p_216266_) {
return p_216265_ >= p_216266_ ? p_216265_ : p_216264_.nextDouble() * (p_216266_ - p_216265_) + p_216265_;
}
public static boolean equal(float p_14034_, float p_14035_) {
return Math.abs(p_14035_ - p_14034_) < 1.0E-5F;
}
public static boolean equal(double p_14083_, double p_14084_) {
return Math.abs(p_14084_ - p_14083_) < 1.0E-5F;
}
public static int positiveModulo(int p_14101_, int p_14102_) {
return Math.floorMod(p_14101_, p_14102_);
}
public static float positiveModulo(float p_14092_, float p_14093_) {
return (p_14092_ % p_14093_ + p_14093_) % p_14093_;
}
public static double positiveModulo(double p_14110_, double p_14111_) {
return (p_14110_ % p_14111_ + p_14111_) % p_14111_;
}
public static boolean isMultipleOf(int p_265754_, int p_265543_) {
return p_265754_ % p_265543_ == 0;
}
public static byte packDegrees(float p_362809_) {
return (byte)floor(p_362809_ * 256.0F / 360.0F);
}
public static float unpackDegrees(byte p_363805_) {
return p_363805_ * 360 / 256.0F;
}
public static int wrapDegrees(int p_14099_) {
int i = p_14099_ % 360;
if (i >= 180) {
i -= 360;
}
if (i < -180) {
i += 360;
}
return i;
}
public static float wrapDegrees(long p_367823_) {
float f = (float)(p_367823_ % 360L);
if (f >= 180.0F) {
f -= 360.0F;
}
if (f < -180.0F) {
f += 360.0F;
}
return f;
}
public static float wrapDegrees(float p_14178_) {
float f = p_14178_ % 360.0F;
if (f >= 180.0F) {
f -= 360.0F;
}
if (f < -180.0F) {
f += 360.0F;
}
return f;
}
public static double wrapDegrees(double p_14176_) {
double d0 = p_14176_ % 360.0;
if (d0 >= 180.0) {
d0 -= 360.0;
}
if (d0 < -180.0) {
d0 += 360.0;
}
return d0;
}
public static float degreesDifference(float p_14119_, float p_14120_) {
return wrapDegrees(p_14120_ - p_14119_);
}
public static float degreesDifferenceAbs(float p_14146_, float p_14147_) {
return abs(degreesDifference(p_14146_, p_14147_));
}
public static float rotateIfNecessary(float p_14095_, float p_14096_, float p_14097_) {
float f = degreesDifference(p_14095_, p_14096_);
float f1 = clamp(f, -p_14097_, p_14097_);
return p_14096_ - f1;
}
public static float approach(float p_14122_, float p_14123_, float p_14124_) {
p_14124_ = abs(p_14124_);
return p_14122_ < p_14123_ ? clamp(p_14122_ + p_14124_, p_14122_, p_14123_) : clamp(p_14122_ - p_14124_, p_14123_, p_14122_);
}
public static float approachDegrees(float p_14149_, float p_14150_, float p_14151_) {
float f = degreesDifference(p_14149_, p_14150_);
return approach(p_14149_, p_14149_ + f, p_14151_);
}
public static int getInt(String p_14060_, int p_14061_) {
return NumberUtils.toInt(p_14060_, p_14061_);
}
public static int smallestEncompassingPowerOfTwo(int p_14126_) {
int i = p_14126_ - 1;
i |= i >> 1;
i |= i >> 2;
i |= i >> 4;
i |= i >> 8;
i |= i >> 16;
return i + 1;
}
public static boolean isPowerOfTwo(int p_14153_) {
return p_14153_ != 0 && (p_14153_ & p_14153_ - 1) == 0;
}
public static int ceillog2(int p_14164_) {
p_14164_ = isPowerOfTwo(p_14164_) ? p_14164_ : smallestEncompassingPowerOfTwo(p_14164_);
return MULTIPLY_DE_BRUIJN_BIT_POSITION[(int)(p_14164_ * 125613361L >> 27) & 31];
}
public static int log2(int p_14174_) {
return ceillog2(p_14174_) - (isPowerOfTwo(p_14174_) ? 0 : 1);
}
public static float frac(float p_14188_) {
return p_14188_ - floor(p_14188_);
}
public static double frac(double p_14186_) {
return p_14186_ - lfloor(p_14186_);
}
@Deprecated
public static long getSeed(Vec3i p_14058_) {
return getSeed(p_14058_.getX(), p_14058_.getY(), p_14058_.getZ());
}
@Deprecated
public static long getSeed(int p_14131_, int p_14132_, int p_14133_) {
long i = p_14131_ * 3129871 ^ p_14133_ * 116129781L ^ p_14132_;
i = i * i * 42317861L + i * 11L;
return i >> 16;
}
public static UUID createInsecureUUID(RandomSource p_216262_) {
long i = p_216262_.nextLong() & -61441L | 16384L;
long j = p_216262_.nextLong() & 4611686018427387903L | Long.MIN_VALUE;
return new UUID(i, j);
}
public static UUID createInsecureUUID() {
return createInsecureUUID(RANDOM);
}
public static double inverseLerp(double p_14113_, double p_14114_, double p_14115_) {
return (p_14113_ - p_14114_) / (p_14115_ - p_14114_);
}
public static float inverseLerp(float p_184656_, float p_184657_, float p_184658_) {
return (p_184656_ - p_184657_) / (p_184658_ - p_184657_);
}
public static boolean rayIntersectsAABB(Vec3 p_144889_, Vec3 p_144890_, AABB p_144891_) {
double d0 = (p_144891_.minX + p_144891_.maxX) * 0.5;
double d1 = (p_144891_.maxX - p_144891_.minX) * 0.5;
double d2 = p_144889_.x - d0;
if (Math.abs(d2) > d1 && d2 * p_144890_.x >= 0.0) {
return false;
} else {
double d3 = (p_144891_.minY + p_144891_.maxY) * 0.5;
double d4 = (p_144891_.maxY - p_144891_.minY) * 0.5;
double d5 = p_144889_.y - d3;
if (Math.abs(d5) > d4 && d5 * p_144890_.y >= 0.0) {
return false;
} else {
double d6 = (p_144891_.minZ + p_144891_.maxZ) * 0.5;
double d7 = (p_144891_.maxZ - p_144891_.minZ) * 0.5;
double d8 = p_144889_.z - d6;
if (Math.abs(d8) > d7 && d8 * p_144890_.z >= 0.0) {
return false;
} else {
double d9 = Math.abs(p_144890_.x);
double d10 = Math.abs(p_144890_.y);
double d11 = Math.abs(p_144890_.z);
double d12 = p_144890_.y * d8 - p_144890_.z * d5;
if (Math.abs(d12) > d4 * d11 + d7 * d10) {
return false;
} else {
d12 = p_144890_.z * d2 - p_144890_.x * d8;
if (Math.abs(d12) > d1 * d11 + d7 * d9) {
return false;
} else {
d12 = p_144890_.x * d5 - p_144890_.y * d2;
return Math.abs(d12) < d1 * d10 + d4 * d9;
}
}
}
}
}
}
public static double atan2(double p_14137_, double p_14138_) {
double d0 = p_14138_ * p_14138_ + p_14137_ * p_14137_;
if (Double.isNaN(d0)) {
return Double.NaN;
} else {
boolean flag = p_14137_ < 0.0;
if (flag) {
p_14137_ = -p_14137_;
}
boolean flag1 = p_14138_ < 0.0;
if (flag1) {
p_14138_ = -p_14138_;
}
boolean flag2 = p_14137_ > p_14138_;
if (flag2) {
double d1 = p_14138_;
p_14138_ = p_14137_;
p_14137_ = d1;
}
double d9 = fastInvSqrt(d0);
p_14138_ *= d9;
p_14137_ *= d9;
double d2 = FRAC_BIAS + p_14137_;
int i = (int)Double.doubleToRawLongBits(d2);
double d3 = ASIN_TAB[i];
double d4 = COS_TAB[i];
double d5 = d2 - FRAC_BIAS;
double d6 = p_14137_ * d4 - p_14138_ * d5;
double d7 = (6.0 + d6 * d6) * d6 * 0.16666666666666666;
double d8 = d3 + d7;
if (flag2) {
d8 = (Math.PI / 2) - d8;
}
if (flag1) {
d8 = Math.PI - d8;
}
if (flag) {
d8 = -d8;
}
return d8;
}
}
public static float invSqrt(float p_265060_) {
return org.joml.Math.invsqrt(p_265060_);
}
public static double invSqrt(double p_265088_) {
return org.joml.Math.invsqrt(p_265088_);
}
@Deprecated
public static double fastInvSqrt(double p_14194_) {
double d0 = 0.5 * p_14194_;
long i = Double.doubleToRawLongBits(p_14194_);
i = 6910469410427058090L - (i >> 1);
p_14194_ = Double.longBitsToDouble(i);
return p_14194_ * (1.5 - d0 * p_14194_ * p_14194_);
}
public static float fastInvCubeRoot(float p_14200_) {
int i = Float.floatToIntBits(p_14200_);
i = 1419967116 - i / 3;
float f = Float.intBitsToFloat(i);
f = 0.6666667F * f + 1.0F / (3.0F * f * f * p_14200_);
return 0.6666667F * f + 1.0F / (3.0F * f * f * p_14200_);
}
public static int hsvToRgb(float p_14170_, float p_14171_, float p_14172_) {
return hsvToArgb(p_14170_, p_14171_, p_14172_, 0);
}
public static int hsvToArgb(float p_343715_, float p_343707_, float p_342108_, int p_343055_) {
int i = (int)(p_343715_ * 6.0F) % 6;
float f = p_343715_ * 6.0F - i;
float f1 = p_342108_ * (1.0F - p_343707_);
float f2 = p_342108_ * (1.0F - f * p_343707_);
float f3 = p_342108_ * (1.0F - (1.0F - f) * p_343707_);
float f4;
float f5;
float f6;
switch (i) {
case 0:
f4 = p_342108_;
f5 = f3;
f6 = f1;
break;
case 1:
f4 = f2;
f5 = p_342108_;
f6 = f1;
break;
case 2:
f4 = f1;
f5 = p_342108_;
f6 = f3;
break;
case 3:
f4 = f1;
f5 = f2;
f6 = p_342108_;
break;
case 4:
f4 = f3;
f5 = f1;
f6 = p_342108_;
break;
case 5:
f4 = p_342108_;
f5 = f1;
f6 = f2;
break;
default:
throw new RuntimeException("Something went wrong when converting from HSV to RGB. Input was " + p_343715_ + ", " + p_343707_ + ", " + p_342108_);
}
return ARGB.color(p_343055_, clamp((int)(f4 * 255.0F), 0, 255), clamp((int)(f5 * 255.0F), 0, 255), clamp((int)(f6 * 255.0F), 0, 255));
}
public static int murmurHash3Mixer(int p_14184_) {
p_14184_ ^= p_14184_ >>> 16;
p_14184_ *= -2048144789;
p_14184_ ^= p_14184_ >>> 13;
p_14184_ *= -1028477387;
return p_14184_ ^ p_14184_ >>> 16;
}
public static int binarySearch(int p_14050_, int p_14051_, IntPredicate p_14052_) {
int i = p_14051_ - p_14050_;
while (i > 0) {
int j = i / 2;
int k = p_14050_ + j;
if (p_14052_.test(k)) {
i = j;
} else {
p_14050_ = k + 1;
i -= j + 1;
}
}
return p_14050_;
}
public static int lerpInt(float p_270245_, int p_270597_, int p_270301_) {
return p_270597_ + floor(p_270245_ * (p_270301_ - p_270597_));
}
public static int lerpDiscrete(float p_298397_, int p_298459_, int p_300125_) {
int i = p_300125_ - p_298459_;
return p_298459_ + floor(p_298397_ * (i - 1)) + (p_298397_ > 0.0F ? 1 : 0);
}
public static float lerp(float p_14180_, float p_14181_, float p_14182_) {
return p_14181_ + p_14180_ * (p_14182_ - p_14181_);
}
public static Vec3 lerp(double p_364482_, Vec3 p_369943_, Vec3 p_369682_) {
return new Vec3(
lerp(p_364482_, p_369943_.x, p_369682_.x),
lerp(p_364482_, p_369943_.y, p_369682_.y),
lerp(p_364482_, p_369943_.z, p_369682_.z)
);
}
public static double lerp(double p_14140_, double p_14141_, double p_14142_) {
return p_14141_ + p_14140_ * (p_14142_ - p_14141_);
}
public static double lerp2(double p_14013_, double p_14014_, double p_14015_, double p_14016_, double p_14017_, double p_14018_) {
return lerp(p_14014_, lerp(p_14013_, p_14015_, p_14016_), lerp(p_14013_, p_14017_, p_14018_));
}
public static double lerp3(
double p_14020_,
double p_14021_,
double p_14022_,
double p_14023_,
double p_14024_,
double p_14025_,
double p_14026_,
double p_14027_,
double p_14028_,
double p_14029_,
double p_14030_
) {
return lerp(
p_14022_,
lerp2(p_14020_, p_14021_, p_14023_, p_14024_, p_14025_, p_14026_),
lerp2(p_14020_, p_14021_, p_14027_, p_14028_, p_14029_, p_14030_)
);
}
public static float catmullrom(float p_216245_, float p_216246_, float p_216247_, float p_216248_, float p_216249_) {
return 0.5F
* (
2.0F * p_216247_
+ (p_216248_ - p_216246_) * p_216245_
+ (2.0F * p_216246_ - 5.0F * p_216247_ + 4.0F * p_216248_ - p_216249_) * p_216245_ * p_216245_
+ (3.0F * p_216247_ - p_216246_ - 3.0F * p_216248_ + p_216249_) * p_216245_ * p_216245_ * p_216245_
);
}
public static double smoothstep(double p_14198_) {
return p_14198_ * p_14198_ * p_14198_ * (p_14198_ * (p_14198_ * 6.0 - 15.0) + 10.0);
}
public static double smoothstepDerivative(double p_144947_) {
return 30.0 * p_144947_ * p_144947_ * (p_144947_ - 1.0) * (p_144947_ - 1.0);
}
public static int sign(double p_14206_) {
if (p_14206_ == 0.0) {
return 0;
} else {
return p_14206_ > 0.0 ? 1 : -1;
}
}
public static float rotLerp(float p_14190_, float p_14191_, float p_14192_) {
return p_14191_ + p_14190_ * wrapDegrees(p_14192_ - p_14191_);
}
public static double rotLerp(double p_299352_, double p_301019_, double p_299027_) {
return p_301019_ + p_299352_ * wrapDegrees(p_299027_ - p_301019_);
}
public static float rotLerpRad(float p_368518_, float p_366477_, float p_363810_) {
float f = p_363810_ - p_366477_;
while (f < (float) -Math.PI) {
f += (float) (Math.PI * 2);
}
while (f >= (float) Math.PI) {
f -= (float) (Math.PI * 2);
}
return p_366477_ + p_368518_ * f;
}
public static float triangleWave(float p_14157_, float p_14158_) {
return (Math.abs(p_14157_ % p_14158_ - p_14158_ * 0.5F) - p_14158_ * 0.25F) / (p_14158_ * 0.25F);
}
public static float square(float p_14208_) {
return p_14208_ * p_14208_;
}
public static double square(double p_144953_) {
return p_144953_ * p_144953_;
}
public static int square(int p_144945_) {
return p_144945_ * p_144945_;
}
public static long square(long p_184644_) {
return p_184644_ * p_184644_;
}
public static double clampedMap(double p_144852_, double p_144853_, double p_144854_, double p_144855_, double p_144856_) {
return clampedLerp(p_144855_, p_144856_, inverseLerp(p_144852_, p_144853_, p_144854_));
}
public static float clampedMap(float p_184632_, float p_184633_, float p_184634_, float p_184635_, float p_184636_) {
return clampedLerp(p_184635_, p_184636_, inverseLerp(p_184632_, p_184633_, p_184634_));
}
public static double map(double p_144915_, double p_144916_, double p_144917_, double p_144918_, double p_144919_) {
return lerp(inverseLerp(p_144915_, p_144916_, p_144917_), p_144918_, p_144919_);
}
public static float map(float p_184638_, float p_184639_, float p_184640_, float p_184641_, float p_184642_) {
return lerp(inverseLerp(p_184638_, p_184639_, p_184640_), p_184641_, p_184642_);
}
public static double wobble(double p_144955_) {
return p_144955_ + (2.0 * RandomSource.create(floor(p_144955_ * 3000.0)).nextDouble() - 1.0) * 1.0E-7 / 2.0;
}
public static int roundToward(int p_144942_, int p_144943_) {
return positiveCeilDiv(p_144942_, p_144943_) * p_144943_;
}
public static int positiveCeilDiv(int p_184653_, int p_184654_) {
return -Math.floorDiv(-p_184653_, p_184654_);
}
public static int randomBetweenInclusive(RandomSource p_216288_, int p_216289_, int p_216290_) {
return p_216288_.nextInt(p_216290_ - p_216289_ + 1) + p_216289_;
}
public static float randomBetween(RandomSource p_216284_, float p_216285_, float p_216286_) {
return p_216284_.nextFloat() * (p_216286_ - p_216285_) + p_216285_;
}
public static float normal(RandomSource p_216292_, float p_216293_, float p_216294_) {
return p_216293_ + (float)p_216292_.nextGaussian() * p_216294_;
}
public static double lengthSquared(double p_211590_, double p_211591_) {
return p_211590_ * p_211590_ + p_211591_ * p_211591_;
}
public static double length(double p_184646_, double p_184647_) {
return Math.sqrt(lengthSquared(p_184646_, p_184647_));
}
public static float length(float p_366616_, float p_361952_) {
return (float)Math.sqrt(lengthSquared(p_366616_, p_361952_));
}
public static double lengthSquared(double p_211593_, double p_211594_, double p_211595_) {
return p_211593_ * p_211593_ + p_211594_ * p_211594_ + p_211595_ * p_211595_;
}
public static double length(double p_184649_, double p_184650_, double p_184651_) {
return Math.sqrt(lengthSquared(p_184649_, p_184650_, p_184651_));
}
public static float lengthSquared(float p_343908_, float p_343799_, float p_344922_) {
return p_343908_ * p_343908_ + p_343799_ * p_343799_ + p_344922_ * p_344922_;
}
public static int quantize(double p_184629_, int p_184630_) {
return floor(p_184629_ / p_184630_) * p_184630_;
}
public static IntStream outFromOrigin(int p_216296_, int p_216297_, int p_216298_) {
return outFromOrigin(p_216296_, p_216297_, p_216298_, 1);
}
public static IntStream outFromOrigin(int p_216251_, int p_216252_, int p_216253_, int p_216254_) {
if (p_216252_ > p_216253_) {
throw new IllegalArgumentException(String.format(Locale.ROOT, "upperbound %d expected to be > lowerBound %d", p_216253_, p_216252_));
} else if (p_216254_ < 1) {
throw new IllegalArgumentException(String.format(Locale.ROOT, "steps expected to be >= 1, was %d", p_216254_));
} else {
return p_216251_ >= p_216252_ && p_216251_ <= p_216253_ ? IntStream.iterate(p_216251_, p_216282_ -> {
int i = Math.abs(p_216251_ - p_216282_);
return p_216251_ - i >= p_216252_ || p_216251_ + i <= p_216253_;
}, p_216260_ -> {
boolean flag = p_216260_ <= p_216251_;
int i = Math.abs(p_216251_ - p_216260_);
boolean flag1 = p_216251_ + i + p_216254_ <= p_216253_;
if (!flag || !flag1) {
int j = p_216251_ - i - (flag ? p_216254_ : 0);
if (j >= p_216252_) {
return j;
}
}
return p_216251_ + i + p_216254_;
}) : IntStream.empty();
}
}
public static Quaternionf rotationAroundAxis(Vector3f p_311556_, Quaternionf p_311192_, Quaternionf p_310462_) {
float f = p_311556_.dot(p_311192_.x, p_311192_.y, p_311192_.z);
return p_310462_.set(p_311556_.x * f, p_311556_.y * f, p_311556_.z * f, p_311192_.w).normalize();
}
public static int mulAndTruncate(Fraction p_331603_, int p_334561_) {
return p_331603_.getNumerator() * p_334561_ / p_331603_.getDenominator();
}
public static float easeInOutSine(float p_370041_) {
return -(cos((float) Math.PI * p_370041_) - 1.0F) / 2.0F;
}
static {
for (int i = 0; i < 257; i++) {
double d0 = i / 256.0;
double d1 = Math.asin(d0);
COS_TAB[i] = Math.cos(d1);
ASIN_TAB[i] = d1;
}
}
}