Direction enum

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

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

Поля (1)

МодификаторыТипИмя
POS_X, NEG_X, POS_Y, NEG_Y, POS_Z, NEG_Z

Исходный код

Показать/скрыть
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() {
      }
   }
}