CaveNodeShapeUtils class

Пакет: com.hypixel.hytale.server.worldgen.cave.shape

Файл: com/hypixel/hytale/server/worldgen/cave/shape/CaveNodeShapeUtils.java

Поля (42)

МодификаторыТипИмя
final BiDoubleToDoubleFunction LEFT
double var10
double var12
double var14
double var15
double var16
double var17
double var18
double var19
double var19
Vector3d var2
var2
double var2
double var21
double var21
double var23
double var23
double var25
double var25
double var27
double var27
double var29
double var3
double var3
double var3
double var31
double var33
double var35
double var37
double var4
double var5
int var5
IBlockFluidCondition var6
byte var6
double var7
int var7
int var7
double var8
int var8
BlockType var8
double var9
Map var9

Методы (26)

МодификаторыВозвратСигнатура
static int getCoverHeightint getCoverHeight(int var0, int var1, int var2, int var3, boolean var4, @Nonnull CaveNodeType.CaveNodeCoverEntry var5, @Nonnull CaveNodeType.CaveNodeCoverEntry.Entry var6)
static double getEndHeightdouble getEndHeight(@Nullable CaveNode var0, @Nonnull IDoubleRange var1, Random var2)
static double getEndRadiusdouble getEndRadius(@Nullable CaveNode var0, @Nonnull IDoubleRange var1, Random var2)
static double getEndRadiusdouble getEndRadius(@Nonnull CaveNodeShape var0, @Nonnull BiDoubleToDoubleFunction var1)
static double getEndWidthdouble getEndWidth(@Nullable CaveNode var0, @Nonnull IDoubleRange var1, Random var2)
abstract return getRadialProjectionreturn getRadialProjection(var0, var1.x, var1.y, var1.z, var2, var4, var6, var14, var16, var18)
abstract return getRadialProjectionreturn getRadialProjection(var0, var15, var17, var19, var3, var5, var7, var33, var35, var37)
if if(var2 == Vector3dUtil.ZERO)
if if(var0 != null)
if if(var3 != -1.0)
if if(var0 != null)
if if(var3 != -1.0)
if if(var0 != null)
if if(var3 != -1.0)
if if(var0 instanceof CylinderCaveNodeShape)
if if(var5 >= 0 && var5 <= 319)
if if(var6 == ConstantBlockFluidCondition.DEFAULT_TRUE)
if if(var6 == ConstantBlockFluidCondition.DEFAULT_FALSE)
if if(var1 >= 0 && var1 <= 319)
if if(var6 == 3)
if if(var6 != 5)
if if(var9 == null)
if if(var19 == 0.0)
static boolean invalidateCoverboolean invalidateCover(int var0, int var1, int var2, CaveNodeType.CaveNodeCoverType var3, @Nonnull ChunkGeneratorExecution var4, @Nonnull BlockTypeAssetMap<String, BlockType> var5)
static boolean isCoverMatchingParentboolean isCoverMatchingParent(int var0, int var1, int var2, @Nonnull ChunkGeneratorExecution var3, @Nonnull CaveNodeType.CaveNodeCoverEntry var4)
return switchreturn switch(var3)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.map.BlockTypeAssetMap;
class="kw">import com.hypixel.hytale.function.function.BiDoubleToDoubleFunction;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.procedurallib.condition.ConstantBlockFluidCondition;
class="kw">import com.hypixel.hytale.procedurallib.condition.IBlockFluidCondition;
class="kw">import com.hypixel.hytale.procedurallib.supplier.IDoubleRange;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockFace;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.RequiredBlockFaceSupport;
class="kw">import com.hypixel.hytale.server.worldgen.cave.CaveNodeType;
class="kw">import com.hypixel.hytale.server.worldgen.cave.CaveType;
class="kw">import com.hypixel.hytale.server.worldgen.cave.element.CaveNode;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ChunkGeneratorExecution;
class="kw">import com.hypixel.hytale.server.worldgen.util.BlockFluidEntry;
class="kw">import com.hypixel.hytale.server.worldgen.util.bounds.IWorldBounds;
class="kw">import java.util.Map;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class CaveNodeShapeUtils {
   class="kw">public class="kw">static class="kw">final BiDoubleToDoubleFunction LEFT = (var0, var2) -> var0;
   class="kw">public class="kw">static class="kw">final BiDoubleToDoubleFunction RIGHT = (var0, var2) -> var2;
   class="kw">public class="kw">static class="kw">final BiDoubleToDoubleFunction MIN = Math::min;
   class="kw">public class="kw">static class="kw">final BiDoubleToDoubleFunction MAX = Math::max;

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

