diff --git a/src/main/java/net/gensokyoreimagined/nitori/mixin/math/vec/FastMathVec3DMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/math/vec/FastMathVec3DMixin.java new file mode 100644 index 0000000..2d93ff7 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/math/vec/FastMathVec3DMixin.java @@ -0,0 +1,37 @@ +package net.gensokyoreimagined.nitori.mixin.math.vec; + +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.*; + +@Mixin(Vec3.class) +public class FastMathVec3DMixin { + @Mutable + @Shadow + @Final + public double x; + + @Mutable + @Shadow @Final public double y; + + @Mutable + @Shadow @Final public double z; + private Vec3 cachedNormalized; + + /** + * @author QPCrummer + * @reason Cache normalized Vec + */ + @Overwrite + public Vec3 normalize() { + if (cachedNormalized == null) { + double squaredLength = x * x + y * y + z * z; + if (squaredLength < 1.0E-8) { + cachedNormalized = Vec3.ZERO; + } else { + double invLength = 1.0 / Math.sqrt(squaredLength); + cachedNormalized = new Vec3(x * invLength, y * invLength, z * invLength); + } + } + return cachedNormalized; + } +} \ No newline at end of file diff --git a/src/main/resources/mixins.core.json b/src/main/resources/mixins.core.json index 49db3df..a5f0c81 100755 --- a/src/main/resources/mixins.core.json +++ b/src/main/resources/mixins.core.json @@ -44,6 +44,7 @@ "math.fast_util.AxisCycleDirectionMixin$ForwardMixin", "math.fast_util.AxisCycleDirectionMixin$BackwardMixin", "math.fast_util.DirectionMixin", + "math.vec.FastMathVec3DMixin", "collections.entity_filtering.TypeFilterableListMixin", "collections.entity_by_type.TypeFilterableListMixin", "collections.chunk_tickets.SortedArraySetMixin",