Retriever class

Пакет: com.hypixel.hytale.builtin.hytalegenerator

Файл: com/hypixel/hytale/builtin/hytalegenerator/VectorUtil.java

Поля (1)

МодификаторыТипИмя
private int index

Методы (10)

МодификаторыВозвратСигнатура
public int frompublic int from(@Nonnull Vector3i var1)
public int frompublic int from(@Nonnull Vector2i var1)
public double frompublic double from(@Nonnull Vector3d var1)
public double frompublic double from(@Nonnull Vector2d var1)
public int getIndexpublic int getIndex()
public static VectorUtil.Retriever ofIndexpublic static VectorUtil.Retriever ofIndex(int var0)
return switchreturn switch(this.index)
return switchreturn switch(this.index)
return switchreturn switch(this.index)
return switchreturn switch(this.index)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.math.Calculator;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import it.unimi.dsi.fastutil.doubles.DoubleObjectPair;
class="kw">import java.math.BigDecimal;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector2d;
class="kw">import org.joml.Vector2i;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;
class="kw">import org.joml.Vector3i;
class="kw">import org.joml.Vector3ic;

class="kw">public class VectorUtil {
   class="kw">public VectorUtil() {
   }

   @Nonnull
   class="kw">public class="kw">static String toString(@Nonnull Vector3dc var0) {
      class="kw">return "{x="
         + BigDecimal.valueOf(var0.x()).toPlainString()
         + ", y="
         + BigDecimal.valueOf(var0.y()).toPlainString()
         + ", z="
         + BigDecimal.valueOf(var0.z()).toPlainString()
         + "}";
   }

   @Nonnull
   class="kw">public class="kw">static String toString(@Nonnull Vector3ic var0) {
      class="kw">return "{x=" + var0.x() + ", y=" + var0.y() + ", z=" + var0.z() + "}";
   }

   class="kw">public class="kw">static void nextDown(@Nonnull Vector3d var0) {
      var0.x = Math.nextDown(var0.x);
      var0.y = Math.nextDown(var0.y);
      var0.z = Math.nextDown(var0.z);
   }

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

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

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

   class="kw">public class="kw">static void assignFloored(@Nonnull Vector3i var0, @Nonnull Vector3d var1) {
      var0.x = (int)Math.floor(var1.x);
      var0.y = (int)Math.floor(var1.y);
      var0.z = (int)Math.floor(var1.z);
   }

   class="kw">public class="kw">static boolean areasOverlap(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, @Nonnull Vector3d var3) {
      class="kw">return isAnyGreater(var1, var2) && isAnySmaller(var0, var3);
   }

   class="kw">public class="kw">static double distanceToSegment3d(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull Vector3dc var2) {
      Vector3d var3 = new Vector3d(var2).fma(-1.0, var1);
      Vector3d var4 = new Vector3d(var0).fma(-1.0, var1);
      double var5 = var3.length();
      Vector3d var7 = new Vector3d(var3).normalize(1.0);
      Vector3d var8 = new Vector3d(var4).mul(1.0 / var5);
      double var9 = var7.dot(var8);
      var9 = Calculator.clamp(0.0, var9, 1.0);
      Vector3d var11 = new Vector3d(var3).mul(var9);
      class="kw">return var11.distance(var4);
   }

