PondFillerProp class

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

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

extends: Prop

Поля (28)

МодификаторыТипИмя
final int TRAVERSED
ArrayDeque var10
Vector3i var11
int var12
int var13
int var16
Bounds3i var2
int var21
int var22
Material var23
Material var26
var26
var26
var26
var26
int var3
int var35
int var39
int var40
int var41
Material var6
int var7
int var8
int var9
var9
var9
var9
var9

Методы (12)

МодификаторыВозвратСигнатура
for for(int var4 = this.rLocalBounds.min.x; var4 < this.rLocalBounds.max.x; var4++)
for for(int var5 = this.rLocalBounds.min.z; var5 < this.rLocalBounds.max.z; var5++)
for for(int var14 = this.rLocalBounds.min.y + 1; var14 < this.rLocalBounds.max.y; var14++)
for for(int var18 = this.rLocalBounds.min.x; var18 < this.rLocalBounds.max.x; var18++)
for for(int var20 = this.rLocalBounds.min.z; var20 < this.rLocalBounds.max.z; var20++)
for for(int var15 = this.rLocalWriteBounds.min.y; var15 < this.rLocalWriteBounds.max.y; var15++)
for for(int var17 = this.rLocalWriteBounds.min.x; var17 < this.rLocalWriteBounds.max.x; var17++)
for for(int var19 = this.rLocalWriteBounds.min.z; var19 < this.rLocalWriteBounds.max.z; var19++)
static boolean isLeaksboolean isLeaks(int var0)
static boolean isSolidboolean isSolid(int var0)
static boolean isStackedboolean isStacked(int var0)
static boolean isTraversedboolean isTraversed(int var0)

