NPCPhysicsMath class

Пакет: com.hypixel.hytale.server.npc.util

Файл: com/hypixel/hytale/server/npc/util/NPCPhysicsMath.java

Поля (206)

МодификаторыТипИмя
final double EPSILON_LENGTH
POS_X, NEG_X, POS_Y, NEG_Y, POS_Z, NEG_Z
break
break
break
break
break
break
var0
var0
var0
var0
double var10
double var10
double var10
double var10
double var10
double var10
double var10
ChunkStore var10
WorldChunk var10
double var10
double var10
double var11
double var11
double var11
double var11
Ref var11
BlockChunk var11
double var11
double var12
float var12
double var12
double var12
double var12
double var12
double var12
Store var12
int var12
double var12
double var12
double var13
double var13
double var13
double var13
double var13
BlockChunk var13
BlockSection var13
double var13
double var13
double var14
var14
double var14
var14
double var14
double var14
double var14
BlockSection var14
BlockType var14
double var14
double var14
var14
var14
var14
var14
double var14
double var15
double var15
double var15
double var15
BlockType var15
int var15
double var15
double var15
double var16
double var16
double var16
double var16
int var16
double var16
var16
double var16
double var16
double var17
double var17
double var17
double var17
double var17
double var18
var18
double var18
var18
double var18
double var18
double var18
double var18
double var19
double var19
double var19
double var19
double var19
double var2
float var2
double var2
var2
var2
var2
double var2
var2
var2
var2
NPCEntity var2
var2
double var20
var20
double var20
var20
double var20
double var20
double var21
double var21
double var21
float var21
double var22
double var22
double var23
double var23
double var25
double var25
double var25
double var25
double var27
double var27
double var28
double var3
double var3
BlockBoundingBoxes var3
double var3
var3
var3
var3
double var3
Role var3
double var30
double var32
double var34
double var36
double var38
double var4
double var4
Box var4
double var4
double var40
double var42
double var44
double var46
var46
double var5
double var5
double var5
double var5
double var5
double var5
double var5
var5
var5
var5
var5
var5
var5
int var5
double var5
double var5
double var6
double var6
double var6
int var6
BoundingBox var6
double var7
double var7
double var7
double var7
double var7
int var7
ChunkStore var7
double var7
Box var7
double var7
double var8
double var8
double var8
double var8
double var8
double var8
double var8
int var8
Ref var8
double var9
double var9
double var9
double var9
double var9
double var9
int var9
Store var9
double var9

Методы (144)