   class="kw">public class="kw">static double distanceToLine3d(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      @Nonnull Vector3d var2,
      @Nonnull Vector3d var3,
      @Nonnull Vector3d var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6,
      @Nonnull Vector3d var7
   ) {
      var3.set(var2).sub(var1);
      var4.set(var0).sub(var1);
      double var8 = var3.length();
      var5.set(var3).normalize(1.0);
      var6.set(var4).mul(1.0 / var8);
      double var10 = var5.dot(var6);
      var7.set(var3).mul(var10);
      class="kw">return var7.distance(var4);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d nearestPointOnSegment3d(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      Vector3d var3 = new Vector3d(var2).fma(-1.0, var1);
      Vector3d var4 = new Vector3d(var0).fma(-1.0, var1);
      double var5 = var3.length();
      Vector3d var7 = new Vector3d(var3).normalize(1.0);
      Vector3d var8 = new Vector3d(var4).mul(1.0 / var5);
      double var9 = var7.dot(var8);
      var9 = Calculator.clamp(0.0, var9, 1.0);
      Vector3d var11 = new Vector3d(var3).mul(var9);
      class="kw">return var11.add(var1);
   }

   class="kw">public class="kw">static void nearestPointOnLine3d(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      @Nonnull Vector3d var2,
      @Nonnull Vector3d var3,
      @Nonnull Vector3d var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6,
      @Nonnull Vector3d var7
   ) {
      var4.set(var2).sub(var1);
      var5.set(var0).sub(var1);
      double var8 = var4.length();
      var6.set(var4).normalize(1.0);
      var7.set(var5).mul(1.0 / var8);
      double var10 = var6.dot(var7);
      var3.set(var4).mul(var10);
      var3.add(var1);
   }

   class="kw">public class="kw">static boolean[] shortestSegmentBetweenTwoSegments(
      @Nonnull Vector3d var0,
      @Nonnull Vector3d var1,
      @Nonnull Vector3d var2,
      @Nonnull Vector3d var3,
      boolean var4,
      @Nonnull Vector3d var5,
      @Nonnull Vector3d var6
   ) {
      boolean[] var7 = new boolean[2];
      Vector3d var8 = new Vector3d(var1).fma(-1.0, var0);
      Vector3d var9 = new Vector3d(var3).fma(-1.0, var2);
      double var10 = var8.length();
      double var12 = var9.length();
      Vector3d var14 = new Vector3d(var8).mul(1.0 / var10);
      Vector3d var15 = new Vector3d(var9).mul(1.0 / var12);
      Vector3d var16 = var14.cross(var15, new Vector3d());
      double var17 = Math.pow(var16.length(), 2.0);
      if (var17 == 0.0) {
         var7[0] = true;
         double var32 = var14.dot(new Vector3d(var2).fma(-1.0, var0));
         if (var4) {
            double var21 = var14.dot(new Vector3d(var3).fma(-1.0, var0));
            if (var32 <= 0.0 && var21 <= 0.0) {
               if (Math.abs(var32) < Math.abs(var21)) {
                  var5.set(var0);
                  var6.set(var2);
                  var7[1] = true;
                  class="kw">return var7;
               }

               var5.set(var0);
               var6.set(var3);
               var7[1] = true;
               class="kw">return var7;
            }

            if (var32 >= var10 && var21 >= var10) {
               if (Math.abs(var32) < Math.abs(var21)) {
                  var5.set(var1);
                  var6.set(var2);
                  var7[1] = true;
                  class="kw">return var7;
               }

               var5.set(var1);
               var6.set(var3);
               var7[1] = true;
               class="kw">return var7;
            }
         }

         class="kw">return var7;
      } else {
         Vector3d var19 = new Vector3d(var2).fma(-1.0, var0);
         double var20 = determinant(var19, var15, var16);
         double var22 = determinant(var19, var14, var16);
         double var24 = var20 / var17;
         double var26 = var22 / var17;
         Vector3d var28 = new Vector3d(var14).mul(var24).add(var0);
         Vector3d var29 = new Vector3d(var15).mul(var26).add(var2);
         if (var4) {
            if (var24 < 0.0) {
               var28 = new Vector3d(var0);
            } else if (var24 > var10) {
               var28 = new Vector3d(var1);
            }

            if (var26 < 0.0) {
               var29 = new Vector3d(var2);
            } else if (var26 > var12) {
               var29 = new Vector3d(var3);
            }

            if (var24 < 0.0 || var24 > var10) {
               double var30 = var15.dot(new Vector3d(var28).fma(-1.0, var2));
               if (var30 < 0.0) {
                  var30 = 0.0;
               } else if (var30 > var12) {
                  var30 = var12;
               }

               var29 = new Vector3d(var2).add(new Vector3d(var15).mul(var30));
            }

            if (var26 < 0.0 || var26 > var12) {
               double var33 = var14.dot(new Vector3d(var29).fma(-1.0, var0));
               if (var33 < 0.0) {
                  var33 = 0.0;
               } else if (var33 > var10) {
                  var33 = var10;
               }

               var28 = new Vector3d(var0).add(new Vector3d(var14).mul(var33));
            }
         }

         var5.set(var28);
         var6.set(var29);
         var7[1] = true;
         class="kw">return var7;
      }
   }

   class="kw">public class="kw">static double determinant(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1) {
      Vector3d var2 = var0.cross(var1, new Vector3d());
      class="kw">return var2.length();
   }

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

   @Nonnull
   class="kw">public class="kw">static DoubleObjectPair<Vector3d> distanceAndNearestPointOnSegment3d(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      Vector3d var3 = new Vector3d(var2).fma(-1.0, var1);
      Vector3d var4 = new Vector3d(var0).fma(-1.0, var1);
      double var5 = var3.length();
      Vector3d var7 = new Vector3d(var3).normalize(1.0);
      Vector3d var8 = new Vector3d(var4).mul(1.0 / var5);
      double var9 = var7.dot(var8);
      var9 = Calculator.clamp(0.0, var9, 1.0);
      Vector3d var11 = new Vector3d(var3).mul(var9);
      class="kw">return DoubleObjectPair.of(var11.distance(var4), var11.add(var1));
   }

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

   class="kw">public class="kw">static void rotateAroundAxis(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2) {
      Vector3d var4 = new Vector3d(var1);
      var4.normalize();
      double var5 = var4.x * (var4.x * var0.x + var4.y * var0.y + var4.z * var0.z) * (1.0 - Math.cos(var2))
         + var0.x * Math.cos(var2)
         + (-var4.z * var0.y + var4.y * var0.z) * Math.sin(var2);
      double var7 = var4.y * (var4.x * var0.x + var4.y * var0.y + var4.z * var0.z) * (1.0 - Math.cos(var2))
         + var0.y * Math.cos(var2)
         + (var4.z * var0.x - var4.x * var0.z) * Math.sin(var2);
      double var9 = var4.z * (var4.x * var0.x + var4.y * var0.y + var4.z * var0.z) * (1.0 - Math.cos(var2))
         + var0.z * Math.cos(var2)
         + (-var4.y * var0.x + var4.x * var0.y) * Math.sin(var2);
      var0.x = var5;
      var0.y = var7;
      var0.z = var9;
   }

   class="kw">public class="kw">static void rotateVectorByAxisAngle(@Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2) {
      Vector3d var10 = var1.cross(var0, new Vector3d());
      double var11 = Math.cos(var2);
      double var13 = Math.sin(var2);
      double var4 = var0.x * var11 + var10.x * var13 + var1.x * var1.dot(var0) * (1.0 - var11);
      double var6 = var0.y * var11 + var10.y * var13 + var1.y * var1.dot(var0) * (1.0 - var11);
      double var8 = var0.z * var11 + var10.z * var13 + var1.z * var1.dot(var0) * (1.0 - var11);
      var0.x = var4;
      var0.y = var6;
      var0.z = var8;
   }

   class="kw">public class="kw">static boolean isInside(@Nonnull Vector3i var0, @Nonnull Vector3i var1, @Nonnull Vector3i var2) {
      class="kw">return var0.x >= var1.x && var0.x < var2.x && var0.y >= var1.y && var0.y < var2.y && var0.z >= var1.z && var0.z < var2.z;
   }

   class="kw">public class="kw">static boolean isInside(@Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2) {
      class="kw">return !isAnySmaller(var0, var1) && isSmaller(var0, var2);
   }

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

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

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

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector3i var0, @Nonnull Vector3i var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y || var0.z < var1.z;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector3i var0, @Nonnull Vector3i var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y || var0.z > var1.z;
   }

