BlockIteratorProcedure interface

Пакет: com.hypixel.hytale.math.iterator

Файл: com/hypixel/hytale/math/iterator/BlockIterator.java

Методы (1)

МодификаторыВозвратСигнатура
abstract boolean acceptboolean accept(int var1, int var2, int var3, double var4, double var6, double var8, double var10, double var12, double var14)

Исходный код

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

class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3dc;
class="kw">import org.joml.Vector3ic;

class="kw">public class="kw">final class BlockIterator {
   class="kw">private BlockIterator() {
      throw new UnsupportedOperationException("This is a utilitiy class. Do not instantiate.");
   }

   class="kw">public class="kw">static boolean iterateFromTo(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, @Nonnull BlockIterator.BlockIteratorProcedure var2) {
      class="kw">return iterateFromTo(var0.x(), var0.y(), var0.z(), var1.x(), var1.y(), var1.z(), var2);
   }

   class="kw">public class="kw">static boolean iterateFromTo(@Nonnull Vector3ic var0, @Nonnull Vector3ic var1, @Nonnull BlockIterator.BlockIteratorProcedure var2) {
      class="kw">return iterateFromTo(var0.x(), var0.y(), var0.z(), var1.x(), var1.y(), var1.z(), var2);
   }

   class="kw">public class="kw">static boolean iterateFromTo(
      double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull BlockIterator.BlockIteratorProcedure var12
   ) {
      double var13 = var6 - var0;
      double var15 = var8 - var2;
      double var17 = var10 - var4;
      double var19 = Math.sqrt(var13 * var13 + var15 * var15 + var17 * var17);
      class="kw">return iterate(var0, var2, var4, var13, var15, var17, var19, var12);
   }

   class="kw">public class="kw">static <T> boolean iterateFromTo(
      double var0, double var2, double var4, double var6, double var8, double var10, @Nonnull BlockIterator.BlockIteratorProcedurePlus1<T> var12, T var13
   ) {
      double var14 = var6 - var0;
      double var16 = var8 - var2;
      double var18 = var10 - var4;
      double var20 = Math.sqrt(var14 * var14 + var16 * var16 + var18 * var18);
      class="kw">return iterate(var0, var2, var4, var14, var16, var18, var20, var12, var13);
   }

   class="kw">public class="kw">static boolean iterate(@Nonnull Vector3dc var0, @Nonnull Vector3dc var1, double var2, @Nonnull BlockIterator.BlockIteratorProcedure var4) {
      class="kw">return iterate(var0.x(), var0.y(), var0.z(), var1.x(), var1.y(), var1.z(), var2, var4);
   }

   class="kw">public class="kw">static boolean iterate(
      double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull BlockIterator.BlockIteratorProcedure var14
   ) {
      checkParameters(var0, var2, var4, var6, var8, var10);
      class="kw">return iterate0(var0, var2, var4, var6, var8, var10, var12, var14);
   }

   class="kw">private class="kw">static boolean iterate0(
      double var0, double var2, double var4, double var6, double var8, double var10, double var12, @Nonnull BlockIterator.BlockIteratorProcedure var14
   ) {
      var12 /= Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10);
      int var15 = (int)BlockIterator.FastMath.fastFloor(var0);
      int var16 = (int)BlockIterator.FastMath.fastFloor(var2);
      int var17 = (int)BlockIterator.FastMath.fastFloor(var4);
      double var18 = var0 - var15;
      double var20 = var2 - var16;
      double var22 = var4 - var17;
      double var24 = 0.0;

      while (var24 <= var12) {
         double var26 = intersection(var18, var20, var22, var6, var8, var10);
         double var28 = var18 + var26 * var6;
         double var30 = var20 + var26 * var8;
         double var32 = var22 + var26 * var10;
         if (!var14.accept(var15, var16, var17, var18, var20, var22, var28, var30, var32)) {
            class="kw">return false;
         }

         if (var6 < 0.0 && BlockIterator.FastMath.sEq(var28, 0.0)) {
            var28++;
            var15--;
         } else if (var6 > 0.0 && BlockIterator.FastMath.gEq(var28, 1.0)) {
            var28--;
            var15++;
         }

         if (var8 < 0.0 && BlockIterator.FastMath.sEq(var30, 0.0)) {
            var30++;
            var16--;
         } else if (var8 > 0.0 && BlockIterator.FastMath.gEq(var30, 1.0)) {
            var30--;
            var16++;
         }

         if (var10 < 0.0 && BlockIterator.FastMath.sEq(var32, 0.0)) {
            var32++;
            var17--;
         } else if (var10 > 0.0 && BlockIterator.FastMath.gEq(var32, 1.0)) {
            var32--;
            var17++;
         }

         var24 += var26;
         var18 = var28;
         var20 = var30;
         var22 = var32;
      }