МодификаторыВозвратСигнатура
Direction Direction()
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("IntersectSweptSpheres: Near result larger far result")
static double acceleratedouble accelerate(double var0, double var2, double var4, double var6)
static double accelerateDragdouble accelerateDrag(double var0, double var2, double var4, double var6, double var8)
static double accelerateDragdouble accelerateDrag(double var0, double var2, double var4, double var6)
abstract return accelerateDragreturn accelerateDrag(var0, var2, var4, var6, 3.0)
static double accelerateDragCappeddouble accelerateDragCapped(double var0, double var2, double var4, double var6, double var8)
static double accelerateDragCappeddouble accelerateDragCapped(double var0, double var2, double var4, double var6)
abstract return accelerateDragCappedreturn accelerateDragCapped(var0, var2, var4, var6, 3.0)
static double accelerateToTargetSpeeddouble accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8, double var10, double var12)
static double accelerateToTargetSpeeddouble accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8, double var10)
static double accelerateToTargetSpeeddouble accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8)
abstract return accelerateToTargetSpeedreturn accelerateToTargetSpeed(var0, var2, var4, var6, var8, 0.0, var10)
abstract return accelerateToTargetSpeedreturn accelerateToTargetSpeed(var0, var2, var4, var6, var6, 0.0, var8)
abstract addDifference addDifference(var3, var2, var0)
static double blockEmptySpacedouble blockEmptySpace(@Nullable BlockType var0, int var1, @Nonnull NPCPhysicsMath.Direction var2)
static double blockHeightdouble blockHeight(@Nullable BlockType var0, int var1)
static float clampRotationfloat clampRotation(float var0, float var1)
static double collisionSphereRadiusdouble collisionSphereRadius(@Nonnull Box var0)
static double collisionSphereRadiusdouble collisionSphereRadius(double var0, double var2, double var4)
static double collisionSphereRadiusdouble collisionSphereRadius(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1)
abstract return collisionSphereRadiusreturn collisionSphereRadius(var0.max.x - var0.min.x, var0.max.z - var0.min.z, var0.max.y - var0.min.y)
static double cosAngleBetweenUnitVectorsdouble cosAngleBetweenUnitVectors(@Nonnull Vector3d var0, @Nonnull Vector3d var1)
static double cosAngleBetweenVectorsdouble cosAngleBetweenVectors(@Nonnull Vector3d var0, @Nonnull Vector3d var1)
static double cosAngleBetweenVectorsdouble cosAngleBetweenVectors(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4)
static double deccelerateToStopdouble deccelerateToStop(double var0, double var2, double var4)
static double distanceSquaredWithSelectordouble distanceSquaredWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2)
static double distanceWithSelectordouble distanceWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2)
static double dotProductdouble dotProduct(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2)
static double dotProductdouble dotProduct(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3)
static double dotProductdouble dotProduct(double var0, double var2, double var4)
static double dotProductdouble dotProduct(double var0, double var2, double var4, double var6, double var8, double var10)
static double dotProductdouble dotProduct(float var0, float var1, float var2)
static double dotProductdouble dotProduct(float var0, float var1, float var2, float var3, float var4, float var5)
static double dotProductdouble dotProduct(double var0, double var2, double var4, @Nonnull Vector3d var6)
static double dotProductdouble dotProduct(double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull Vector3d var12)
abstract return dotProductreturn dotProduct(var0.x, var0.y, var0.z, var1)
abstract return dotProductreturn dotProduct(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2)
static double dotProductWithSelectordouble dotProductWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2)
static double getMaxBoundingBoxExtentdouble getMaxBoundingBoxExtent(@Nonnull Box var0, @Nonnull Vector3dc var1)
static double getMinBoundingBoxDistancedouble getMinBoundingBoxDistance(@Nonnull Box var0, @Nonnull Box var1, @Nonnull Vector3dc var2)
static double getMinBoundingBoxExtentdouble getMinBoundingBoxExtent(@Nonnull Box var0, @Nonnull Vector3dc var1)
static double getProjectedDifferencedouble getProjectedDifference(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2)
static double gravityDragdouble gravityDrag(double var0, double var2, double var4, double var6, double var8)
static double gravityDragdouble gravityDrag(double var0, double var2, double var4, double var6)
abstract return gravityDragreturn gravityDrag(var0, var2, var4, var6, 3.0)
static float headingFromDirectionfloat headingFromDirection(double var0, double var2, float var4)
static double heightOverGrounddouble heightOverGround(@Nonnull World var0, double var1, double var3, double var5)
static double heightOverGrounddouble heightOverGround(@Nonnull World var0, double var1, double var3)
if if(var8 >= var10 && var8 >= var12)
if if(var10 <= 1.0E-6)
if if(var6 >= 1.0F)
if if(var13 < 1.0E-6)
if if(var0 >= var1)
if if(var8 == 0.0)
if if(var14 != 0.0)
if if(var14 < 0.0)
if if(var14 != 0.0)
if if(var20 < var18)
if if(var7)
if if(var18 > 1.0)
if if(var18 >= 0.0)
if if(var20 <= 1.0)
if if(var20 >= 0.0 && var20 <= 1.0)
if if(var8 == 0.0)
if if(var14 < 0.0)
if if(var14 == 0.0)
if if(var20 < var18)
if if(var18 > 1.0)
if if(var0 == null)
if if(var3 == null)
if if(var13 == null)
if if(var10 == null)
if if(var11 == null)
if if(var46 < 0.0)
if if(var46 == 0.0)
if if(var27[0] >= var27[1])
if if(var2 != null)
if if(var4 >= 0.0)
if if(var16 < 0.0)
if if(var18 < 0.0)
if if(var0 > var6)
if if(var0 < 0.0)
if if(var0 > 0.0)
if if(var0 < 0.0)
if if(var0 == var2)
if if(var0 == 0.0)
if if(var0 < var2)
if if(var0 < 0.0)
static boolean inViewSectorboolean inViewSector(double var0, double var2, float var4, float var5, double var6, double var8)
static int intersectLineSphereint intersectLineSphere(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5, @Nonnull Vector3d var6, boolean var7)
static double intersectLineSphereLerpdouble intersectLineSphereLerp(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5, @Nonnull Vector3d var6, @Nonnull Vector3d var7)
static double intersectLineSphereLerpdouble intersectLineSphereLerp(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5)
static int intersectSweptSpheresint intersectSweptSpheres(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3, double var4, @Nonnull Vector3d var6, double[] var7)
static int intersectSweptSpheresint intersectSweptSpheres(double var0, double var2, double var4, double var6, double var8, double var10, double var12, double var14, double var16, double var18, double var20, double var22, double var24, @Nonnull Vector3dc var26, double[] var27)
abstract return intersectSweptSpheresreturn intersectSweptSpheres(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2.x, var2.y, var2.z, var3.x, var3.y, var3.z, var4, var6, var7)
abstract return intersectSweptSpheresreturn intersectSweptSpheres(var0.x, var0.y + var2, var0.z, var1.x, var1.y, var1.z, var4.x, var4.y + var6, var4.z, var5.x, var5.y, var5.z, var2 + var6, var8, var9)
static int intersectSweptSpheresFootpointint intersectSweptSpheresFootpoint(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4, @Nonnull Vector3d var5, double var6, @Nonnull Vector3dc var8, double[] var9)
static boolean isInViewConeboolean isInViewCone(double var0, double var2, double var4, double var6, double var8, double var10, float var12, double var13, double var15, double var17)
static boolean isInViewConeboolean isInViewCone(double var0, double var2, double var4, float var6, double var7, double var9, double var11)
static boolean isInViewConeboolean isInViewCone(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull Vector3d var3)
static boolean isInViewConeboolean isInViewCone(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull Vector3d var3, @Nonnull Vector3d var4)
abstract return isInViewConereturn isInViewCone(var6, var8, var10, var12, var13 - var0, var15 - var2, var17 - var4)
abstract return isInViewConereturn isInViewCone(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2, var3.x, var3.y, var3.z)
abstract return isInViewConereturn isInViewCone(var0.x * var5, var0.y * var7, var0.z * var9, var1.x * var5, var1.y * var7, var1.z * var9, var2, var3.x * var5, var3.y * var7, var3.z * var9)
static boolean isInvalidboolean isInvalid(double var0)
static boolean isInvalidboolean isInvalid(@Nonnull Vector3d var0)
static boolean isValidboolean isValid(double var0)
static boolean isValidboolean isValid(@Nonnull Vector3d var0)
static double jumpParametersdouble jumpParameters(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4)
static double lengthdouble length(double var0, double var2, double var4)
static void lerpvoid lerp(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4)
static double lerpdouble lerp(double var0, double var2, double var4)
static void lerpDistancevoid lerpDistance(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4)
static float lookatHeadingfloat lookatHeading(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2)
static boolean nearboolean near(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1)
static boolean nearboolean near(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2)
static boolean nearboolean near(double var0, double var2)
static boolean nearboolean near(double var0, double var2, double var4)
abstract return nearreturn near(var0, var1, 1.0E-12)
abstract return nearreturn near(var0, var2, 1.0E-6)
static void offsetVectorvoid offsetVector(@Nonnull Vector3d var0, double var1, double var3, double var5, double var7, @Nonnull Vector3d var9)
static void offsetVectorvoid offsetVector(double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull Vector3d var14)
abstract offsetVector offsetVector(var0, var5, var7, var9, var2, var4)
static void orthoCompositionvoid orthoComposition(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, double var3, @Nonnull Vector3d var5)
static void orthoCompositionvoid orthoComposition(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2, @Nonnull Vector3dc var4, double var5, @Nonnull Vector3d var7)
static float pitchFromDirectionfloat pitchFromDirection(double var0, double var2, double var4, float var6)
static double projectedLengthdouble projectedLength(@Nonnull Vector3d var0, @Nonnull Vector3d var1)
static double projectedLengthSquareddouble projectedLengthSquared(@Nonnull Vector3d var0, @Nonnull Vector3d var1)
abstract projection projection(var0, var1, var2)
static double rayCircleIntersectdouble rayCircleIntersect(double var0, double var2, double var4, double var6, double var8)
static double rayCircleIntersectdouble rayCircleIntersect(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Vector3dc var2, double var3, @Nonnull Vector3dc var5)
static void realignUnitVectorvoid realignUnitVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4)
static void realignVectorvoid realignVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4)
static void realignVectorvoid realignVector(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4, double var6, @Nonnull Vector3d var8)
static boolean realignVectorReturnDirectionboolean realignVectorReturnDirection(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4, double var6, @Nonnull Vector3d var8)
static void rotationFromDirectionvoid rotationFromDirection(double var0, double var2, double var4, @Nonnull Rotation3fc var6, @Nonnull Rotation3f var7)
static void rotationFromDirectionvoid rotationFromDirection(@Nonnull Vector3dc var0, @Nonnull Rotation3fc var1, @Nonnull Rotation3f var2)
static void rotationFromDirectionvoid rotationFromDirection(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Rotation3fc var2, @Nonnull Rotation3f var3)
static double squaredDistProjecteddouble squaredDistProjected(double var0, double var2, double var4, @Nonnull Vector3d var6, @Nonnull Vector3dc var7)
static double squaredDistProjecteddouble squaredDistProjected(double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull Vector3dc var12)
abstract return squaredDistProjectedreturn squaredDistProjected(var0, var2, var4, var6.x, var6.y, var6.z, var7)
switch switch(var2)
static float turnAnglefloat turnAngle(float var0, float var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.util;

class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.shape.Box;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.util.TrigMathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.protocol.BlockMaterial;
class="kw">import com.hypixel.hytale.server.core.asset.type.blockhitbox.BlockBoundingBoxes;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.BoundingBox;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.BlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.BlockSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;

class="kw">public class NPCPhysicsMath {
   class="kw">public class="kw">static class="kw">final double EPSILON_LENGTH = 1.0E-6;
   class="kw">public class="kw">static class="kw">final double EPSILON_LENGTH_2 = 1.0E-12;

   class="kw">private NPCPhysicsMath() {
   }

   class="kw">public class="kw">static boolean near(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1) {
      class="kw">return near(var0, var1, 1.0E-12);
   }

   class="kw">public class="kw">static boolean near(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2) {
      class="kw">return var0.distanceSquared(var1) <= var2;
   }

   class="kw">public class="kw">static boolean near(double var0, double var2) {
      class="kw">return near(var0, var2, 1.0E-6);
   }

   class="kw">public class="kw">static boolean near(double var0, double var2, double var4) {
      class="kw">return Math.abs(var0 - var2) <= var4;
   }

   class="kw">public class="kw">static float headingFromDirection(double var0, double var2, float var4) {
      double var5 = var0 * var0 + var2 * var2;
      class="kw">return var5 < 1.0E-12 ? var4 : PhysicsMath.headingFromDirection(var0, var2);
   }

   class="kw">public class="kw">static float pitchFromDirection(double var0, double var2, double var4, float var6) {
      double var7 = var0 * var0 + var4 * var4;
      class="kw">return var7 < 1.0E-12 ? var6 : TrigMathUtil.atan2(var2, Math.sqrt(var7));
   }

   class="kw">public class="kw">static void rotationFromDirection(double var0, double var2, double var4, @Nonnull Rotation3fc var6, @Nonnull Rotation3f var7) {
      double var8 = var0 * var0 + var4 * var4;
      var7.setYaw(var8 < 1.0E-12 ? var6.yaw() : PhysicsMath.headingFromDirection(var0, var4));
      var7.setPitch(var8 < 1.0E-12 ? var6.pitch() : TrigMathUtil.atan2(var2, Math.sqrt(var8)));
      var7.setRoll(var6.roll());
   }

   class="kw">public class="kw">static void rotationFromDirection(@Nonnull Vector3dc var0, @Nonnull Rotation3fc var1, @Nonnull Rotation3f var2) {
      rotationFromDirection(var0.x(), var0.y(), var0.z(), var1, var2);
   }

   class="kw">public class="kw">static void rotationFromDirection(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Rotation3fc var2, @Nonnull Rotation3f var3) {
      rotationFromDirection(var1.x() - var0.x(), var1.y() - var0.y(), var1.z() - var0.z(), var2, var3);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d getViewDirection(@Nonnull Rotation3f var0, @Nonnull Vector3d var1) {
      class="kw">return PhysicsMath.vectorFromAngles(var0.yaw(), var0.pitch(), var1);
   }

   class="kw">public class="kw">static double cosAngleBetweenVectors(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return cosAngleBetweenVectors(var0, var0.length(), var1, var1.length());
   }

   class="kw">public class="kw">static double cosAngleBetweenVectors(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4) {
      class="kw">return var0.dot(var3) / (var1 * var4);
   }

   class="kw">public class="kw">static double cosAngleBetweenUnitVectors(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return var0.dot(var1);
   }

   class="kw">public class="kw">static void realignVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
      realignVector(var0, var0.length(), var1, var1.length(), var2, var4);
   }

   class="kw">public class="kw">static void realignVector(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4, double var6, @Nonnull Vector3d var8) {
      double var9 = Math.sqrt(1.0 - var6 * var6);
      double var11 = var0.y * var3.z - var0.z * var3.y;
      double var13 = var0.z * var3.x - var0.x * var3.z;
      double var15 = var0.x * var3.y - var0.y * var3.x;
      double var17 = var0.y * var15 - var0.z * var13;
      double var19 = var0.z * var11 - var0.x * var15;
      double var21 = var0.x * var13 - var0.y * var11;
      double var23 = Math.sqrt(dotProduct(var17, var19, var21));
      double var25 = var6 * var4 / var1;
      double var27 = var9 * var4 / var23;
      var8.x = var25 * var0.x - var27 * var17;
      var8.y = var25 * var0.y - var27 * var19;
      var8.z = var25 * var0.z - var27 * var21;
   }

   class="kw">public class="kw">static void realignUnitVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
      double var5 = Math.sqrt(1.0 - var2 * var2);
      double var7 = var0.y * var1.z - var0.z * var1.y;
      double var9 = var0.z * var1.x - var0.x * var1.z;
      double var11 = var0.x * var1.y - var0.y * var1.x;
      double var13 = var0.y * var11 - var0.z * var9;
      double var15 = var0.z * var7 - var0.x * var11;
      double var17 = var0.x * var9 - var0.y * var7;
      double var19 = Math.sqrt(dotProduct(var13, var15, var17));
      double var21 = var5 / var19;
      var4.x = var2 * var0.x - var21 * var13;
      var4.y = var2 * var0.y - var21 * var15;
      var4.z = var2 * var0.z - var21 * var17;
      var4.normalize();
   }

   class="kw">public class="kw">static boolean realignVectorReturnDirection(
      @Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, double var4, double var6, @Nonnull Vector3d var8
   ) {
      double var9 = Math.sqrt(1.0 - var6 * var6);
      double var11 = var0.y * var3.z - var0.z * var3.y;
      double var13 = var0.z * var3.x - var0.x * var3.z;
      double var15 = var0.x * var3.y - var0.y * var3.x;
      double var17 = var0.y * var15 - var0.z * var13;
      double var19 = var0.z * var11 - var0.x * var15;
      double var21 = var0.x * var13 - var0.y * var11;
      double var23 = Math.sqrt(dotProduct(var17, var19, var21));
      double var25 = var6 * var4 / var1;
      double var27 = var9 * var4 / var23;
      var8.x = var25 * var0.x - var27 * var17;
      var8.y = var25 * var0.y - var27 * var19;
      var8.z = var25 * var0.z - var27 * var21;
      class="kw">return dotProduct(var0.x, var0.y, var0.z, var17, var19, var21) > 0.0;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d createOrthogonalvector(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      double var2 = var0.x;
      double var4 = var0.y;
      double var6 = var0.z;
      double var8 = Math.abs(var2);
      double var10 = Math.abs(var4);
      double var12 = Math.abs(var6);
      if (var8 >= var10 && var8 >= var12) {
         var1.x = var4;
         var1.y = -var2;
         var1.z = 0.0;
      } else if (var10 >= var8 && var10 >= var12) {
         var1.x = 0.0;
         var1.y = var6;
         var1.z = -var4;
      } else {
         var1.x = -var6;
         var1.y = 0.0;
         var1.z = var2;
      }

      class="kw">return var1;
   }

   class="kw">public class="kw">static boolean inViewSector(double var0, double var2, float var4, float var5, double var6, double var8) {
      if (var5 > (float) Math.PI) {
         class="kw">return !inViewSector(var0, var2, var4 + (float) Math.PI, (float) (Math.PI * 2) - var5, var6, var8);
      }

      var6 -= var0;
      var8 -= var2;
      double var10 = var6 * var6 + var8 * var8;
      if (var10 <= 1.0E-6) {
         class="kw">return true;
      }

      float var12 = PhysicsMath.headingFromDirection(var6, var8);
      var12 -= var4;

      while (var12 < (float) -Math.PI) {
         var12 += (float) (Math.PI * 2);
      }

      while (var12 > (float) Math.PI) {
         var12 -= (float) (Math.PI * 2);
      }

      var12 *= 2.0F;
      class="kw">return -var5 <= var12 && var12 <= var5;
   }

   class="kw">public class="kw">static boolean isInViewCone(
      double var0, double var2, double var4, double var6, double var8, double var10, float var12, double var13, double var15, double var17
   ) {
      class="kw">return isInViewCone(var6, var8, var10, var12, var13 - var0, var15 - var2, var17 - var4);
   }

   class="kw">public class="kw">static boolean isInViewCone(double var0, double var2, double var4, float var6, double var7, double var9, double var11) {
      if (var6 >= 1.0F) {
         class="kw">return true;
      }

      double var13 = length(var7, var9, var11);
      if (var13 < 1.0E-6) {
         class="kw">return true;
      }

      double var15 = dotProduct(var0, var2, var4, var7, var9, var11);
      class="kw">return var15 > var6 * var13;
   }

   class="kw">public class="kw">static boolean isInViewCone(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull Vector3d var3) {
      class="kw">return isInViewCone(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2, var3.x, var3.y, var3.z);
   }

   class="kw">public class="kw">static boolean isInViewCone(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2, @Nonnull Vector3d var3, @Nonnull Vector3d var4) {
      double var5 = var4.x;
      double var7 = var4.y;
      double var9 = var4.z;
      class="kw">return isInViewCone(
         var0.x * var5, var0.y * var7, var0.z * var9, var1.x * var5, var1.y * var7, var1.z * var9, var2, var3.x * var5, var3.y * var7, var3.z * var9
      );
   }

   class="kw">public class="kw">static float turnAngle(float var0, float var1) {
      float var2 = PhysicsMath.normalizeAngle(var1) - PhysicsMath.normalizeAngle(var0);
      if (var2 < (float) -Math.PI) {
         var2 += (float) (Math.PI * 2);
      } else if (var2 > (float) Math.PI) {
         var2 -= (float) (Math.PI * 2);
      }

      class="kw">return var2;
   }

   class="kw">public class="kw">static float clampRotation(float var0, float var1) {
      if (var0 >= var1) {
         class="kw">return var1;
      } else {
         class="kw">return var0 > -var1 ? var0 : -var1;
      }
   }

   class="kw">public class="kw">static int intersectLineSphere(
      @Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5, @Nonnull Vector3d var6, boolean var7
   ) {
      var5.set(var4).sub(var3);
      var6.set(var3).sub(var0);
      double var8 = var5.dot(var5);
      double var10 = 2.0 * var5.dot(var6);
      double var12 = var6.dot(var6) - var1 * var1;
      double var14 = var10 * var10 - 4.0 * var8 * var12;
      if (var8 == 0.0) {
         if (var14 != 0.0) {
            class="kw">return 0;
         }

         var5.set(var3);
         class="kw">return 1;
      } else {
         if (var14 < 0.0) {
            class="kw">return 0;
         }

         if (var14 != 0.0) {
            var14 = Math.sqrt(var14) / (2.0 * var8);
            double var25 = -var10 / (2.0 * var8);
            double var18 = var25 - var14;
            double var20 = var25 + var14;
            if (var20 < var18) {
               double var22 = var18;
               var18 = var20;
               var20 = var22;
            }

            if (var7) {
               if (var18 > 1.0) {
                  class="kw">return 0;
               }

               if (var18 >= 0.0) {
                  var5.set(var3).fma(var18, var6);
                  if (var20 <= 1.0) {
                     var6.mul(var20).add(var3);
                     class="kw">return 2;
                  }

                  class="kw">return 1;
               }

               if (var20 >= 0.0 && var20 <= 1.0) {
                  var5.set(var3).fma(var18, var6);
                  class="kw">return 1;
               }
            }

            var5.set(var3).fma(var18, var6);
            var6.mul(var20).add(var3);
            class="kw">return 2;
         } else {
            double var16 = -var10 / (2.0 * var8);
            if (!var7 || !(var16 < 0.0) && !(var16 > 1.0)) {
               var5.set(var3).fma(var16, var6);
               class="kw">return 1;
            } else {
               class="kw">return 0;
            }
         }
      }
   }

   class="kw">public class="kw">static double intersectLineSphereLerp(
      @Nonnull Vector3d var0,
      double var1,
      @Nonnull Vector3d var3,
      @Nonnull Vector3d var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6,
      @Nonnull Vector3d var7
   ) {
      var5.set(var4).sub(var3).mul(var7);
      var6.set(var3).sub(var0).mul(var7);
      double var8 = var5.dot(var5);
      double var10 = 2.0 * var5.dot(var6);
      double var12 = var6.dot(var6) - var1 * var1;
      double var14 = var10 * var10 - 4.0 * var8 * var12;
      if (var8 == 0.0) {
         class="kw">return var14 == 0.0 ? 0.0 : 1.0;
      }

      if (var14 < 0.0) {
         class="kw">return 1.0;
      }

      if (var14 == 0.0) {
         double var25 = -var10 / (2.0 * var8);
         class="kw">return !(var25 < 0.0) && !(var25 > 1.0) ? var25 : 1.0;
      }

      var14 = Math.sqrt(var14) / (2.0 * var8);
      double var16 = -var10 / (2.0 * var8);
      double var18 = var16 - var14;
      double var20 = var16 + var14;
      if (var20 < var18) {
         double var22 = var18;
         var18 = var20;
         var20 = var22;
      }

      if (var18 > 1.0) {
         class="kw">return 1.0;
      } else if (var18 >= 0.0) {
         class="kw">return var18;
      } else {
         class="kw">return var20 >= 0.0 && var20 <= 1.0 ? var20 : 1.0;
      }
   }

   class="kw">public class="kw">static double intersectLineSphereLerp(@Nonnull Vector3d var0, double var1, @Nonnull Vector3d var3, @Nonnull Vector3d var4, @Nonnull Vector3d var5) {
      class="kw">return intersectLineSphereLerp(var0, var1, var3, var4, new Vector3d(), new Vector3d(), var5);
   }

   class="kw">public class="kw">static double dotProduct(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      double var3 = var1.x - var0.x;
      double var5 = var1.y - var0.y;
      double var7 = var1.z - var0.z;
      double var9 = var2.x - var0.x;
      double var11 = var2.y - var0.y;
      double var13 = var2.z - var0.z;
      class="kw">return var3 * var9 + var5 * var11 + var7 * var13;
   }

   class="kw">public class="kw">static double dotProduct(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
      double var4 = (var1.x - var0.x) * var3.x;
      double var6 = (var1.y - var0.y) * var3.y;
      double var8 = (var1.z - var0.z) * var3.z;
      double var10 = (var2.x - var0.x) * var3.x;
      double var12 = (var2.y - var0.y) * var3.y;
      double var14 = (var2.z - var0.z) * var3.z;
      class="kw">return var4 * var10 + var6 * var12 + var8 * var14;
   }

   class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4) {
      class="kw">return var0 * var0 + var2 * var2 + var4 * var4;
   }

   class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4, double var6, double var8, double var10) {
      class="kw">return var0 * var6 + var2 * var8 + var4 * var10;
   }

   class="kw">public class="kw">static double dotProduct(float var0, float var1, float var2) {
      class="kw">return var0 * var0 + var1 * var1 + var2 * var2;
   }

   class="kw">public class="kw">static double dotProduct(float var0, float var1, float var2, float var3, float var4, float var5) {
      class="kw">return var0 * var3 + var1 * var4 + var2 * var5;
   }

   class="kw">private class="kw">static double length(double var0, double var2, double var4) {
      class="kw">return Math.sqrt(dotProduct(var0, var2, var4));
   }

   class="kw">public class="kw">static void lerpDistance(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
      lerp(var0, var1, var2 / var0.distance(var1), var4);
   }

   class="kw">public class="kw">static void lerp(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
      double var5 = var1.x - var0.x;
      double var7 = var1.y - var0.y;
      double var9 = var1.z - var0.z;
      offsetVector(var0, var5, var7, var9, var2, var4);
   }

   class="kw">public class="kw">static double lerp(double var0, double var2, double var4) {
      class="kw">return (1.0 - var4) * var0 + var4 * var2;
   }

   class="kw">public class="kw">static void offsetVector(@Nonnull Vector3d var0, double var1, double var3, double var5, double var7, @Nonnull Vector3d var9) {
      var9.set(var0.x + var7 * var1, var0.y + var7 * var3, var0.z + var7 * var5);
   }

   class="kw">public class="kw">static void offsetVector(double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull Vector3d var14) {
      var14.set(var0 + var12 * var6, var2 + var12 * var8, var4 + var12 * var10);
   }

   class="kw">public class="kw">static void orthoComposition(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, double var3, @Nonnull Vector3d var5) {
      double var6 = var1.x - var0.x;
      double var8 = var1.y - var0.y;
      double var10 = var1.z - var0.z;
      double var12 = var8 * var2.z - var10 * var2.y;
      double var14 = var10 * var2.x - var6 * var2.z;
      double var16 = var6 * var2.y - var8 * var2.x;
      offsetVector(var1, var12, var14, var16, var3 / length(var12, var14, var16), var5);
   }

   class="kw">public class="kw">static void orthoComposition(
      @Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2, @Nonnull Vector3dc var4, double var5, @Nonnull Vector3d var7
   ) {
      double var8 = var1.x() - var0.x();
      double var10 = var1.y() - var0.y();
      double var12 = var1.z() - var0.z();
      double var14 = var10 * var4.z() - var12 * var4.y();
      double var16 = var12 * var4.x() - var8 * var4.z();
      double var18 = var8 * var4.y() - var10 * var4.x();
      double var20 = var2 / length(var8, var10, var12);
      offsetVector(var0.x() + var20 * var8, var0.y() + var20 * var10, var0.z() + var20 * var12, var14, var16, var18, var5 / length(var14, var16, var18), var7);
   }

   class="kw">public class="kw">static float lookatHeading(@Nonnull Vector3d var0, @Nonnull Vector3d var1, float var2) {
      double var3 = var1.x - var0.x;
      double var5 = var1.z - var0.z;
      class="kw">return var3 == 0.0 && var5 == 0.0 ? var2 : PhysicsMath.headingFromDirection(var3, var5);
   }

   class="kw">public class="kw">static double blockEmptySpace(@Nullable BlockType var0, int var1, @Nonnull NPCPhysicsMath.Direction var2) {
      if (var0 == null) {
         class="kw">return 1.0;
      }

      if (var0 != BlockType.EMPTY && var0.getMaterial() == BlockMaterial.Solid) {
         BlockBoundingBoxes var3 = BlockBoundingBoxes.getAssetMap().getAsset(var0.getHitboxTypeIndex());
         if (var3 == null) {
            class="kw">return 1.0;
         }

         Box var4 = var3.get(var1).getBoundingBox();
         double var5;
         class="kw">switch (var2) {
            case POS_X:
               var5 = var4.min.x;
               break;
            case NEG_X:
               var5 = 1.0 - var4.max.x;
               break;
            case POS_Y:
               var5 = var4.min.y;
               break;
            case NEG_Y:
               var5 = 1.0 - var4.max.y;
               break;
            case POS_Z:
               var5 = var4.min.z;
               break;
            case NEG_Z:
               var5 = 1.0 - var4.max.z;
               break;
            class="kw">default:
               class="kw">return 0.0;
         }

         class="kw">return var5 > 0.0 && var5 < 1.0 ? var5 : 0.0;
      } else {
         class="kw">return 1.0;
      }
   }

   class="kw">public class="kw">static double heightOverGround(@Nonnull World var0, double var1, double var3, double var5) {
      int var7 = MathUtil.floor(var1);
      int var8 = MathUtil.floor(var3);
      int var9 = MathUtil.floor(var5);
      ChunkStore var10 = var0.getChunkStore();
      Ref var11 = var10.getChunkReference(ChunkUtil.indexChunkFromBlock(var7, var9));
      if (var11 != null && var11.isValid()) {
         Store var12 = var10.getStore();
         BlockChunk var13 = var12.getComponent(var11, BlockChunk.getComponentType());
         if (var13 == null) {
            class="kw">return var8 + 1;
         }

         BlockSection var14 = var13.getSectionAtBlockY(var8);
         BlockType var15 = BlockType.getAssetMap().getAsset(var14.get(var7, var8, var9));
         int var16 = var14.getRotationIndex(var7, var8, var9);
         class="kw">return var8 + blockHeight(var15, var16);
      } else {
         class="kw">return var8 + 1;
      }
   }

   class="kw">public class="kw">static double heightOverGround(@Nonnull World var0, double var1, double var3) {
      int var5 = MathUtil.floor(var1);
      int var6 = MathUtil.floor(var3);
      ChunkStore var7 = var0.getChunkStore();
      Ref var8 = var7.getChunkReference(ChunkUtil.indexChunkFromBlock(var5, var6));
      if (var8 != null && var8.isValid()) {
         Store var9 = var7.getStore();
         WorldChunk var10 = var9.getComponent(var8, WorldChunk.getComponentType());
         if (var10 == null) {
            class="kw">return -1.0;
         }

         BlockChunk var11 = var9.getComponent(var8, BlockChunk.getComponentType());
         if (var11 == null) {
            class="kw">return -1.0;
         }

         int var12 = var10.getHeight(var5, var6);
         BlockSection var13 = var11.getSectionAtBlockY(var12);
         BlockType var14 = BlockType.getAssetMap().getAsset(var13.get(var5, var12, var6));
         int var15 = var13.getRotationIndex(var5, var12, var6);
         class="kw">return var12 + blockHeight(var14, var15);
      } else {
         class="kw">return -1.0;
      }
   }

   class="kw">public class="kw">static double blockHeight(@Nullable BlockType var0, int var1) {
      class="kw">return 1.0 - blockEmptySpace(var0, var1, NPCPhysicsMath.Direction.NEG_Y);
   }

   class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4, @Nonnull Vector3d var6) {
      class="kw">return var0 * var0 * var6.x + var2 * var2 * var6.y + var4 * var4 * var6.z;
   }

   class="kw">public class="kw">static double dotProduct(double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull Vector3d var12) {
      class="kw">return var0 * var6 * var12.x + var2 * var8 * var12.y + var4 * var10 * var12.z;
   }

   class="kw">public class="kw">static double projectedLengthSquared(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return dotProduct(var0.x, var0.y, var0.z, var1);
   }

   class="kw">public class="kw">static double projectedLength(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      class="kw">return Math.sqrt(projectedLengthSquared(var0, var1));
   }

   class="kw">public class="kw">static double getMaxBoundingBoxExtent(@Nonnull Box var0, @Nonnull Vector3dc var1) {
      double var2 = 0.0;
      if (var1.x() != 0.0) {
         var2 = var0.width();
      }

      if (var1.y() != 0.0) {
         var2 = Math.max(var2, var0.height());
      }

      if (var1.z() != 0.0) {
         var2 = Math.max(var2, var0.depth());
      }

      class="kw">return var2;
   }

   class="kw">public class="kw">static double getMinBoundingBoxExtent(@Nonnull Box var0, @Nonnull Vector3dc var1) {
      double var2 = Double.MAX_VALUE;
      if (var1.x() != 0.0) {
         var2 = var0.width();
      }

      if (var1.y() != 0.0) {
         var2 = Math.min(var2, var0.height());
      }

      if (var1.z() != 0.0) {
         var2 = Math.min(var2, var0.depth());
      }

      class="kw">return var2 == Double.MAX_VALUE ? 0.0 : var2;
   }

   class="kw">public class="kw">static double getMinBoundingBoxDistance(@Nonnull Box var0, @Nonnull Box var1, @Nonnull Vector3dc var2) {
      double var3 = Double.MAX_VALUE;
      if (var2.x() != 0.0) {
         var3 = var0.width() + var1.width();
      }

      if (var2.y() != 0.0) {
         var3 = Math.min(var3, var0.height() + var1.height());
      }

      if (var2.z() != 0.0) {
         var3 = Math.min(var3, var0.depth() + var1.depth());
      }

      class="kw">return var3 == Double.MAX_VALUE ? 0.0 : var3 / 2.0;
   }

   class="kw">public class="kw">static double dotProductWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return dotProduct(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2);
   }

   class="kw">public class="kw">static double distanceWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return Math.sqrt(distanceSquaredWithSelector(var0, var1, var2));
   }

   class="kw">public class="kw">static double distanceSquaredWithSelector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      double var3 = (var0.x - var1.x) * var2.x;
      double var5 = (var0.y - var1.y) * var2.y;
      double var7 = (var0.z - var1.z) * var2.z;
      class="kw">return var3 * var3 + var5 * var5 + var7 * var7;
   }

   class="kw">public class="kw">static int intersectSweptSpheres(
      @Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3, double var4, @Nonnull Vector3d var6, double[] var7
   ) {
      class="kw">return intersectSweptSpheres(var0.x, var0.y, var0.z, var1.x, var1.y, var1.z, var2.x, var2.y, var2.z, var3.x, var3.y, var3.z, var4, var6, var7);
   }

   class="kw">public class="kw">static int intersectSweptSpheresFootpoint(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      double var2,
      @Nonnull Vector3d var4,
      @Nonnull Vector3d var5,
      double var6,
      @Nonnull Vector3dc var8,
      double[] var9
   ) {
      class="kw">return intersectSweptSpheres(
         var0.x, var0.y + var2, var0.z, var1.x, var1.y, var1.z, var4.x, var4.y + var6, var4.z, var5.x, var5.y, var5.z, var2 + var6, var8, var9
      );
   }

   class="kw">public class="kw">static int intersectSweptSpheres(
      double var0,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      double var14,
      double var16,
      double var18,
      double var20,
      double var22,
      double var24,
      @Nonnull Vector3dc var26,
      double[] var27
   ) {
      double var28 = (var12 - var0) * var26.x();
      double var30 = (var14 - var2) * var26.y();
      double var32 = (var16 - var4) * var26.z();
      double var34 = (var18 - var6) * var26.x();
      double var36 = (var20 - var8) * var26.y();
      double var38 = (var22 - var10) * var26.z();
      double var40 = dotProduct(var34, var36, var38);
      double var42 = 2.0 * dotProduct(var28, var30, var32, var34, var36, var38);
      double var44 = dotProduct(var28, var30, var32) - var24 * var24;
      double var46 = var42 * var42 - 4.0 * var40 * var44;
      if (var46 < 0.0) {
         class="kw">return 0;
      } else {
         var27[0] = -var42 / (2.0 * var40);
         var27[1] = var27[0];
         if (var46 == 0.0) {
            class="kw">return 1;
         } else {
            var46 = Math.sqrt(var46) / (2.0 * var40);
            var27[0] -= var46;
            var27[1] += var46;
            if (var27[0] >= var27[1]) {
               throw new IllegalArgumentException("IntersectSweptSpheres: Near result larger far result");
            } else {
               class="kw">return 2;
            }
         }
      }
   }

   class="kw">public class="kw">static double collisionSphereRadius(@Nonnull Box var0) {
      class="kw">return collisionSphereRadius(var0.max.x - var0.min.x, var0.max.z - var0.min.z, var0.max.y - var0.min.y);
   }

   class="kw">public class="kw">static double collisionSphereRadius(double var0, double var2, double var4) {
      class="kw">return Math.pow(var0 * var4 * var2 * 3.0 / (float) (Math.PI * 4), 0.3333333333333333);
   }

   class="kw">public class="kw">static double collisionSphereRadius(@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1) {
      NPCEntity var2 = var1.getComponent(var0, NPCEntity.getComponentType());
      if (var2 != null) {
         Role var3 = var2.getRole();
         double var4 = var3 != null ? var3.getCollisionRadius() : -1.0;
         if (var4 >= 0.0) {
            class="kw">return var4;
         }
      }

      BoundingBox var6 = var1.getComponent(var0, BoundingBox.getComponentType());
      Box var7 = var6 != null ? var6.getBoundingBox() : null;
      class="kw">return var7 != null ? collisionSphereRadius(var7.width(), var7.depth(), var7.height()) : 0.75;
   }

   class="kw">public class="kw">static double rayCircleIntersect(double var0, double var2, double var4, double var6, double var8) {
      double var10 = var4 * var4 + var6 * var6;
      double var12 = 2.0 * (var0 * var4 + var2 * var6);
      double var14 = var0 * var0 + var2 * var2 - var8 * var8;
      double var16 = var12 * var12 - 4.0 * var10 * var14;
      if (var16 < 0.0) {
         class="kw">return -1.0;
      } else {
         var16 = Math.sqrt(var16);
         var10 *= 2.0;
         double var18 = (-var12 - var16) / var10;
         double var20 = (-var12 + var16) / var10;
         if (var18 < 0.0) {
            class="kw">return var20 < 0.0 ? -1.0 : var20;
         } else if (var20 < 0.0) {
            class="kw">return var18;
         } else {
            class="kw">return var18 < var20 ? var18 : var20;
         }
      }
   }

   class="kw">public class="kw">static double rayCircleIntersect(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Vector3dc var2, double var3, @Nonnull Vector3dc var5) {
      if (var5.x() == 0.0) {
         class="kw">return rayCircleIntersect(var0.y() - var2.y(), var0.z() - var2.z(), var1.y() - var0.y(), var1.z() - var0.z(), var3);
      } else {
         class="kw">return var5.y() == 0.0
            ? rayCircleIntersect(var0.x() - var2.x(), var0.z() - var2.z(), var1.x() - var0.x(), var1.z() - var0.z(), var3)
            : rayCircleIntersect(var0.x() - var2.x(), var0.y() - var2.y(), var1.x() - var0.x(), var1.y() - var0.y(), var3);
      }
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d projection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      var2.set(var0).mul(var1.dot(var0) / var0.dot(var0));
      class="kw">return var2;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d rejection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      projection(var0, var1, var2);
      var2.negate().add(var1);
      class="kw">return var2;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d subtractVector(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return var2.set(var0.x - var1.x, var0.y - var1.y, var0.z - var1.z);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d addDifference(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return var0.add(var1.x - var2.x, var1.y - var2.y, var1.z - var2.z);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d projection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
      subtractVector(var1, var0, var3).mul(dotProduct(var0, var2, var1) / dotProduct(var0, var1, var1));
      class="kw">return var3;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d rejection(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
      projection(var0, var1, var2, var3).negate();
      addDifference(var3, var2, var0);
      class="kw">return var3;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d multiply(@Nonnull Vector3d var0, @Nonnull Vector3d var1) {
      var0.x = var0.x * var1.x;
      var0.y = var0.y * var1.y;
      var0.z = var0.z * var1.z;
      class="kw">return var0;
   }

   class="kw">public class="kw">static double squaredDistProjected(double var0, double var2, double var4, @Nonnull Vector3d var6, @Nonnull Vector3dc var7) {
      class="kw">return squaredDistProjected(var0, var2, var4, var6.x, var6.y, var6.z, var7);
   }

   class="kw">public class="kw">static double squaredDistProjected(double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull Vector3dc var12) {
      double var13 = 0.0;
      if (var12.x() == 0.0) {
         double var15 = var6 - var0;
         var13 += var15 * var15;
      }

      if (var12.y() == 0.0) {
         double var17 = var8 - var2;
         var13 += var17 * var17;
      }

      if (var12.z() == 0.0) {
         double var18 = var10 - var4;
         var13 += var18 * var18;
      }

      class="kw">return var13;
   }

   class="kw">public class="kw">static double getProjectedDifference(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return (var0.x - var1.x) * (1.0 - var2.x) + (var0.y - var1.y) * (1.0 - var2.y) + (var0.z - var1.z) * (1.0 - var2.z);
   }

   class="kw">public class="kw">static boolean isInvalid(double var0) {
      class="kw">return Double.isNaN(var0) || Double.isInfinite(var0);
   }

   class="kw">public class="kw">static boolean isInvalid(@Nonnull Vector3d var0) {
      class="kw">return isInvalid(var0.x) || isInvalid(var0.y) || isInvalid(var0.z);
   }

   class="kw">public class="kw">static boolean isValid(double var0) {
      class="kw">return Double.isFinite(var0);
   }

   class="kw">public class="kw">static boolean isValid(@Nonnull Vector3d var0) {
      class="kw">return isValid(var0.x) && isValid(var0.y) && isValid(var0.z);
   }

   class="kw">public class="kw">static double jumpParameters(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, @Nonnull Vector3d var4) {
      double var5 = var1.x - var0.x;
      double var7 = var1.z - var0.z;
      double var9 = Math.sqrt(var5 * var5 + var7 * var7);
      double var11 = var1.y - var0.y;
      double var13 = Math.sqrt(var9 * var9 + var11 * var11);
      double var15 = var11 + var13;
      double var17 = var11 - var13;
      double var19 = Math.sqrt(var15 / var2);
      float var21 = TrigMathUtil.atan(-var19 * var19 / (var2 * var9));
      var4.set(var5, TrigMathUtil.sin(var21) * var9, var7).normalize(var19);
      class="kw">return var19;
   }

   class="kw">public class="kw">static double accelerate(double var0, double var2, double var4, double var6) {
      var0 += var2 * var4;
      if (var0 > var6) {
         var0 = var6;
      }

      class="kw">return var0;
   }

   class="kw">public class="kw">static double deccelerateToStop(double var0, double var2, double var4) {
      if (var0 < 0.0) {
         var0 += var2 * var4;
         if (var0 > 0.0) {
            var0 = 0.0;
         }
      } else {
         var0 -= var2 * var4;
         if (var0 < 0.0) {
            var0 = 0.0;
         }
      }

      class="kw">return var0;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d deccelerateToStop(@Nonnull Vector3d var0, double var1, double var3) {
      var0.x = deccelerateToStop(var0.x, var1, var3);
      var0.y = deccelerateToStop(var0.y, var1, var3);
      var0.z = deccelerateToStop(var0.z, var1, var3);
      class="kw">return var0;
   }

   class="kw">public class="kw">static double accelerateDrag(double var0, double var2, double var4, double var6, double var8) {
      class="kw">return var0 + var4 * var2 * (1.0 - Math.pow(Math.abs(var0 / var6), var8));
   }

   class="kw">public class="kw">static double accelerateDragCapped(double var0, double var2, double var4, double var6, double var8) {
      var0 = accelerateDrag(var0, var2, var4, var6, var8);
      class="kw">return var0 <= var6 ? var0 : var6;
   }

   class="kw">public class="kw">static double accelerateDrag(double var0, double var2, double var4, double var6) {
      class="kw">return accelerateDrag(var0, var2, var4, var6, 3.0);
   }

   class="kw">public class="kw">static double accelerateDragCapped(double var0, double var2, double var4, double var6) {
      class="kw">return accelerateDragCapped(var0, var2, var4, var6, 3.0);
   }

   class="kw">public class="kw">static double accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8, double var10, double var12) {
      var2 = MathUtil.clamp(var2, var10, var12);
      if (var0 == var2) {
         class="kw">return var2;
      }

      double var14;
      if (var0 == 0.0) {
         var14 = 0.0;
      } else if (var0 > 0.0) {
         var14 = -var6 * Math.pow(Math.abs(var0 / var12), 3.0);
      } else if (var10 < 0.0) {
         var14 = var8 * Math.pow(Math.abs(var0 / var10), 3.0);
      } else {
         var14 = var6 * Math.pow(Math.abs(var0 / var12), 3.0);
      }

      if (var0 < var2) {
         double var19 = var0 + var4 * (var14 + var6);
         class="kw">return var19 > var2 ? var2 : var19;
      } else {
         double var16 = var0 + var4 * (var14 - var8);
         class="kw">return var16 < var2 ? var2 : var16;
      }
   }

   class="kw">public class="kw">static double accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8, double var10) {
      class="kw">return accelerateToTargetSpeed(var0, var2, var4, var6, var8, 0.0, var10);
   }

   class="kw">public class="kw">static double accelerateToTargetSpeed(double var0, double var2, double var4, double var6, double var8) {
      class="kw">return accelerateToTargetSpeed(var0, var2, var4, var6, var6, 0.0, var8);
   }

   class="kw">public class="kw">static double gravityDrag(double var0, double var2, double var4, double var6, double var8) {
      double var10 = Math.abs(var0 / var6);
      double var12 = Math.pow(var10, var8);
      double var14 = var2 * var12;
      if (var0 < 0.0) {
         double var18 = var0 - var4 * (var2 - var14);
         class="kw">return var0 < -var6 && var18 > -var6 ? -var6 : var18;
      } else {
         double var16 = var0 - var4 * (var2 + var14);
         class="kw">return var0 > var6 && var16 < var6 ? var6 : var16;
      }
   }

   class="kw">public class="kw">static double gravityDrag(double var0, double var2, double var4, double var6) {
      class="kw">return gravityDrag(var0, var2, var4, var6, 3.0);
   }

   class="kw">public enum Direction {
      POS_X,
      NEG_X,
      POS_Y,
      NEG_Y,
      POS_Z,
      NEG_Z;

      Direction() {
      }
   }
}