math.MathHelperIntrinsicMixin, math.GenericFastMath
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
package net.gensokyoreimagined.nitori.mixin.math.general;
|
||||||
|
|
||||||
|
import net.minecraft.world.phys.AABB;
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
@Mixin(Mth.class)
|
||||||
|
public class GenericFastMathMixin {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Slightly more optimized
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static boolean rayIntersectsAABB(Vec3 origin, Vec3 direction, AABB box) {
|
||||||
|
|
||||||
|
double d = (box.minX + box.maxX) * 0.5;
|
||||||
|
double e = (box.maxX - box.minX) * 0.5;
|
||||||
|
double f = origin.x - d;
|
||||||
|
if (Math.abs(f) > e && f * direction.x > 0.0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
double g = (box.minY + box.maxY) * 0.5;
|
||||||
|
double h = (box.maxY - box.minY) * 0.5;
|
||||||
|
double i = origin.y - g;
|
||||||
|
if (Math.abs(i) > h && i * direction.y >= 0.0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
double j = (box.minZ + box.maxZ) * 0.5;
|
||||||
|
double k = (box.maxZ - box.minZ) * 0.5;
|
||||||
|
double l = origin.z - j;
|
||||||
|
if (Math.abs(l) > k && l * direction.z >= 0.0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
double m = Math.abs(direction.x);
|
||||||
|
double n = Math.abs(direction.y);
|
||||||
|
double o = Math.abs(direction.z);
|
||||||
|
double p = direction.y * l - direction.z * i;
|
||||||
|
if (Math.abs(p) > h * o + k * n || Math.abs(direction.z * f - direction.x * l) > e * o + k * m) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.abs(direction.x * i - direction.y * f) < e * n + h * m;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Slightly more optimized
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static IntStream outFromOrigin(int seed, int lowerBound, int upperBound, int steps) {
|
||||||
|
|
||||||
|
if (steps < 1 || seed < lowerBound || seed > upperBound) {
|
||||||
|
return IntStream.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
return IntStream.iterate(seed, i -> {
|
||||||
|
int nextValue = i + (i <= seed ? steps : -steps);
|
||||||
|
return nextValue >= lowerBound && nextValue <= upperBound ? nextValue : i;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package net.gensokyoreimagined.nitori.mixin.math.intrinsic;
|
||||||
|
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
|
||||||
|
// Credit to Gale patch #0018
|
||||||
|
@Mixin(Mth.class)
|
||||||
|
public class MathHelperIntrinsicMixin {
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Use Intrinsic instead
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static int floor(float value) {
|
||||||
|
return (int) Math.floor(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Use Intrinsic instead
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static int floor(double value) {
|
||||||
|
return (int) Math.floor(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Use Intrinsic instead
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static int ceil(float value) {
|
||||||
|
return (int) Math.ceil(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Use Intrinsic instead
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static int ceil(double value) {
|
||||||
|
return (int) Math.ceil(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author QPCrummer
|
||||||
|
* @reason Use Intrinsic instead
|
||||||
|
*/
|
||||||
|
@Overwrite
|
||||||
|
public static double absMax(double a, double b) {
|
||||||
|
return Math.max(Math.abs(a), Math.abs(b));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -45,6 +45,8 @@
|
|||||||
"math.fast_util.AxisCycleDirectionMixin$BackwardMixin",
|
"math.fast_util.AxisCycleDirectionMixin$BackwardMixin",
|
||||||
"math.fast_util.DirectionMixin",
|
"math.fast_util.DirectionMixin",
|
||||||
"math.vec.FastMathVec3DMixin",
|
"math.vec.FastMathVec3DMixin",
|
||||||
|
"math.general.GenericFastMathMixin",
|
||||||
|
"math.intrinsic.MathHelperIntrinsicMixin",
|
||||||
"collections.entity_filtering.TypeFilterableListMixin",
|
"collections.entity_filtering.TypeFilterableListMixin",
|
||||||
"collections.entity_by_type.TypeFilterableListMixin",
|
"collections.entity_by_type.TypeFilterableListMixin",
|
||||||
"collections.chunk_tickets.SortedArraySetMixin",
|
"collections.chunk_tickets.SortedArraySetMixin",
|
||||||
|
|||||||
Reference in New Issue
Block a user