   class="kw">public class="kw">static boolean isInside(@Nonnull Vector2d var0, @Nonnull Vector2d var1, @Nonnull Vector2d var2) {
      class="kw">return !isAnySmaller(var0, var1) && isSmaller(var0, var2);
   }

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector2d var0, @Nonnull Vector2d var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isSmaller(@Nonnull Vector2d var0, @Nonnull Vector2d var1) {
      class="kw">return var0.x < var1.x && var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector2d var0, @Nonnull Vector2d var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y;
   }

   class="kw">public class="kw">static boolean isAnySmaller(@Nonnull Vector2i var0, @Nonnull Vector2i var1) {
      class="kw">return var0.x < var1.x || var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isSmaller(@Nonnull Vector2i var0, @Nonnull Vector2i var1) {
      class="kw">return var0.x < var1.x && var0.y < var1.y;
   }

   class="kw">public class="kw">static boolean isAnyGreater(@Nonnull Vector2i var0, @Nonnull Vector2i var1) {
      class="kw">return var0.x > var1.x || var0.y > var1.y;
   }

   @Nonnull
   class="kw">public class="kw">static Vector3i fromOperation(@Nonnull Vector3i var0, @Nonnull Vector3i var1, @Nonnull VectorUtil.BiOperation3i var2) {
      class="kw">return new Vector3i(
         var2.run(var0.x, var1.x, VectorUtil.Retriever.ofIndex(0)),
         var2.run(var0.y, var1.y, VectorUtil.Retriever.ofIndex(1)),
         var2.run(var0.z, var1.z, VectorUtil.Retriever.ofIndex(2))
      );
   }

