DistortedCaveNodeShapeGenerator class

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

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

implements: CaveNodeShapeEnum.CaveNodeShapeGenerator

Поля (21)

МодификаторыТипИмя
private final ShapeDistortion distortion
private final IDoubleRange heightRange
private final boolean inheritParentRadius
private final GeneralNoise.InterpolationFunction interpolation
private final IDoubleRange lengthRange
private final IDoubleRange midHeightRange
private final IDoubleRange midWidthRange
private final DistortedShape.Factory shapeFactory
Vector3d var10
Vector3d var11
double var12
double var14
double var16
double var18
var2
double var20
double var22
DistortedShape var24
Vector3d var3
double var8
private final IDoubleRange widthRange

Методы (11)

МодификаторыВозвратСигнатура
abstract return new DistortedCaveNodeShapereturn new DistortedCaveNodeShape(var2, var24, this.distortion)
abstract return new Vector3dreturn new Vector3d()
public CaveNodeShape generateCaveNodeShapepublic CaveNodeShape generateCaveNodeShape(Random var1, CaveType var2, @Nullable CaveNode var3, @Nonnull CaveNodeType.CaveNodeChildEntry var4, @Nonnull Vector3d var5, float var6, float var7)
private static Vector3d getDirectionprivate static Vector3d getDirection(double var0, double var2, double var4)
private static double getLengthprivate static double getLength(@Nullable IDoubleRange var0, Random var1)
private static double getMiddleRadiusprivate static double getMiddleRadius(double var0, double var2, @Nullable IDoubleRange var4, Random var5)
private static Vector3d getOriginprivate static Vector3d getOrigin(@Nonnull Vector3d var0, @Nullable CaveNode var1, @Nonnull CaveNodeType.CaveNodeChildEntry var2)
private static double getStartHeightprivate static double getStartHeight(boolean var0, @Nullable CaveNode var1, @Nonnull IDoubleRange var2, Random var3)
private static double getStartWidthprivate static double getStartWidth(boolean var0, @Nullable CaveNode var1, @Nonnull IDoubleRange var2, Random var3)
if if(var1 == null)
if if(var4 == 0.0)

Исходный код