Исходный код

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

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.voxelspace.ArrayVoxelSpace;
class="kw">import java.util.ArrayDeque;
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 Bounds3i bounds;
   @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 Bounds3i rLocalBounds;
   @Nonnull
   class="kw">private class="kw">final Bounds3i rLocalWriteBounds;
   @Nonnull
   class="kw">private class="kw">final ArrayVoxelSpace<Integer> rMask;
   @Nonnull
   class="kw">private class="kw">final MaterialProvider.Context rMaterialProviderContext;

   class="kw">public PondFillerProp(@Nonnull Bounds3i var1, @Nonnull MaterialProvider<Material> var2, @Nonnull MaterialSet var3) {
      this.bounds = var1.clone();
      this.fillerMaterialProvider = var2;
      this.solidSet = var3;
      this.rLocalBounds = new Bounds3i();
      this.rLocalWriteBounds = new Bounds3i();
      this.rMask = new ArrayVoxelSpace<>(var1);
      this.rMaterialProviderContext = new MaterialProvider.Context(new Vector3i(), 0.0, 0, 0, 0, 0, null, Double.MAX_VALUE, null, null);
   }

   @Override
   class="kw">public boolean generate(@Nonnull Prop.Context var1) {
      this.rLocalBounds.assign(this.bounds).offset(var1.position);
      this.rLocalWriteBounds.assign(this.rLocalBounds).intersect(var1.materialWriteSpace.getBounds());
      if (!var1.materialReadSpace.getBounds().contains(this.rLocalBounds)) {
         class="kw">return true;
      }

      Bounds3i var2 = this.rMask.getBounds();
      var2.assign(this.bounds);
      var2.offset(var1.position);
      this.rMask.setAll(0);
      int var3 = this.rLocalBounds.min.y;

      for (int var4 = this.rLocalBounds.min.x; var4 < this.rLocalBounds.max.x; var4++) {
         for (int var5 = this.rLocalBounds.min.z; var5 < this.rLocalBounds.max.z; var5++) {
            Material var6 = var1.materialReadSpace.get(var4, var3, var5);
            int var7 = var6.hashMaterialIds();
            int var8 = 1;
            if (this.solidSet.test(var7)) {
               var8 |= 256;
               this.rMask.set(var8, var4, var3, var5);
            } else {
               var8 |= 16;
               this.rMask.set(var8, var4, var3, var5);
            }
         }
      }

      for (int var14 = this.rLocalBounds.min.y + 1; var14 < this.rLocalBounds.max.y; var14++) {
         int var16 = var14 - 1;

         for (int var18 = this.rLocalBounds.min.x; var18 < this.rLocalBounds.max.x; var18++) {
            for (int var20 = this.rLocalBounds.min.z; var20 < this.rLocalBounds.max.z; var20++) {
               if (!isTraversed(this.rMask.get(var18, var14, var20))) {
                  int var22 = this.rMask.get(var18, var16, var20);
                  Material var26 = var1.materialReadSpace.get(var18, var14, var20);
                  int var9 = var26.hashMaterialIds();
                  if (this.solidSet.test(var9)) {
                     int var35 = 0;
                     var35 |= 1;
                     var35 |= 256;
                     this.rMask.set(var35, var18, var14, var20);
                  } else if (isLeaks(var22)
                     || var18 == this.rLocalBounds.min.x
                     || var18 == this.rLocalBounds.max.x - 1
                     || var20 == this.rLocalBounds.min.z
                     || var20 == this.rLocalBounds.max.z - 1) {
                     ArrayDeque var10 = new ArrayDeque<>();
                     var10.push(new Vector3i(var18, var14, var20));
                     this.rMask.set(4096, var18, var14, var20);

                     while (!var10.isEmpty()) {
                        Vector3i var11 = var10.pop();
                        int var12 = this.rMask.get(var11.x, var11.y, var11.z);
                        var12 |= 16;
                        this.rMask.set(var12, var11.x, var11.y, var11.z);
                        var11.x--;
                        if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
                           int var13 = this.rMask.get(var11.x, var11.y, var11.z);
                           if (!isStacked(var13)) {
                              var26 = var1.materialReadSpace.get(var11.x, var11.y, var11.z);
                              var9 = var26.hashMaterialIds();
                              if (!this.solidSet.test(var9)) {
                                 var10.push(new Vector3i(var11));
                                 this.rMask.set(4096 | var13, var11.x, var11.y, var11.z);
                              }
                           }
                        }

                        var11.x += 2;
                        if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
                           int var39 = this.rMask.get(var11.x, var11.y, var11.z);
                           if (!isStacked(var39)) {
                              var26 = var1.materialReadSpace.get(var11.x, var11.y, var11.z);
                              var9 = var26.hashMaterialIds();
                              if (!this.solidSet.test(var9)) {
                                 var10.push(new Vector3i(var11));
                                 this.rMask.set(4096 | var39, var11.x, var11.y, var11.z);
                              }
                           }
                        }

                        var11.x--;
                        var11.z--;
                        if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
                           int var40 = this.rMask.get(var11.x, var11.y, var11.z);
                           if (!isStacked(var40)) {
                              var26 = var1.materialReadSpace.get(var11.x, var14, var11.z);
                              var9 = var26.hashMaterialIds();
                              if (!this.solidSet.test(var9)) {
                                 var10.push(new Vector3i(var11));
                                 this.rMask.set(4096 | var40, var11.x, var11.y, var11.z);
                              }
                           }
                        }

                        var11.z += 2;
                        if (this.rMask.getBounds().contains(var11.x, var11.y, var11.z)) {
                           int var41 = this.rMask.get(var11.x, var11.y, var11.z);
                           if (!isStacked(var41)) {
                              var26 = var1.materialReadSpace.get(var11.x, var11.y, var11.z);
                              var9 = var26.hashMaterialIds();
                              if (!this.solidSet.test(var9)) {
                                 var10.push(new Vector3i(var11));
                                 this.rMask.set(4096 | var41, var11.x, var11.y, var11.z);
                              }
                           }
                        }

                        var11.z--;
                     }
                  }
               }
            }
         }
      }

      this.rMaterialProviderContext.distanceToBiomeEdge = var1.distanceToBiomeEdge;

      for (int var15 = this.rLocalWriteBounds.min.y; var15 < this.rLocalWriteBounds.max.y; var15++) {
         for (int var17 = this.rLocalWriteBounds.min.x; var17 < this.rLocalWriteBounds.max.x; var17++) {
            for (int var19 = this.rLocalWriteBounds.min.z; var19 < this.rLocalWriteBounds.max.z; var19++) {
               int var21 = this.rMask.get(var17, var15, var19);
               if (!isSolid(var21) && !isLeaks(var21)) {
                  this.rMaterialProviderContext.position.set(var17, var15, var19);
                  Material var23 = this.fillerMaterialProvider.getVoxelTypeAt(this.rMaterialProviderContext);
                  var1.materialWriteSpace.set(var23, var17, var15, var19);
               }
            }
         }
      }

      class="kw">return true;
   }

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

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

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