   @Nonnull
   class="kw">public class="kw">static Vector3i fromOperation(@Nonnull VectorUtil.NakedOperation3i var0) {
      class="kw">return new Vector3i(var0.run(VectorUtil.Retriever.ofIndex(0)), var0.run(VectorUtil.Retriever.ofIndex(1)), var0.run(VectorUtil.Retriever.ofIndex(2)));
   }

   class="kw">public class="kw">static void bitShiftRight(int var0, @Nonnull Vector3i var1) {
      if (var0 < 0) {
         throw new IllegalArgumentException("negative shift");
      }

      var1.x >>= var0;
      var1.y >>= var0;
      var1.z >>= var0;
   }

   class="kw">public class="kw">static void bitShiftLeft(int var0, @Nonnull Vector3i var1) {
      if (var0 < 0) {
         throw new IllegalArgumentException("negative shift");
      }

      var1.x <<= var0;
      var1.y <<= var0;
      var1.z <<= var0;
   }

   @Nonnull
   class="kw">public class="kw">static List<Vector2i> orderByDistanceFrom(@Nonnull Vector2i var0, @Nonnull List<Vector2i> var1) {
      ArrayList var2 = new ArrayList<>(var1.size());

      for (int var3 = 0; var3 < var1.size(); var3++) {
         Vector2i var4 = var1.get(var3);
         double var5 = Calculator.distance(var4.x, var4.y, var0.x, var0.y);
         var2.add(Pair.of(var5, var4));
      }

      var2.sort(Comparator.comparingDouble(Pair::first));
      ArrayList var7 = new ArrayList<>(var2.size());

      for (Pair var9 : var2) {
         var7.add((Vector2i)var9.second());
      }

      class="kw">return var7;
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BiOperation3i {
      int run(int var1, int var2, @Nonnull VectorUtil.Retriever var3);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface NakedOperation3i {
      int run(@Nonnull VectorUtil.Retriever var1);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface Operation3i {
      int run(int var1, @Nonnull VectorUtil.Retriever var2);
   }

   class="kw">public class="kw">static class Retriever {
      class="kw">private int index;

      class="kw">public Retriever(int var1) {
         this.index = var1;
      }

      @Nonnull
      class="kw">public class="kw">static VectorUtil.Retriever ofIndex(int var0) {
         class="kw">return new VectorUtil.Retriever(var0);
      }

      class="kw">public int getIndex() {
         class="kw">return this.index;
      }

      class="kw">public int from(@Nonnull Vector3i var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            case 2 -> var1.z;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }

      class="kw">public int from(@Nonnull Vector2i var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }

      class="kw">public double from(@Nonnull Vector3d var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            case 2 -> var1.z;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }

      class="kw">public double from(@Nonnull Vector2d var1) {
         class="kw">return class="kw">switch (this.index) {
            case 0 -> var1.x;
            case 1 -> var1.y;
            class="kw">default -> throw new IllegalArgumentException();
         };
      }
   }
}