   @Nonnull
   class="kw">public class="kw">static Vector3d getBoxAnchor(@Nonnull Vector3d var0, @Nonnull IWorldBounds var1, double var2, double var4, double var6) {
      double var8 = var1.fractionX(var2);
      double var10 = var1.fractionY(var4);
      double var12 = var1.fractionZ(var6);
      class="kw">return var0.set(var8, var10, var12);
   }

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

   @Nonnull
   class="kw">public class="kw">static Vector3d getSphereAnchor(
      @Nonnull Vector3d var0, @Nonnull Vector3d var1, double var2, double var4, double var6, double var8, double var10, double var12
   ) {
      double var14 = var8 * 2.0 - 1.0;
      double var16 = var10 * 2.0 - 1.0;
      double var18 = var12 * 2.0 - 1.0;
      class="kw">return getRadialProjection(var0, var1.x, var1.y, var1.z, var2, var4, var6, var14, var16, var18);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d getPipeAnchor(
      @Nonnull Vector3d var0, @Nonnull Vector3d var1, @Nonnull Vector3d var2, double var3, double var5, double var7, double var9, double var11, double var13
   ) {
      double var15 = var1.x + var2.x * var9;
      double var17 = var1.y + var2.y * var9;
      double var19 = var1.z + var2.z * var9;
      double var21 = var2.length();
      double var23 = var2.x / var21;
      double var25 = var2.y / var21;
      double var27 = var2.z / var21;
      double var29 = 2.0 * var11 - 1.0;
      double var31 = 2.0 * var13 - 1.0;
      double var33 = -var25 * var29 - var27 * var31;
      double var35 = var23 * var29;
      double var37 = var23 * var31;
      class="kw">return getRadialProjection(var0, var15, var17, var19, var3, var5, var7, var33, var35, var37);
   }

   @Nonnull
   class="kw">public class="kw">static Vector3d getOffset(@Nullable CaveNode var0, @Nonnull CaveNodeType.CaveNodeChildEntry var1) {
      Vector3d var2 = var1.getOffset();
      if (var2 == Vector3dUtil.ZERO) {
         class="kw">return var2;
      }

      if (var0 != null && var0.getShape() class="kw">instanceof PrefabCaveNodeShape) {
         var2 = new Vector3d(var2);
         ((PrefabCaveNodeShape)var0.getShape()).getPrefabRotation().rotate(var2);
      }

      class="kw">return var2;
   }

   class="kw">public class="kw">static double getEndRadius(@Nullable CaveNode var0, @Nonnull IDoubleRange var1, Random var2) {
      if (var0 != null) {
         double var3 = getEndRadius(var0.getShape(), MIN);
         if (var3 != -1.0) {
            class="kw">return var3;
         }
      }

      class="kw">return var1.getValue(var2);
   }

   class="kw">public class="kw">static double getEndWidth(@Nullable CaveNode var0, @Nonnull IDoubleRange var1, Random var2) {
      if (var0 != null) {
         double var3 = getEndRadius(var0.getShape(), LEFT);
         if (var3 != -1.0) {
            class="kw">return var3;
         }
      }

      class="kw">return var1.getValue(var2);
   }

   class="kw">public class="kw">static double getEndHeight(@Nullable CaveNode var0, @Nonnull IDoubleRange var1, Random var2) {
      if (var0 != null) {
         double var3 = getEndRadius(var0.getShape(), RIGHT);
         if (var3 != -1.0) {
            class="kw">return var3;
         }
      }

      class="kw">return var1.getValue(var2);
   }

   class="kw">public class="kw">static double getEndRadius(@Nonnull CaveNodeShape var0, @Nonnull BiDoubleToDoubleFunction var1) {
      if (var0 class="kw">instanceof CylinderCaveNodeShape) {
         class="kw">return ((CylinderCaveNodeShape)var0).getRadius2();
      } else if (var0 class="kw">instanceof PipeCaveNodeShape) {
         class="kw">return ((PipeCaveNodeShape)var0).getRadius2();
      } else if (var0 class="kw">instanceof DistortedCaveNodeShape) {
         double var2 = ((DistortedCaveNodeShape)var0).getShape().getWidthAt(1.0);
         double var4 = ((DistortedCaveNodeShape)var0).getShape().getHeightAt(1.0);
         class="kw">return var1.apply(var2, var4);
      } else {
         class="kw">return -1.0;
      }
   }

   @Nullable
   class="kw">public class="kw">static BlockFluidEntry getFillingBlock(@Nonnull CaveType var0, @Nonnull CaveNodeType var1, int var2, @Nonnull Random var3) {
      class="kw">return var0.getFluidLevel().getHeight() >= var2 ? var0.getFluidLevel().getBlockEntry() : var1.getFilling(var3);
   }

   class="kw">protected class="kw">static int getCoverHeight(
      int var0, int var1, int var2, int var3, boolean var4, @Nonnull CaveNodeType.CaveNodeCoverEntry var5, @Nonnull CaveNodeType.CaveNodeCoverEntry.Entry var6
   ) {
      class="kw">return class="kw">switch (var5.getType()) {
         case FLOOR -> var0 != Integer.MAX_VALUE && var1 == var0 ? var0 - 1 + var6.getOffset() : -1;
         case CEILING -> var4 ? -1 : (var2 != Integer.MIN_VALUE && var3 == var2 ? var2 + 1 - var6.getOffset() : -1);
      };
   }

   class="kw">public class="kw">static boolean isCoverMatchingParent(
      int var0, int var1, int var2, @Nonnull ChunkGeneratorExecution var3, @Nonnull CaveNodeType.CaveNodeCoverEntry var4
   ) {
      int var5 = var2 + var4.getType().parentOffset;
      if (var5 >= 0 && var5 <= 319) {
         IBlockFluidCondition var6 = var4.getParentCondition();
         if (var6 == ConstantBlockFluidCondition.DEFAULT_TRUE) {
            class="kw">return true;
         }

         if (var6 == ConstantBlockFluidCondition.DEFAULT_FALSE) {
            class="kw">return false;
         }

         int var7 = var3.getBlock(var0, var5, var1);
         int var8 = var3.getFluid(var0, var5, var1);
         class="kw">return var6.eval(var7, var8);
      } else {
         class="kw">return false;
      }
   }

   class="kw">public class="kw">static boolean invalidateCover(
      int var0,
      int var1,
      int var2,
      CaveNodeType.CaveNodeCoverType var3,
      @Nonnull ChunkGeneratorExecution var4,
      @Nonnull BlockTypeAssetMap<String, BlockType> var5
   ) {
      if (var1 >= 0 && var1 <= 319) {
         byte var6 = var4.getPriorityChunk().get(var0, var1, var2);
         if (var6 == 3) {
            class="kw">return true;
         }

         if (var6 != 5) {
            class="kw">return false;
         }

         int var7 = var4.getBlock(var0, var1, var2);
         BlockType var8 = var5.getAsset(var7);
         Map var9 = var8.getSupport(var4.getRotationIndex(var0, var1, var2));
         if (var9 == null) {
            class="kw">return false;
         }

         class="kw">return class="kw">switch (var3) {
            case FLOOR -> var9.containsKey(BlockFace.DOWN);
            case CEILING -> var9.containsKey(BlockFace.UP);
         };
      } else {
         class="kw">return false;
      }
   }

   @Nonnull
   class="kw">protected class="kw">static Vector3d getRadialProjection(
      @Nonnull Vector3d var0, double var1, double var3, double var5, double var7, double var9, double var11, double var13, double var15, double var17
   ) {
      double var19 = var13 * var13 + var15 * var15 + var17 * var17;
      if (var19 == 0.0) {
         class="kw">return var0.set(var1, var3, var5);
      }

      double var21 = Math.sqrt(1.0 / var19);
      double var23 = Math.abs(var13) * var7 * var21;
      double var25 = Math.abs(var15) * var9 * var21;
      double var27 = Math.abs(var17) * var11 * var21;
      var1 += var23 * var13;
      var3 += var25 * var15;
      var5 += var27 * var17;
      class="kw">return var0.set(var1, var3, var5);
   }
}