      class="kw">return true;
   }

   class="kw">public class="kw">static <T> boolean iterate(
      double var0,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      @Nonnull BlockIterator.BlockIteratorProcedurePlus1<T> var14,
      T var15
   ) {
      checkParameters(var0, var2, var4, var6, var8, var10);
      class="kw">return iterate0(var0, var2, var4, var6, var8, var10, var12, var14, var15);
   }

   class="kw">private class="kw">static <T> boolean iterate0(
      double var0,
      double var2,
      double var4,
      double var6,
      double var8,
      double var10,
      double var12,
      @Nonnull BlockIterator.BlockIteratorProcedurePlus1<T> var14,
      T var15
   ) {
      var12 /= Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10);
      int var16 = (int)BlockIterator.FastMath.fastFloor(var0);
      int var17 = (int)BlockIterator.FastMath.fastFloor(var2);
      int var18 = (int)BlockIterator.FastMath.fastFloor(var4);
      double var19 = var0 - var16;
      double var21 = var2 - var17;
      double var23 = var4 - var18;
      double var25 = 0.0;

      while (var25 <= var12) {
         double var27 = intersection(var19, var21, var23, var6, var8, var10);
         double var29 = var19 + var27 * var6;
         double var31 = var21 + var27 * var8;
         double var33 = var23 + var27 * var10;
         if (!var14.accept(var16, var17, var18, var19, var21, var23, var29, var31, var33, var15)) {
            class="kw">return false;
         }

         if (var6 < 0.0 && BlockIterator.FastMath.sEq(var29, 0.0)) {
            var29++;
            var16--;
         } else if (var6 > 0.0 && BlockIterator.FastMath.gEq(var29, 1.0)) {
            var29--;
            var16++;
         }

         if (var8 < 0.0 && BlockIterator.FastMath.sEq(var31, 0.0)) {
            var31++;
            var17--;
         } else if (var8 > 0.0 && BlockIterator.FastMath.gEq(var31, 1.0)) {
            var31--;
            var17++;
         }

         if (var10 < 0.0 && BlockIterator.FastMath.sEq(var33, 0.0)) {
            var33++;
            var18--;
         } else if (var10 > 0.0 && BlockIterator.FastMath.gEq(var33, 1.0)) {
            var33--;
            var18++;
         }

         var25 += var27;
         var19 = var29;
         var21 = var31;
         var23 = var33;
      }

      class="kw">return true;
   }

   class="kw">private class="kw">static void checkParameters(double var0, double var2, double var4, double var6, double var8, double var10) {
      if (isNonValidNumber(var0)) {
         throw new IllegalArgumentException("sx is a non-valid number! Given: " + var0);
      }

      if (isNonValidNumber(var2)) {
         throw new IllegalArgumentException("sy is a non-valid number! Given: " + var2);
      }

      if (isNonValidNumber(var4)) {
         throw new IllegalArgumentException("sz is a non-valid number! Given: " + var4);
      }

      if (isNonValidNumber(var6)) {
         throw new IllegalArgumentException("dx is a non-valid number! Given: " + var6);
      }

      if (isNonValidNumber(var8)) {
         throw new IllegalArgumentException("dy is a non-valid number! Given: " + var8);
      }

      if (isNonValidNumber(var10)) {
         throw new IllegalArgumentException("dz is a non-valid number! Given: " + var10);
      }

      if (isZeroDirection(var6, var8, var10)) {
         throw new IllegalArgumentException("Direction is ZERO! Given: (" + var6 + ", " + var8 + ", " + var10 + ")");
      }
   }

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

   class="kw">public class="kw">static boolean isZeroDirection(double var0, double var2, double var4) {
      class="kw">return BlockIterator.FastMath.eq(var0, 0.0) && BlockIterator.FastMath.eq(var2, 0.0) && BlockIterator.FastMath.eq(var4, 0.0);
   }

   class="kw">private class="kw">static double intersection(double var0, double var2, double var4, double var6, double var8, double var10) {
      double var12 = 0.0;
      if (var6 < 0.0) {
         double var14 = -var0 / var6;
         double var16 = var4 + var10 * var14;
         double var18 = var2 + var8 * var14;
         if (var14 > var12
            && BlockIterator.FastMath.gEq(var16, 0.0)
            && BlockIterator.FastMath.sEq(var16, 1.0)
            && BlockIterator.FastMath.gEq(var18, 0.0)
            && BlockIterator.FastMath.sEq(var18, 1.0)) {
            var12 = var14;
         }
      } else if (var6 > 0.0) {
         double var20 = (1.0 - var0) / var6;
         double var25 = var4 + var10 * var20;
         double var30 = var2 + var8 * var20;
         if (var20 > var12
            && BlockIterator.FastMath.gEq(var25, 0.0)
            && BlockIterator.FastMath.sEq(var25, 1.0)
            && BlockIterator.FastMath.gEq(var30, 0.0)
            && BlockIterator.FastMath.sEq(var30, 1.0)) {
            var12 = var20;
         }
      }

      if (var8 < 0.0) {
         double var21 = -var2 / var8;
         double var26 = var0 + var6 * var21;
         double var31 = var4 + var10 * var21;
         if (var21 > var12
            && BlockIterator.FastMath.gEq(var26, 0.0)
            && BlockIterator.FastMath.sEq(var26, 1.0)
            && BlockIterator.FastMath.gEq(var31, 0.0)
            && BlockIterator.FastMath.sEq(var31, 1.0)) {
            var12 = var21;
         }
      } else if (var8 > 0.0) {
         double var22 = (1.0 - var2) / var8;
         double var27 = var0 + var6 * var22;
         double var32 = var4 + var10 * var22;
         if (var22 > var12
            && BlockIterator.FastMath.gEq(var27, 0.0)
            && BlockIterator.FastMath.sEq(var27, 1.0)
            && BlockIterator.FastMath.gEq(var32, 0.0)
            && BlockIterator.FastMath.sEq(var32, 1.0)) {
            var12 = var22;
         }
      }

      if (var10 < 0.0) {
         double var23 = -var4 / var10;
         double var28 = var0 + var6 * var23;
         double var33 = var2 + var8 * var23;
         if (var23 > var12
            && BlockIterator.FastMath.gEq(var28, 0.0)
            && BlockIterator.FastMath.sEq(var28, 1.0)
            && BlockIterator.FastMath.gEq(var33, 0.0)
            && BlockIterator.FastMath.sEq(var33, 1.0)) {
            var12 = var23;
         }
      } else if (var10 > 0.0) {
         double var24 = (1.0 - var4) / var10;
         double var29 = var0 + var6 * var24;
         double var34 = var2 + var8 * var24;
         if (var24 > var12
            && BlockIterator.FastMath.gEq(var29, 0.0)
            && BlockIterator.FastMath.sEq(var29, 1.0)
            && BlockIterator.FastMath.gEq(var34, 0.0)
            && BlockIterator.FastMath.sEq(var34, 1.0)) {
            var12 = var24;
         }
      }

      class="kw">return var12;
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BlockIteratorProcedure {
      boolean accept(int var1, int var2, int var3, double var4, double var6, double var8, double var10, double var12, double var14);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BlockIteratorProcedurePlus1<T> {
      boolean accept(int var1, int var2, int var3, double var4, double var6, double var8, double var10, double var12, double var14, T var16);
   }

   class="kw">static class FastMath {
      class="kw">static class="kw">final double TWO_POWER_52 = 4.5035996E15F;
      class="kw">static class="kw">final double ROUNDING_ERROR = 1.0E-15;

      FastMath() {
      }

      class="kw">static boolean eq(double var0, double var2) {
         class="kw">return abs(var0 - var2) < 1.0E-15;
      }

      class="kw">static boolean sEq(double var0, double var2) {
         class="kw">return var0 <= var2 + 1.0E-15;
      }

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

      class="kw">static double abs(double var0) {
         class="kw">return var0 < 0.0 ? -var0 : var0;
      }

      class="kw">static long fastFloor(double var0) {
         if (!(var0 >= 4.5035996E15F) && !(var0 <= -4.5035996E15F)) {
            long var2 = (long)var0;
            if (var0 < 0.0 && var2 != var0) {
               var2--;
            }

            class="kw">return var2 == 0L ? (long)(var0 * var2) : var2;
         } else {
            class="kw">return (long)var0;
         }
      }
   }
}