PondFillerProp class

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

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

extends: Prop

Поля (41)

МодификаторыТипИмя
final int TRAVERSED
int var12
int var13
ArrayDeque var14
Vector3i var15
int var16
int var17
ScanResult var2
Material var20
var20
var20
var20
var20
int var25
var25
var25
var25
var25
Scanner.Context var3
Vector3i var3
var3
List var3
int var32
ArrayList var33
ArrayList var4
Vector3i var4
var4
int var40
int var41
int var45
int var46
int var47
Bounds3i var5
ArrayVoxelSpace var6
MaterialProvider.Context var6
List var7
Material var7
Material var7
List var8
int var8
int var9

Методы (19)

МодификаторыВозвратСигнатура
abstract return new FillerPropScanResultreturn new FillerPropScanResult(var8)
abstract return new FillerPropScanResultreturn new FillerPropScanResult(var4)
for for(Vector3i var6 : var3.validPositions_out)
for for(int var10 = var3.x; var10 < var4.x; var10++)
for for(int var11 = var3.z; var11 < var4.z; var11++)
for for(int var30 = var3.y + 1; var30 < var4.y; var30++)
for for(int var34 = var3.x; var34 < var4.x; var34++)
for for(int var38 = var3.z; var38 < var4.z; var38++)
for for(int var31 = var5.min.y + 1; var31 < var5.max.y; var31++)
for for(int var35 = var5.min.x + 1; var35 < var5.max.x - 1; var35++)
for for(int var39 = var5.min.z + 1; var39 < var5.max.z - 1; var39++)
for for(Vector3i var5 : var3)
if if(var3 != null)
if if(var7 != null)
static boolean isLeaksboolean isLeaks(int var0)
static boolean isSolidboolean isSolid(int var0)
static boolean isStackedboolean isStacked(int var0)
static boolean isTraversedboolean isTraversed(int var0)
public void place_deprecatedvoid place_deprecated(@Nonnull Prop.Context var1, @Nonnull ScanResult var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.MaterialSet;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
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.props.deprecated.ScanResult;
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.ArrayDeque;
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 PondFillerProp class="kw">extends Prop {
   class="kw">private class="kw">static class="kw">final int TRAVERSED = 1;
   class="kw">private class="kw">static class="kw">final int LEAKS = 16;
   class="kw">private class="kw">static class="kw">final int SOLID = 256;
   class="kw">private class="kw">static class="kw">final int STACKED = 4096;
   @Nonnull
   class="kw">private class="kw">final Vector3i boundingMin;
   @Nonnull
   class="kw">private class="kw">final Vector3i boundingMax;
   @Nonnull
   class="kw">private class="kw">final MaterialProvider<Material> fillerMaterialProvider;
   @Nonnull
   class="kw">private class="kw">final MaterialSet solidSet;
   @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 Bounds3i readBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i writeBounds_voxelGrid;

   class="kw">public PondFillerProp(
      @Nonnull Vector3i var1,
      @Nonnull Vector3i var2,
      @Nonnull MaterialSet var3,
      @Nonnull MaterialProvider<Material> var4,
      @Nonnull Scanner var5,
      @Nonnull Pattern var6
   ) {
      this.boundingMin = new Vector3i(var1);
      this.boundingMax = new Vector3i(var2);
      this.solidSet = var3;
      this.fillerMaterialProvider = var4;
      this.scanner = var5;
      this.pattern = var6;
      this.readBounds_voxelGrid = this.scanner.getBoundsWithPattern_voxelGrid(var6);
      this.writeBounds_voxelGrid = new Bounds3i(var1, var2);
      this.writeBounds_voxelGrid.stack(this.readBounds_voxelGrid);
   }

   class="kw">private class="kw">static boolean isTraversed(int var0) {
      class="kw">return (var0 & 1) == 1;
   }

   class="kw">private class="kw">static boolean isLeaks(int var0) {
      class="kw">return (var0 & 16) == 16;
   }

   class="kw">private class="kw">static boolean isSolid(int var0) {
      class="kw">return (var0 & 256) == 256;
   }

   class="kw">private class="kw">static boolean isStacked(int var0) {
      class="kw">return (var0 & 4096) == 4096;
   }

   @Nonnull
   class="kw">public FillerPropScanResult 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);
      if (var3.validPositions_out.size() == 1) {
         List var8 = this.renderFluidBlocks(var3.validPositions_out.getFirst(), var2);
         class="kw">return new FillerPropScanResult(var8);
      }

      ArrayList var4 = new ArrayList<>();

      for (Vector3i var6 : var3.validPositions_out) {
         List var7 = this.renderFluidBlocks(var6, var2);
         var4.addAll(var7);
      }

      class="kw">return new FillerPropScanResult(var4);
   }

   @Nonnull
   class="kw">private List<Vector3i> renderFluidBlocks(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
      Vector3i var3 = new Vector3i(this.boundingMin).add(var1);
      Vector3i var4 = new Vector3i(this.boundingMax).add(var1);
      var3 = Vector3iUtil.max(var3, var2.getBounds().min);
      var4 = Vector3iUtil.min(var4, var2.getBounds().max);
      Bounds3i var5 = new Bounds3i(var3, var4);
      ArrayVoxelSpace var6 = new ArrayVoxelSpace<>(new Bounds3i(var3, var4));
      var6.setAll(0);
      int var9 = var3.y;

      for (int var10 = var3.x; var10 < var4.x; var10++) {
         for (int var11 = var3.z; var11 < var4.z; var11++) {
            Material var7 = var2.get(var10, var9, var11);
            int var8 = var7.hashMaterialIds();
            int var12 = 1;
            if (this.solidSet.test(var8)) {
               var12 |= 256;
               var6.set(var12, var10, var9, var11);
            } else {
               var12 |= 16;
               var6.set(var12, var10, var9, var11);
            }
         }
      }

      for (int var30 = var3.y + 1; var30 < var4.y; var30++) {
         int var32 = var30 - 1;

         for (int var34 = var3.x; var34 < var4.x; var34++) {
            for (int var38 = var3.z; var38 < var4.z; var38++) {
               if (!isTraversed(var6.get(var34, var30, var38))) {
                  int var13 = var6.get(var34, var32, var38);
                  Material var20 = var2.get(var34, var30, var38);
                  int var25 = var20.hashMaterialIds();
                  if (this.solidSet.test(var25)) {
                     int var41 = 0;
                     var41 |= 1;
                     var41 |= 256;
                     var6.set(var41, var34, var30, var38);
                  } else if (isLeaks(var13) || var34 == var3.x || var34 == var4.x - 1 || var38 == var3.z || var38 == var4.z - 1) {
                     ArrayDeque var14 = new ArrayDeque<>();
                     var14.push(new Vector3i(var34, var30, var38));
                     var6.set(4096, var34, var30, var38);

                     while (!var14.isEmpty()) {
                        Vector3i var15 = var14.pop();
                        int var16 = var6.get(var15.x, var15.y, var15.z);
                        var16 |= 16;
                        var6.set(var16, var15.x, var15.y, var15.z);
                        var15.x--;
                        if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
                           int var17 = var6.get(var15.x, var15.y, var15.z);
                           if (!isStacked(var17)) {
                              var20 = var2.get(var15.x, var15.y, var15.z);
                              var25 = var20.hashMaterialIds();
                              if (!this.solidSet.test(var25)) {
                                 var14.push(new Vector3i(var15));
                                 var6.set(4096 | var17, var15.x, var15.y, var15.z);
                              }
                           }
                        }

                        var15.x += 2;
                        if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
                           int var45 = var6.get(var15.x, var15.y, var15.z);
                           if (!isStacked(var45)) {
                              var20 = var2.get(var15.x, var15.y, var15.z);
                              var25 = var20.hashMaterialIds();
                              if (!this.solidSet.test(var25)) {
                                 var14.push(new Vector3i(var15));
                                 var6.set(4096 | var45, var15.x, var15.y, var15.z);
                              }
                           }
                        }

                        var15.x--;
                        var15.z--;
                        if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
                           int var46 = var6.get(var15.x, var15.y, var15.z);
                           if (!isStacked(var46)) {
                              var20 = var2.get(var15.x, var30, var15.z);
                              var25 = var20.hashMaterialIds();
                              if (!this.solidSet.test(var25)) {
                                 var14.push(new Vector3i(var15));
                                 var6.set(4096 | var46, var15.x, var15.y, var15.z);
                              }
                           }
                        }

                        var15.z += 2;
                        if (var6.getBounds().contains(var15.x, var15.y, var15.z)) {
                           int var47 = var6.get(var15.x, var15.y, var15.z);
                           if (!isStacked(var47)) {
                              var20 = var2.get(var15.x, var15.y, var15.z);
                              var25 = var20.hashMaterialIds();
                              if (!this.solidSet.test(var25)) {
                                 var14.push(new Vector3i(var15));
                                 var6.set(4096 | var47, var15.x, var15.y, var15.z);
                              }
                           }
                        }

                        var15.z--;
                     }
                  }
               }
            }
         }
      }

      ArrayList var33 = new ArrayList<>();

      for (int var31 = var5.min.y + 1; var31 < var5.max.y; var31++) {
         for (int var35 = var5.min.x + 1; var35 < var5.max.x - 1; var35++) {
            for (int var39 = var5.min.z + 1; var39 < var5.max.z - 1; var39++) {
               int var40 = var6.get(var35, var31, var39);
               if (!isSolid(var40) && !isLeaks(var40)) {
                  var33.add(new Vector3i(var35, var31, var39));
               }
            }
         }
      }

      class="kw">return var33;
   }

   class="kw">public void place_deprecated(@Nonnull Prop.Context var1, @Nonnull ScanResult var2) {
      List var3 = FillerPropScanResult.cast(var2).getFluidBlocks();
      if (var3 != null) {
         for (Vector3i var5 : var3) {
            if (var1.materialWriteSpace.getBounds().contains(var5.x, var5.y, var5.z)) {
               MaterialProvider.Context var6 = new MaterialProvider.Context(var5, 0.0, 0, 0, 0, 0, null, var1.distanceToBiomeEdge, null, null);
               Material var7 = this.fillerMaterialProvider.getVoxelTypeAt(var6);
               if (var7 != null) {
                  var1.materialWriteSpace.set(var7, var5.x, var5.y, var5.z);
               }
            }
         }
      }
   }

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

   @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;
   }
}