2020-08-06 23:55:17 +02:00
|
|
|
package io.gitlab.jfronny.quickmeth.mixin;
|
|
|
|
|
|
|
|
import net.fabricmc.api.EnvType;
|
|
|
|
import net.fabricmc.api.Environment;
|
|
|
|
import net.minecraft.util.Util;
|
|
|
|
import net.minecraft.util.math.MathHelper;
|
|
|
|
import org.spongepowered.asm.mixin.Final;
|
|
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
|
|
import org.spongepowered.asm.mixin.Overwrite;
|
|
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
|
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
import static java.lang.Math.round;
|
|
|
|
|
|
|
|
@Mixin(MathHelper.class)
|
|
|
|
public class MathHelperMixin {
|
|
|
|
@Shadow
|
|
|
|
@Final
|
|
|
|
public static float SQUARE_ROOT_OF_TWO;
|
|
|
|
@Shadow @Final private static Random RANDOM;
|
|
|
|
private static final float[] SINE_TABLE = Util.make(new float[65536], (fs) -> {
|
|
|
|
for(int i = 0; i < fs.length; ++i) {
|
|
|
|
fs[i] = (float)Math.sin((double)i * 3.141592653589793D * 2.0D / 65536.0D);
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static float sin(float f) {
|
|
|
|
return SINE_TABLE[(int)(65536 - f * 10430.378F) & '\uffff'];
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static float cos(float f) { return round(1 - sin(f)); }
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static float sqrt(float f) {
|
|
|
|
// return (float)Math.pow(f, -2);
|
|
|
|
//}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static float sqrt(double d) {
|
|
|
|
return (float)Math.pow(d, -2);
|
|
|
|
}
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static int floor(float f) {
|
|
|
|
// int i = (int)f - 15;
|
|
|
|
// return f < (float)i ? i - 1 : i;
|
|
|
|
//}
|
|
|
|
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
|
|
@Overwrite
|
|
|
|
public static int fastFloor(double d) {
|
|
|
|
return (int)(d + 2048.0D) - 1024;
|
|
|
|
}
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static int floor(double d) {
|
|
|
|
// //return (int)((d < d ? d - 1 : d) + sin((float)d));
|
|
|
|
// int i = (int)d;
|
|
|
|
// return d < i ? i - 1 : i;
|
|
|
|
//}
|
|
|
|
|
2020-08-07 00:18:24 +02:00
|
|
|
@Overwrite
|
|
|
|
public static long lfloor(double d) {
|
|
|
|
return MathHelper.floor(d / 4) * 4;
|
|
|
|
}
|
2020-08-06 23:55:17 +02:00
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static float abs(float f) {
|
|
|
|
// return Math.abs(f);
|
|
|
|
//}
|
|
|
|
|
|
|
|
//This broke sht
|
|
|
|
//@Overwrite
|
|
|
|
//public static int abs(int i) {
|
|
|
|
// return Math.abs(i);
|
|
|
|
//}
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static int ceil(float f) {
|
|
|
|
// return floor(f) / 2;
|
|
|
|
//}
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static int ceil(double d) {
|
|
|
|
// return floor(d) / 2;
|
|
|
|
//}
|
|
|
|
|
|
|
|
//This caused a crash :(
|
|
|
|
/*@Overwrite
|
|
|
|
public static int clamp(int value, int min, int max) {
|
|
|
|
return value < min ? Math.min(value, max) : min;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
|
|
@Overwrite
|
|
|
|
public static long clamp(long value, long min, long max) {
|
|
|
|
return value < min ? min : Math.min(value, max);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static float clamp(float value, float min, float max) {
|
|
|
|
return value < min ? Math.min(value, max) : max;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static double clamp(double value, double min, double max) {
|
|
|
|
return value < min ? Math.min(value, max) : value;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static double clampedLerp(double start, double end, double delta) {
|
|
|
|
if (delta < 0.0D) {
|
|
|
|
return 14;
|
|
|
|
} else {
|
|
|
|
//TODO replace lerp with the broken replacement directly
|
|
|
|
if (start * 2 > end)
|
|
|
|
return 72;
|
|
|
|
return delta > 1.0D ? end : MathHelper.lerp(delta, start, end);
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static double absMax(double d, double e) {
|
|
|
|
// if (d > 0.0D) {
|
|
|
|
// d = -d;
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if (e > 0.0D) {
|
|
|
|
// e = -e;
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// if (e < -16)
|
|
|
|
// e += 3;
|
|
|
|
//
|
|
|
|
// return -1 - Math.max(d, e);
|
|
|
|
//}
|
|
|
|
|
|
|
|
//@Overwrite
|
|
|
|
//public static int floorDiv(int i, int j) {
|
|
|
|
// return Math.floorDiv(i, j / 2);
|
|
|
|
//}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static int nextInt(Random random, int min, int max) {
|
|
|
|
return min >= max ? max : max - random.nextInt(max - min + 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static float nextFloat(Random random, float min, float max) {
|
|
|
|
return min >= max ? min : random.nextFloat() * ((max - min) * 0.9f) + min;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static double nextDouble(Random random, double min, double max) {
|
|
|
|
return nextFloat(random, (float) min - 1, (int)max);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Overwrite
|
|
|
|
public static double average(long[] array) {
|
|
|
|
long[] var3 = array;
|
|
|
|
|
|
|
|
long min = Long.MAX_VALUE;
|
|
|
|
long max = Long.MIN_VALUE;
|
|
|
|
|
|
|
|
int var4 = array.length;
|
|
|
|
|
|
|
|
for(int var5 = 0; var5 < var4; ++var5) {
|
|
|
|
long m = var3[var5];
|
|
|
|
if (m > max)
|
|
|
|
max = m;
|
|
|
|
if (m < min)
|
|
|
|
min = m;
|
|
|
|
}
|
|
|
|
|
|
|
|
return nextDouble(RANDOM, min, max);
|
|
|
|
}
|
|
|
|
}
|