Box class

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

Файл: com/hypixel/hytale/math/shape/Box.java

implements: Shape

Поля (78)

МодификаторыТипИмя
final Codec<Box> CODEC
double var1
double var1
Box var1
double var1
var1
var1
var1
var1
var1
var1
double var10
var10
int var10
int var11
int var11
double var11
double var12
var12
int var12
int var12
int var13
int var13
double var13
double var14
var14
int var14
int var14
int var15
int var15
double var15
var15
var15
var15
int var16
double var17
double var17
var17
var17
var17
double var19
double var19
var19
double var21
double var21
var21
Vector3d var23
double var23
double var27
var27
double var28
var28
double var29
var29
double var3
double var3
double var3
double var30
var30
double var31
double var32
double var4
double var4
var4
int var4
double var5
int var5
double var5
double var6
var6
int var6
int var7
double var7
double var8
var8
int var8
int var9
double var9

Методы (56)

МодификаторыВозвратСигнатура
static Box centeredCubeBox centeredCube(@Nonnull Vector3dc var0, double var1)
public boolean containsBlockboolean containsBlock(int var1, int var2, int var3)
public boolean containsBlockboolean containsBlock(@Nonnull Vector3ic var1, int var2, int var3, int var4)
static Box cubeBox cube(@Nonnull Vector3dc var0, double var1)
public double depthdouble depth()
public double dimensiondouble dimension(@Nonnull Axis var1)
for for(int var16 = 0; var16 < 8; var16++)
for for(int var16 = var10; var16 <= var13 && var16 >= var10; var16++)
for for(int var17 = var11; var17 <= var14 && var17 >= var11; var17++)
for for(int var18 = var12; var18 <= var15 && var18 >= var12; var18++)
for for(int var17 = var11; var17 <= var14 && var17 >= var11; var17++)
for for(int var18 = var12; var18 <= var15 && var18 >= var12; var18++)
for for(int var19 = var13; var19 <= var16 && var19 >= var13; var19++)
public double getMaximumExtentdouble getMaximumExtent()
public double getMaximumThicknessdouble getMaximumThickness()
public double getThicknessdouble getThickness()
public double getVolumedouble getVolume()
public boolean hasVolumeboolean hasVolume()
public double heightdouble height()
if if(this.min.x > var1.min.x)
if if(this.min.y > var1.min.y)
if if(this.min.z > var1.min.z)
if if(this.max.x < var1.max.x)
if if(this.max.y < var1.max.y)
if if(this.max.z < var1.max.z)
if if(this.min.x > this.max.x)
if if(this.min.y > this.max.y)
if if(this.min.z > this.max.z)
if if(var23.x < var4)
if if(var23.y < var6)
if if(var23.z < var8)
if if(var23.x > var10)
if if(var23.y > var12)
if if(var23.z > var14)
if if(var1 <= 0.0)
if if(var3 <= 0.0)
if if(-this.min.x > var1)
if if(-this.min.y > var1)
if if(-this.min.z > var1)
if if(this.max.x - 1.0 > var1)
if if(this.max.y - 1.0 > var1)
if if(this.max.z - 1.0 > var1)
if if(var19 > var21)
if if(var15 > var17)
if if(var27 > var29)
if if(var15 > var17)
if if(var28 > var30)
public boolean intersectsLineboolean intersectsLine(@Nonnull Vector3dc var1, @Nonnull Vector3dc var2)
public boolean isIntersectingboolean isIntersecting(@Nonnull Box var1)
public boolean isUnitBoxboolean isUnitBox()
public double middleXdouble middleX()
public double middleYdouble middleY()
public double middleZdouble middleZ()
return switchreturn switch(var1)
abstract this this()
public double widthdouble width()

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.function.predicate.TriIntObjPredicate;
class="kw">import com.hypixel.hytale.function.predicate.TriIntPredicate;
class="kw">import com.hypixel.hytale.math.Axis;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;
class="kw">import org.joml.Vector3ic;