Показать/скрыть
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.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.procedurallib.logic.GeneralNoise;
class="kw">import com.hypixel.hytale.procedurallib.supplier.IDoubleRange;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldgen.GeneratedBlockChunk;
class="kw">import com.hypixel.hytale.server.worldgen.cave.Cave;
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.cave.shape.distorted.AbstractDistortedShape;
class="kw">import com.hypixel.hytale.server.worldgen.cave.shape.distorted.DistortedShape;
class="kw">import com.hypixel.hytale.server.worldgen.cave.shape.distorted.ShapeDistortion;
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.Random;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class DistortedCaveNodeShape class="kw">implements CaveNodeShape {
   class="kw">private class="kw">final CaveType caveType;
   class="kw">private class="kw">final DistortedShape shape;
   class="kw">private class="kw">final ShapeDistortion distortion;

   class="kw">public DistortedCaveNodeShape(CaveType var1, DistortedShape var2, ShapeDistortion var3) {
      this.caveType = var1;
      this.shape = var2;
      this.distortion = var3;
   }

   class="kw">public DistortedShape getShape() {
      class="kw">return this.shape;
   }

   @Override
   class="kw">public Vector3d getStart() {
      class="kw">return this.shape.getStart();
   }

   @Override
   class="kw">public Vector3d getEnd() {
      class="kw">return this.shape.getEnd();
   }

   @Override
   class="kw">public Vector3d getAnchor(Vector3d var1, double var2, double var4, double var6) {
      class="kw">return this.shape.getAnchor(var1, var2, var4, var6);
   }

   @Override
   class="kw">public IWorldBounds getBounds() {
      class="kw">return this.shape;
   }

   @Override
   class="kw">public boolean shouldReplace(int var1, double var2, double var4, int var6) {
      double var7 = this.shape.getProjection(var2, var4);
      if (this.shape.isValidProjection(var7)) {
         double var9 = this.shape.getYAt(var7);
         double var11 = this.shape.getHeightAtProjection(var1, var2, var4, var7, var9, this.caveType, this.distortion);
         if (var11 > 0.0) {
            int var13 = this.getBounds().getLowBoundY();
            int var14 = this.getFloor(var1, var2, var4, var9, var11, var13);
            if (var6 < var14) {
               class="kw">return false;
            }

            int var15 = this.getBounds().getHighBoundY();
            int var16 = this.getCeiling(var1, var2, var4, var9, var11, var15);
            class="kw">return var6 <= var16;
         }
      }

      class="kw">return false;
   }

   @Override
   class="kw">public double getFloorPosition(int var1, double var2, double var4) {
      double var6 = this.shape.getProjection(var2, var4);
      if (this.shape.isValidProjection(var6)) {
         double var8 = this.shape.getYAt(var6);
         double var10 = this.shape.getHeightAtProjection(var1, var2, var4, var6, var8, this.caveType, this.distortion);
         if (var10 > 0.0) {
            int var12 = this.getBounds().getLowBoundY();
            class="kw">return this.getFloor(var1, var2, var4, var8, var10, var12) - 1;
         }
      }

      class="kw">return -1.0;
   }

   @Override
   class="kw">public double getCeilingPosition(int var1, double var2, double var4) {
      double var6 = this.shape.getProjection(var2, var4);
      if (this.shape.isValidProjection(var6)) {
         double var8 = this.shape.getYAt(var6);
         double var10 = this.shape.getHeightAtProjection(var1, var2, var4, var6, var8, this.caveType, this.distortion);
         if (var10 > 0.0) {
            int var12 = this.getBounds().getHighBoundY();
            class="kw">return this.getCeiling(var1, var2, var4, var8, var10, var12) + 1;
         }
      }

      class="kw">return -1.0;
   }

   @Override
   class="kw">public void populateChunk(int var1, @Nonnull ChunkGeneratorExecution var2, @Nonnull Cave var3, @Nonnull CaveNode var4, @Nonnull Random var5) {
      GeneratedBlockChunk var6 = var2.getChunk();
      BlockTypeAssetMap var7 = BlockType.getAssetMap();
      CaveType var8 = var3.getCaveType();
      CaveNodeType var9 = var4.getCaveNodeType();
      IWorldBounds var10 = this.getBounds();
      boolean var11 = var3.getCaveType().isSurfaceLimited();
      int var12 = var4.getCaveNodeType().hasEnvironment() ? var4.getCaveNodeType().getEnvironment() : var8.getEnvironment();
      int var13 = ChunkUtil.minBlock(var2.getX());
      int var14 = ChunkUtil.minBlock(var2.getZ());
      int var15 = ChunkUtil.maxBlock(var2.getX());
      int var16 = ChunkUtil.maxBlock(var2.getZ());
      int var17 = Math.max(var13, var10.getLowBoundX());
      int var18 = var10.getLowBoundY();
      int var19 = Math.max(var14, var10.getLowBoundZ());
      int var20 = Math.min(var15, var10.getHighBoundX());
      int var21 = var10.getHighBoundY();
      int var22 = Math.min(var16, var10.getHighBoundZ());

      for (int var23 = var17; var23 <= var20; var23++) {
         int var24 = var23 - var13;

         for (int var25 = var19; var25 <= var22; var25++) {
            int var26 = var25 - var14;
            int var27 = var21;
            boolean var28 = false;
            if (var11) {
               int var29 = var6.getHeight(var24, var26);
               if (var27 >= var29) {
                  var27 = var29;
                  var28 = true;
               }
            }

            int var48 = Integer.MAX_VALUE;
            int var30 = Integer.MAX_VALUE;
            int var31 = Integer.MIN_VALUE;
            int var32 = Integer.MIN_VALUE;
            double var33 = this.shape.getProjection(var23, var25);
            if (this.shape.isValidProjection(var33)) {
               double var35 = this.shape.getYAt(var33);
               double var37 = this.shape.getHeightAtProjection(var1, var23, var25, var33, var35, var8, this.distortion);
               if (!(var37 <= 0.0)) {
                  int var39 = this.getFloor(var1, var23, var25, var35, var37, var18);
                  int var40 = this.getCeiling(var1, var23, var25, var35, var37, var27);
                  if (var39 < var30) {
                     var30 = var39;
                  }

                  if (var40 > var32) {
                     var32 = var40;
                  }

                  for (int var41 = var39; var41 <= var40; var41++) {
                     int var42 = var2.getBlock(var24, var41, var26);
                     int var43 = var2.getFluid(var24, var41, var26);
                     boolean var44 = !var11 || var42 != 0;
                     if (var44) {
                        BlockFluidEntry var45 = CaveNodeShapeUtils.getFillingBlock(var8, var9, var41, var5);
                        if (var8.getBlockMask().eval(var42, var43, var45.blockId(), var45.fluidId())) {
                           if (var2.setBlock(var24, var41, var26, (byte)6, var45, var12)) {
                              if (var41 < var48) {
                                 var48 = var41;
                              }

                              if (var41 > var31) {
                                 var31 = var41;
                              }
                           }

                           if (var2.setFluid(var24, var41, var26, (byte)6, var45.fluidId(), var12)) {
                              if (var41 < var48) {
                                 var48 = var41;
                              }

                              if (var41 > var31) {
                                 var31 = var41;
                              }
                           }
                        }
                     }
                  }

                  CaveNodeType.CaveNodeCoverEntry[] var49 = var9.getCovers();

                  for (CaveNodeType.CaveNodeCoverEntry var55 : var49) {
                     CaveNodeType.CaveNodeCoverEntry.Entry var46 = var55.get(var5);
                     int var47 = CaveNodeShapeUtils.getCoverHeight(var48, var30, var31, var32, var28, var55, var46);
                     if (var47 >= 0
                        && var55.getDensityCondition().eval(var1 + var4.getSeedOffset(), var23, var25)
                        && var55.getHeightCondition().eval(var1, var23, var25, var47, var5)
                        && var55.getMapCondition().eval(var1, var23, var25)
                        && CaveNodeShapeUtils.isCoverMatchingParent(var24, var26, var47, var2, var55)) {
                        var2.setBlock(var24, var47, var26, (byte)5, var46.getEntry(), var12);
                        var2.setFluid(var24, var47, var26, (byte)5, var46.getEntry().fluidId(), var12);
                     }
                  }

                  if (CaveNodeShapeUtils.invalidateCover(var24, var48 - 1, var26, CaveNodeType.CaveNodeCoverType.CEILING, var2, var7)) {
                     BlockFluidEntry var51 = CaveNodeShapeUtils.getFillingBlock(var8, var9, var48 - 1, var5);
                     var2.overrideBlock(var24, var48 - 1, var26, (byte)6, var51);
                     var2.overrideFluid(var24, var48 - 1, var26, (byte)6, var51.fluidId());
                  }

                  if (CaveNodeShapeUtils.invalidateCover(var24, var31 + 1, var26, CaveNodeType.CaveNodeCoverType.FLOOR, var2, var7)) {
                     BlockFluidEntry var52 = CaveNodeShapeUtils.getFillingBlock(var8, var9, var31 + 1, var5);
                     var2.overrideBlock(var24, var31 + 1, var26, (byte)6, var52);
                     var2.overrideFluid(var24, var31 + 1, var26, (byte)6, var52.fluidId());
                  }
               }
            }
         }
      }
   }

   class="kw">private int getFloor(int var1, double var2, double var4, double var6, double var8, int var10) {
      var8 *= this.distortion.getFloorFactor(var1, var2, var4);
      double var11 = this.shape.getFloor(var2, var4, var6, var8);
      class="kw">return Math.max(MathUtil.floor(var11), var10);
   }

   class="kw">private int getCeiling(int var1, double var2, double var4, double var6, double var8, int var10) {
      var8 *= this.distortion.getCeilingFactor(var1, var2, var4);
      double var11 = this.shape.getCeiling(var2, var4, var6, var8);
      class="kw">return Math.min(MathUtil.ceil(var11), var10);
   }

   class="kw">public class="kw">static class DistortedCaveNodeShapeGenerator class="kw">implements CaveNodeShapeEnum.CaveNodeShapeGenerator {
      class="kw">private class="kw">final DistortedShape.Factory shapeFactory;
      class="kw">private class="kw">final IDoubleRange widthRange;
      class="kw">private class="kw">final IDoubleRange midWidthRange;
      class="kw">private class="kw">final IDoubleRange heightRange;
      class="kw">private class="kw">final IDoubleRange midHeightRange;
      class="kw">private class="kw">final IDoubleRange lengthRange;
      class="kw">private class="kw">final ShapeDistortion distortion;
      class="kw">private class="kw">final boolean inheritParentRadius;
      class="kw">private class="kw">final GeneralNoise.InterpolationFunction interpolation;

      class="kw">public DistortedCaveNodeShapeGenerator(
         DistortedShape.Factory var1,
         IDoubleRange var2,
         IDoubleRange var3,
         @Nullable IDoubleRange var4,
         @Nullable IDoubleRange var5,
         @Nullable IDoubleRange var6,
         boolean var7,
         ShapeDistortion var8,
         @Nullable GeneralNoise.InterpolationFunction var9
      ) {
         this.shapeFactory = var1;
         this.widthRange = var2;
         this.heightRange = var3;
         this.midWidthRange = var4;
         this.midHeightRange = var5;
         this.lengthRange = var6;
         this.distortion = var8;
         this.inheritParentRadius = var7;
         this.interpolation = var9;
      }

      @Nonnull
      @Override
      class="kw">public CaveNodeShape generateCaveNodeShape(
         Random var1, CaveType var2, @Nullable CaveNode var3, @Nonnull CaveNodeType.CaveNodeChildEntry var4, @Nonnull Vector3d var5, float var6, float var7
      ) {
         double var8 = getLength(this.lengthRange, var1);
         Vector3d var10 = getOrigin(var5, var3, var4);
         Vector3d var11 = getDirection(var6, var7, var8);
         double var12 = getStartWidth(this.inheritParentRadius, var3, this.widthRange, var1);
         double var14 = getStartHeight(this.inheritParentRadius, var3, this.heightRange, var1);
         double var16 = this.widthRange.getValue(var1);
         double var18 = this.heightRange.getValue(var1);
         double var20 = getMiddleRadius(var12, var16, this.midWidthRange, var1);
         double var22 = getMiddleRadius(var14, var18, this.midHeightRange, var1);
         DistortedShape var24 = this.shapeFactory.create(var10, var11, var8, var12, var14, var20, var22, var16, var18, this.interpolation);
         class="kw">return new DistortedCaveNodeShape(var2, var24, this.distortion);
      }

      @Nonnull
      class="kw">private class="kw">static Vector3d getOrigin(@Nonnull Vector3d var0, @Nullable CaveNode var1, @Nonnull CaveNodeType.CaveNodeChildEntry var2) {
         if (var1 == null) {
            class="kw">return var0;
         }

         Vector3d var3 = CaveNodeShapeUtils.getOffset(var1, var2);
         class="kw">return var0.add(var3);
      }

      class="kw">private class="kw">static double getLength(@Nullable IDoubleRange var0, Random var1) {
         class="kw">return var0 == null ? 0.0 : var0.getValue(var1);
      }

      @Nonnull
      class="kw">private class="kw">static Vector3d getDirection(double var0, double var2, double var4) {
         if (var4 == 0.0) {
            class="kw">return new Vector3d();
         }

         var2 = AbstractDistortedShape.clampPitch(var2);
         class="kw">return new Vector3d(TrigMathUtil.sin(var2) * TrigMathUtil.cos(var0), TrigMathUtil.cos(var2), TrigMathUtil.sin(var2) * TrigMathUtil.sin(var0))
            .mul(var4);
      }

      class="kw">private class="kw">static double getStartWidth(boolean var0, @Nullable CaveNode var1, @Nonnull IDoubleRange var2, Random var3) {
         class="kw">return var0 ? CaveNodeShapeUtils.getEndWidth(var1, var2, var3) : var2.getValue(var3);
      }

      class="kw">private class="kw">static double getStartHeight(boolean var0, @Nullable CaveNode var1, @Nonnull IDoubleRange var2, Random var3) {
         class="kw">return var0 ? CaveNodeShapeUtils.getEndHeight(var1, var2, var3) : var2.getValue(var3);
      }

      class="kw">private class="kw">static double getMiddleRadius(double var0, double var2, @Nullable IDoubleRange var4, Random var5) {
         class="kw">return var4 == null ? (var2 - var0) * 0.5 + var0 : var4.getValue(var5);
      }
   }
}