DensityProp class

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/props/deprecated/DensityProp.java

extends: Prop

Поля (29)

МодификаторыТипИмя
int var10
ArrayVoxelSpace var11
Density.Context var12
Vector3i var13
Material var14
int var15
double var16
int[] var17
int[] var18
int[] var19
PositionListScanResult var2
int var20
boolean var21
Material var22
var22
int[] var23
int var24
int var25
boolean var26
MaterialProvider.Context var27
Scanner.Context var3
List var3
Bounds3i var3
Vector3i var4
Vector3i var5
Vector3i var6
Vector3i var7
int var8
int var9

Методы (19)

МодификаторыВозвратСигнатура
abstract return new PositionListScanResultreturn new PositionListScanResult(var3.validPositions_out)
for for(Vector3i var5 : var3)
for for(var13.x = var4.x; var13.x < var5.x; var13.x++)
for for(var13.z = var4.z; var13.z < var5.z; var13.z++)
for for(var13.y = var4.y; var13.y < var5.y; var13.y++)
for for(var13.x = var4.x; var13.x < var5.x; var13.x++)
for for(var13.z = var4.z; var13.z < var5.z; var13.z++)
for for(var13.y = var9 - 1; var13.y >= var8; var13.y--)
for for(var13.y = var8; var13.y < var9; var13.y++)
for for(var13.y = var9 - 1; var13.y >= var8; var13.y--)
if if(var3 != null)
if if(var13.y == var9 - 1)
if if(var21)
if if(var13.y == var8)
if if(var26)
if if(var13.x >= var6.x && var13.y >= var6.y && var13.z >= var6.z && var13.x < var7.x && var13.y < var7.y && var13.z < var7.z)
if if(var22 == null)
private void placevoid place(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2)
public void place_deprecatedvoid place_deprecated(@Nonnull Prop.Context var1, @Nonnull PositionListScanResult var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.BlockMask;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.materialproviders.MaterialProvider;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.Prop;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.voxelspace.ArrayVoxelSpace;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.voxelspace.VoxelSpace;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class DensityProp class="kw">extends Prop {
   @Nonnull
   class="kw">private class="kw">final Vector3i range;
   @Nonnull
   class="kw">private class="kw">final Density density;
   @Nonnull
   class="kw">private class="kw">final MaterialProvider<Material> materialProvider;
   @Nonnull
   class="kw">private class="kw">final Scanner scanner;
   @Nonnull
   class="kw">private class="kw">final Pattern pattern;
   @Nonnull
   class="kw">private class="kw">final BlockMask placementMask;
   @Nonnull
   class="kw">private class="kw">final Material defaultMaterial;
   @Nonnull
   class="kw">private class="kw">final Bounds3i readBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i writeBounds_voxelGrid;

   class="kw">public DensityProp(
      @Nonnull Vector3i var1,
      @Nonnull Density var2,
      @Nonnull MaterialProvider<Material> var3,
      @Nonnull Scanner var4,
      @Nonnull Pattern var5,
      @Nonnull BlockMask var6,
      @Nonnull Material var7
   ) {
      this.range = new Vector3i(var1);
      this.density = var2;
      this.materialProvider = var3;
      this.scanner = var4;
      this.pattern = var5;
      this.placementMask = var6;
      this.defaultMaterial = var7;
      this.readBounds_voxelGrid = var4.getBoundsWithPattern_voxelGrid(var5);
      this.writeBounds_voxelGrid = new Bounds3i(new Vector3i(-var1.x, -var1.y, -var1.z), new Vector3i(var1.x, var1.y, var1.z));
      this.writeBounds_voxelGrid.stack(var4.getBounds_voxelGrid());
   }

   @Override
   class="kw">public boolean generate(@Nonnull Prop.Context var1) {
      PositionListScanResult var2 = this.scan_deprecated(var1.position, var1.materialReadSpace);
      this.place_deprecated(var1, var2);
      class="kw">return !var2.isNegative();
   }

   @Nonnull
   class="kw">public PositionListScanResult scan_deprecated(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
      Scanner.Context var3 = new Scanner.Context(var1, this.pattern, var2, new ArrayList<>());
      this.scanner.scan(var3);
      class="kw">return new PositionListScanResult(var3.validPositions_out);
   }

   class="kw">public void place_deprecated(@Nonnull Prop.Context var1, @Nonnull PositionListScanResult var2) {
      List var3 = var2.getPositions();
      if (var3 != null) {
         for (Vector3i var5 : var3) {
            this.place(var5, var1.materialWriteSpace);
         }
      }
   }

   class="kw">private void place(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
      Bounds3i var3 = var2.getBounds();
      Vector3i var4 = new Vector3i(var1).add(-this.range.x, -this.range.y, -this.range.z);
      Vector3i var5 = new Vector3i(var1).add(this.range.x, this.range.y, this.range.z);
      Vector3i var6 = Vector3iUtil.max(var4, var3.min);
      Vector3i var7 = Vector3iUtil.min(var5, var3.max);
      int var8 = var4.y;
      int var9 = var5.y;
      int var10 = var9 - var8;
      ArrayVoxelSpace var11 = new ArrayVoxelSpace<>(new Bounds3i(var4, var5));
      Density.Context var12 = new Density.Context();
      var12.densityAnchor = Vector3iUtil.toVector3d(var1);
      Vector3i var13 = new Vector3i(var1);

      for (var13.x = var4.x; var13.x < var5.x; var13.x++) {
         for (var13.z = var4.z; var13.z < var5.z; var13.z++) {
            for (var13.y = var4.y; var13.y < var5.y; var13.y++) {
               if (var11.getBounds().contains(var13.x, var13.y, var13.z)) {
                  var12.position.x = var13.x;
                  var12.position.y = var13.y;
                  var12.position.z = var13.z;
                  double var16 = this.density.process(var12);
                  var11.set(var16 > 0.0, var13.x, var13.y, var13.z);
               }
            }
         }
      }

      for (var13.x = var4.x; var13.x < var5.x; var13.x++) {
         for (var13.z = var4.z; var13.z < var5.z; var13.z++) {
            int[] var23 = new int[var10 + 1];
            int[] var17 = new int[var10 + 1];
            int[] var18 = new int[var10 + 1];
            int[] var19 = new int[var10 + 1];

            for (var13.y = var9 - 1; var13.y >= var8; var13.y--) {
               int var20 = var13.y - var8;
               boolean var21 = var11.get(var13.x, var13.y, var13.z);
               if (var13.y == var9 - 1) {
                  if (var21) {
                     var17[var20] = 1;
                  } else {
                     var17[var20] = 0;
                  }

                  var19[var20] = 1073741823;
               } else if (var21) {
                  var17[var20] = var17[var20 + 1] + 1;
                  var19[var20] = var19[var20 + 1];
               } else {
                  var17[var20] = 0;
                  if (var11.get(var13.x, var13.y + 1, var13.z)) {
                     var19[var20] = 0;
                  } else {
                     var19[var20] = var19[var20 + 1] + 1;
                  }
               }
            }

            for (var13.y = var8; var13.y < var9; var13.y++) {
               int var24 = var13.y - var8;
               boolean var26 = var11.get(var13.x, var13.y, var13.z);
               if (var13.y == var8) {
                  if (var26) {
                     var23[var24] = 1;
                  } else {
                     var23[var24] = 0;
                  }

                  var18[var24] = Integer.MAX_VALUE;
               } else if (var26) {
                  var23[var24] = var23[var24 - 1] + 1;
                  var18[var24] = var18[var24 - 1];
               } else {
                  var23[var24] = 0;
                  if (var11.get(var13.x, var13.y - 1, var13.z)) {
                     var18[var24] = 0;
                  } else {
                     var18[var24] = var18[var24 - 1] + 1;
                  }
               }
            }

            for (var13.y = var9 - 1; var13.y >= var8; var13.y--) {
               if (var13.x >= var6.x && var13.y >= var6.y && var13.z >= var6.z && var13.x < var7.x && var13.y < var7.y && var13.z < var7.z) {
                  int var25 = var13.y - var8;
                  MaterialProvider.Context var27 = new MaterialProvider.Context(var1, 0.0, var17[var25], var23[var25], var19[var25], var18[var25], var2x -> {
                     var12.position = Vector3iUtil.toVector3d(var2x);
                     class="kw">return this.density.process(var12);
                  }, var12.distanceToBiomeEdge, null, null);
                  Material var22 = this.materialProvider.getVoxelTypeAt(var27);
                  if (var22 == null) {
                     var22 = this.defaultMaterial;
                  }

                  if (this.placementMask.canPlace(var22)) {
                     Material var14 = var2.get(var13.x, var13.y, var13.z);
                     int var15 = var14.hashMaterialIds();
                     if (this.placementMask.canReplace(var22.hashCode(), var15)) {
                        var2.set(var22, var13.x, var13.y, var13.z);
                     }
                  }
               }
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getReadBounds_voxelGrid() {
      class="kw">return this.readBounds_voxelGrid;
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getWriteBounds_voxelGrid() {
      class="kw">return this.writeBounds_voxelGrid;
   }
}