class="kw">public class Box class="kw">implements Shape {
   class="kw">public class="kw">static class="kw">final Codec<Box> CODEC = BuilderCodec.builder(Box.class, Box::new)
      .append(new KeyedCodec<>("Min", Vector3dUtil.CODEC), (var0, var1) -> var0.min.set(var1), var0 -> var0.min)
      .add()
      .append(new KeyedCodec<>("Max", Vector3dUtil.CODEC), (var0, var1) -> var0.max.set(var1), var0 -> var0.max)
      .add()
      .validator((var0, var1) -> {
         if (var0.width() <= 0.0) {
            var1.fail("Width is <= 0! Given: " + var0.width());
         }

         if (var0.height() <= 0.0) {
            var1.fail("Height is <= 0! Given: " + var0.height());
         }

         if (var0.depth() <= 0.0) {
            var1.fail("Depth is <= 0! Given: " + var0.depth());
         }
      })
      .build();
   class="kw">public class="kw">static class="kw">final Box UNIT = new Box(Vector3dUtil.ZERO, Vector3dUtil.ALL_ONES);
   class="kw">public class="kw">static class="kw">final Box ZERO = new Box(Vector3dUtil.ZERO, Vector3dUtil.ZERO);
   @Nonnull
   class="kw">public class="kw">final Vector3d min = new Vector3d();
   @Nonnull
   class="kw">public class="kw">final Vector3d max = new Vector3d();

   @Nonnull
   class="kw">public class="kw">static Box horizontallyCentered(double var0, double var2, double var4) {
      class="kw">return new Box(-var0 / 2.0, 0.0, -var4 / 2.0, var0 / 2.0, var2, var4 / 2.0);
   }

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

   class="kw">public Box(@Nonnull Box var1) {
      this();
      this.min.set(var1.min);
      this.max.set(var1.max);
   }

   class="kw">public Box(@Nonnull Vector3dc var1, @Nonnull Vector3dc var2) {
      this();
      this.min.set(var1);
      this.max.set(var2);
   }

   class="kw">public Box(double var1, double var3, double var5, double var7, double var9, double var11) {
      this();
      this.min.set(var1, var3, var5);
      this.max.set(var7, var9, var11);
   }

   class="kw">public class="kw">static Box cube(@Nonnull Vector3dc var0, double var1) {
      class="kw">return new Box(var0.x(), var0.y(), var0.z(), var0.x() + var1, var0.y() + var1, var0.z() + var1);
   }

   class="kw">public class="kw">static Box centeredCube(@Nonnull Vector3dc var0, double var1) {
      class="kw">return new Box(var0.x() - var1, var0.y() - var1, var0.z() - var1, var0.x() + var1, var0.y() + var1, var0.z() + var1);
   }

