From f155fec797de07faeab2992b9d77a347aa35d8b6 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Tue, 9 Jul 2024 00:45:05 +0300 Subject: [PATCH] math.MathHelperIntrinsicMixin, math.GenericFastMath --- .../math/general/GenericFastMathMixin.java | 69 +++++++++++++++++++ .../intrinsic/MathHelperIntrinsicMixin.java | 54 +++++++++++++++ src/main/resources/mixins.core.json | 2 + 3 files changed, 125 insertions(+) create mode 100644 src/main/java/net/gensokyoreimagined/nitori/mixin/math/general/GenericFastMathMixin.java create mode 100644 src/main/java/net/gensokyoreimagined/nitori/mixin/math/intrinsic/MathHelperIntrinsicMixin.java diff --git a/src/main/java/net/gensokyoreimagined/nitori/mixin/math/general/GenericFastMathMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/math/general/GenericFastMathMixin.java new file mode 100644 index 0000000..876f020 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/math/general/GenericFastMathMixin.java @@ -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; + }); + } +} \ No newline at end of file diff --git a/src/main/java/net/gensokyoreimagined/nitori/mixin/math/intrinsic/MathHelperIntrinsicMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/math/intrinsic/MathHelperIntrinsicMixin.java new file mode 100644 index 0000000..eaff0f7 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/math/intrinsic/MathHelperIntrinsicMixin.java @@ -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)); + } +} \ No newline at end of file diff --git a/src/main/resources/mixins.core.json b/src/main/resources/mixins.core.json index a5f0c81..da85d52 100755 --- a/src/main/resources/mixins.core.json +++ b/src/main/resources/mixins.core.json @@ -45,6 +45,8 @@ "math.fast_util.AxisCycleDirectionMixin$BackwardMixin", "math.fast_util.DirectionMixin", "math.vec.FastMathVec3DMixin", + "math.general.GenericFastMathMixin", + "math.intrinsic.MathHelperIntrinsicMixin", "collections.entity_filtering.TypeFilterableListMixin", "collections.entity_by_type.TypeFilterableListMixin", "collections.chunk_tickets.SortedArraySetMixin",