   @Nonnull
   class="kw">public Box setMinMax(@Nonnull Vector3dc var1, @Nonnull Vector3dc var2) {
      this.min.set(var1);
      this.max.set(var2);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box setMinMax(@Nonnull double[] var1, @Nonnull double[] var2) {
      this.min.set(var1);
      this.max.set(var2);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box setMinMax(@Nonnull float[] var1, @Nonnull float[] var2) {
      this.min.set(var1);
      this.max.set(var2);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box setEmpty() {
      this.setMinMax(Double.MAX_VALUE, -Double.MAX_VALUE);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box setMinMax(double var1, double var3) {
      this.min.set(var1);
      this.max.set(var3);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box union(@Nonnull Box var1) {
      if (this.min.x > var1.min.x) {
         this.min.x = var1.min.x;
      }

      if (this.min.y > var1.min.y) {
         this.min.y = var1.min.y;
      }

      if (this.min.z > var1.min.z) {
         this.min.z = var1.min.z;
      }

      if (this.max.x < var1.max.x) {
         this.max.x = var1.max.x;
      }

      if (this.max.y < var1.max.y) {
         this.max.y = var1.max.y;
      }

      if (this.max.z < var1.max.z) {
         this.max.z = var1.max.z;
      }

      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box assign(@Nonnull Box var1) {
      this.min.set(var1.min);
      this.max.set(var1.max);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box assign(double var1, double var3, double var5, double var7, double var9, double var11) {
      this.min.set(var1, var3, var5);
      this.max.set(var7, var9, var11);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box minkowskiSum(@Nonnull Box var1) {
      this.min.sub(var1.max);
      this.max.sub(var1.min);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box scale(float var1) {
      this.min.mul(var1);
      this.max.mul(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box normalize() {
      if (this.min.x > this.max.x) {
         double var1 = this.min.x;
         this.min.x = this.max.x;
         this.max.x = var1;
      }

      if (this.min.y > this.max.y) {
         double var3 = this.min.y;
         this.min.y = this.max.y;
         this.max.y = var3;
      }

      if (this.min.z > this.max.z) {
         double var4 = this.min.z;
         this.min.z = this.max.z;
         this.max.z = var4;
      }

      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box enclosingRotatedAABB(float var1, float var2, float var3) {
      if (Float.isFinite(var1) && Float.isFinite(var2) && Float.isFinite(var3)) {
         double var4 = Double.MAX_VALUE;
         double var6 = Double.MAX_VALUE;
         double var8 = Double.MAX_VALUE;
         double var10 = -Double.MAX_VALUE;
         double var12 = -Double.MAX_VALUE;
         double var14 = -Double.MAX_VALUE;

         for (int var16 = 0; var16 < 8; var16++) {
            double var17 = (var16 & 1) == 0 ? this.min.x : this.max.x;
            double var19 = (var16 & 2) == 0 ? this.min.y : this.max.y;
            double var21 = (var16 & 4) == 0 ? this.min.z : this.max.z;
            Vector3d var23 = new Vector3d(var17, var19, var21);
            var23.rotateZ(var3).rotateY(var2).rotateX(var1);
            if (var23.x < var4) {
               var4 = var23.x;
            }

            if (var23.y < var6) {
               var6 = var23.y;
            }

            if (var23.z < var8) {
               var8 = var23.z;
            }

            if (var23.x > var10) {
               var10 = var23.x;
            }

            if (var23.y > var12) {
               var12 = var23.y;
            }

            if (var23.z > var14) {
               var14 = var23.z;
            }
         }

         class="kw">return new Box(var4, var6, var8, var10, var12, var14);
      } else {
         class="kw">return this.clone();
      }
   }

   @Nonnull
   class="kw">public Box rotateX(float var1) {
      this.min.rotateX(var1);
      this.max.rotateX(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box rotateY(float var1) {
      this.min.rotateY(var1);
      this.max.rotateY(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box rotateZ(float var1) {
      this.min.rotateZ(var1);
      this.max.rotateZ(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box offset(double var1, double var3, double var5) {
      this.min.add(var1, var3, var5);
      this.max.add(var1, var3, var5);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box offset(@Nonnull Vector3dc var1) {
      this.min.add(var1);
      this.max.add(var1);
      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box sweep(@Nonnull Vector3dc var1) {
      if (var1.x() < 0.0) {
         this.min.x = this.min.x + var1.x();
      } else if (var1.x() > 0.0) {
         this.max.x = this.max.x + var1.x();
      }

      if (var1.y() < 0.0) {
         this.min.y = this.min.y + var1.y();
      } else if (var1.y() > 0.0) {
         this.max.y = this.max.y + var1.y();
      }

      if (var1.z() < 0.0) {
         this.min.z = this.min.z + var1.z();
      } else if (var1.z() > 0.0) {
         this.max.z = this.max.z + var1.z();
      }

      class="kw">return this;
   }

   @Nonnull
   class="kw">public Box extend(double var1, double var3, double var5) {
      this.min.sub(var1, var3, var5);
      this.max.add(var1, var3, var5);
      class="kw">return this;
   }

   class="kw">public double width() {
      class="kw">return this.max.x - this.min.x;
   }

   class="kw">public double height() {
      class="kw">return this.max.y - this.min.y;
   }

   class="kw">public double depth() {
      class="kw">return this.max.z - this.min.z;
   }

   class="kw">public double dimension(@Nonnull Axis var1) {
      class="kw">return class="kw">switch (var1) {
         case X -> this.width();
         case Y -> this.height();
         case Z -> this.depth();
      };
   }

   class="kw">public double getThickness() {
      class="kw">return MathUtil.minValue(this.width(), this.height(), this.depth());
   }

   class="kw">public double getMaximumThickness() {
      class="kw">return MathUtil.maxValue(this.width(), this.height(), this.depth());
   }

   class="kw">public double getVolume() {
      double var1 = this.width();
      if (var1 <= 0.0) {
         class="kw">return 0.0;
      }

      double var3 = this.height();
      if (var3 <= 0.0) {
         class="kw">return 0.0;
      }

      double var5 = this.depth();
      class="kw">return var5 <= 0.0 ? 0.0 : var1 * var3 * var5;
   }

   class="kw">public boolean hasVolume() {
      class="kw">return this.min.x <= this.max.x && this.min.y <= this.max.y && this.min.z <= this.max.z;
   }

   class="kw">public boolean isIntersecting(@Nonnull Box var1) {
      class="kw">return !(this.min.x > var1.max.x)
         && !(var1.min.x > this.max.x)
         && !(this.min.y > var1.max.y)
         && !(var1.min.y > this.max.y)
         && !(this.min.z > var1.max.z)
         && !(var1.min.z > this.max.z);
   }

   class="kw">public boolean isUnitBox() {
      class="kw">return this.min.equals(Vector3dUtil.ZERO) && this.max.equals(Vector3dUtil.ALL_ONES);
   }

   class="kw">public double middleX() {
      class="kw">return (this.min.x + this.max.x) / 2.0;
   }

   class="kw">public double middleY() {
      class="kw">return (this.min.y + this.max.y) / 2.0;
   }

   class="kw">public double middleZ() {
      class="kw">return (this.min.z + this.max.z) / 2.0;
   }

   @Nonnull
   class="kw">public Box clone() {
      Box var1 = new Box();
      var1.assign(this);
      class="kw">return var1;
   }

   @Nonnull
   class="kw">public Vector3d getMin() {
      class="kw">return this.min;
   }

   @Nonnull
   class="kw">public Vector3d getMax() {
      class="kw">return this.max;
   }

   @Nonnull
   @Override
   class="kw">public Box getBox(double var1, double var3, double var5) {
      class="kw">return new Box(this.min.x() + var1, this.min.y() + var3, this.min.z() + var5, this.max.x() + var1, this.max.y() + var3, this.max.z() + var5);
   }

   @Override
   class="kw">public boolean containsPosition(double var1, double var3, double var5) {
      class="kw">return var1 >= this.min.x() && var1 <= this.max.x() && var3 >= this.min.y() && var3 <= this.max.y() && var5 >= this.min.z() && var5 <= this.max.z();
   }

   @Override
   class="kw">public void expand(double var1) {
      this.extend(var1, var1, var1);
   }

   class="kw">public boolean containsBlock(int var1, int var2, int var3) {
      int var4 = MathUtil.floor(this.min.x());
      int var5 = MathUtil.floor(this.min.y());
      int var6 = MathUtil.floor(this.min.z());
      int var7 = MathUtil.ceil(this.max.x());
      int var8 = MathUtil.ceil(this.max.y());
      int var9 = MathUtil.ceil(this.max.z());
      class="kw">return var1 >= var4 && var1 < var7 && var2 >= var5 && var2 < var8 && var3 >= var6 && var3 < var9;
   }

   class="kw">public boolean containsBlock(@Nonnull Vector3ic var1, int var2, int var3, int var4) {
      class="kw">return this.containsBlock(var2 - var1.x(), var3 - var1.y(), var4 - var1.z());
   }

   @Override
   class="kw">public boolean forEachBlock(double var1, double var3, double var5, double var7, @Nonnull TriIntPredicate var9) {
      int var10 = MathUtil.floor(var1 + this.min.x() - var7);
      int var11 = MathUtil.floor(var3 + this.min.y() - var7);
      int var12 = MathUtil.floor(var5 + this.min.z() - var7);
      int var13 = MathUtil.floor(var1 + this.max.x() + var7);
      int var14 = MathUtil.floor(var3 + this.max.y() + var7);
      int var15 = MathUtil.floor(var5 + this.max.z() + var7);

      for (int var16 = var10; var16 <= var13 && var16 >= var10; var16++) {
         for (int var17 = var11; var17 <= var14 && var17 >= var11; var17++) {
            for (int var18 = var12; var18 <= var15 && var18 >= var12; var18++) {
               if (!var9.test(var16, var17, var18)) {
                  class="kw">return false;
               }
            }
         }
      }

      class="kw">return true;
   }

   @Override
   class="kw">public <T> boolean forEachBlock(double var1, double var3, double var5, double var7, T var9, @Nonnull TriIntObjPredicate<T> var10) {
      int var11 = MathUtil.floor(var1 + this.min.x() - var7);
      int var12 = MathUtil.floor(var3 + this.min.y() - var7);
      int var13 = MathUtil.floor(var5 + this.min.z() - var7);
      int var14 = MathUtil.floor(var1 + this.max.x() + var7);
      int var15 = MathUtil.floor(var3 + this.max.y() + var7);
      int var16 = MathUtil.floor(var5 + this.max.z() + var7);

      for (int var17 = var11; var17 <= var14 && var17 >= var11; var17++) {
         for (int var18 = var12; var18 <= var15 && var18 >= var12; var18++) {
            for (int var19 = var13; var19 <= var16 && var19 >= var13; var19++) {
               if (!var10.test(var17, var18, var19, var9)) {
                  class="kw">return false;
               }
            }
         }
      }

      class="kw">return true;
   }

   class="kw">public double getMaximumExtent() {
      double var1 = 0.0;
      if (-this.min.x > var1) {
         var1 = -this.min.x;
      }

      if (-this.min.y > var1) {
         var1 = -this.min.y;
      }

      if (-this.min.z > var1) {
         var1 = -this.min.z;
      }

      if (this.max.x - 1.0 > var1) {
         var1 = this.max.x - 1.0;
      }

      if (this.max.y - 1.0 > var1) {
         var1 = this.max.y - 1.0;
      }

      if (this.max.z - 1.0 > var1) {
         var1 = this.max.z - 1.0;
      }

      class="kw">return var1;
   }

   class="kw">public boolean intersectsLine(@Nonnull Vector3dc var1, @Nonnull Vector3dc var2) {
      double var3 = var1.x();
      double var5 = var1.y();
      double var7 = var1.z();
      double var9 = var2.x() - var3;
      double var11 = var2.y() - var5;
      double var13 = var2.z() - var7;
      double var15 = 0.0;
      double var17 = 1.0;
      if (Math.abs(var9) < 1.0E-10) {
         if (var1.x() < this.min.x || var1.x() > this.max.x) {
            class="kw">return false;
         }
      } else {
         double var19 = (this.min.x - var1.x()) / var9;
         double var21 = (this.max.x - var1.x()) / var9;
         if (var19 > var21) {
            double var23 = var19;
            var19 = var21;
            var21 = var23;
         }

         var15 = Math.max(var15, var19);
         var17 = Math.min(var17, var21);
         if (var15 > var17) {
            class="kw">return false;
         }
      }

      if (Math.abs(var11) < 1.0E-10) {
         if (var1.y() < this.min.y || var1.y() > this.max.y) {
            class="kw">return false;
         }
      } else {
         double var27 = (this.min.y - var1.y()) / var11;
         double var29 = (this.max.y - var1.y()) / var11;
         if (var27 > var29) {
            double var31 = var27;
            var27 = var29;
            var29 = var31;
         }

         var15 = Math.max(var15, var27);
         var17 = Math.min(var17, var29);
         if (var15 > var17) {
            class="kw">return false;
         }
      }

      if (!(Math.abs(var13) < 1.0E-10)) {
         double var28 = (this.min.z - var1.z()) / var13;
         double var30 = (this.max.z - var1.z()) / var13;
         if (var28 > var30) {
            double var32 = var28;
            var28 = var30;
            var30 = var32;
         }

         var15 = Math.max(var15, var28);
         var17 = Math.min(var17, var30);
         class="kw">return !(var15 > var17);
      } else {
         class="kw">return !(var1.z() < this.min.z) && !(var1.z() > this.max.z);
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "Box{min=" + this.min + ", max=" + this.max + "}";
   }
}