ColumnRandomScanner class

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/scanners/deprecated/ColumnRandomScanner.java

extends: Scanner

Поля (32)

МодификаторыТипИмя
DART_THROW, PICK_VALID
break
break
final int minY
int var10
Vector3i var10
int var11
Pattern.Context var11
int var12
IntArrayList var13
Vector3i var13
FastRandom var14
Bounds3i var2
Bounds3i var2
int var3
var3
var3
int var3
int var4
var4
var4
int var4
int var5
int var5
Vector3i var6
int var6
Pattern.Context var7
int var7
FastRandom var8
int var9
Vector3i var9
IntArrayList var9

Методы (14)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException()
Strategy Strategy()
for for(int var8 = var3; var8 < var4; var8++)
for for(int var10 = 0; var10 < this.resultsCap; var10++)
for for(int var12 = 0; var12 < var7; var12++)
if if(var3 < 0)
if if(!var6)
if if(this.resultsCap != 0)
if if(this.isRelativeToPosition)
if if(this.resultsCap != 0)
if if(var5 != 0)
public void scanDartThrowvoid scanDartThrow(@Nonnull Scanner.Context var1)
private void scanPickValidvoid scanPickValid(@Nonnull Scanner.Context var1)
switch switch(this.strategy)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.RngField;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
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 ColumnRandomScanner class="kw">extends Scanner {
   class="kw">private class="kw">final int minY;
   class="kw">private class="kw">final int maxY;
   class="kw">private class="kw">final boolean isRelativeToPosition;
   class="kw">private class="kw">final double baseHeight;
   class="kw">private class="kw">final int resultsCap;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final ColumnRandomScanner.Strategy strategy;
   @Nonnull
   class="kw">private class="kw">final Bounds3i bounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final List<Vector3i> rPositions;

   class="kw">public ColumnRandomScanner(int var1, int var2, int var3, int var4, @Nonnull ColumnRandomScanner.Strategy var5, boolean var6, double var7) {
      if (var3 < 0) {
         throw new IllegalArgumentException();
      }

      this.baseHeight = var7;
      this.minY = var1;
      this.maxY = var2;
      this.isRelativeToPosition = var6;
      this.resultsCap = var3;
      this.rngField = new RngField(var4);
      this.strategy = var5;
      if (!var6) {
         int var9 = -1073741824;
         int var10 = 1073741823;
         this.bounds_voxelGrid = new Bounds3i(new Vector3i(0, -1073741824, 0), new Vector3i(1, 1073741823, 1));
      } else {
         this.bounds_voxelGrid = new Bounds3i(new Vector3i(0, var1, 0), new Vector3i(1, var2, 1));
      }

      this.rPositions = new ArrayList<>();
   }

   @Override
   class="kw">public void scan(@Nonnull Scanner.Context var1) {
      class="kw">switch (this.strategy) {
         case DART_THROW:
            this.scanDartThrow(var1);
            break;
         case PICK_VALID:
            this.scanPickValid(var1);
      }
   }

   @Override
   class="kw">public void scan(@Nonnull Vector3i var1, @Nonnull Pipe.One<Vector3i> var2) {
   }

   class="kw">private void scanPickValid(@Nonnull Scanner.Context var1) {
      if (this.resultsCap != 0) {
         this.rPositions.clear();
         Bounds3i var2 = var1.materialSpace.getBounds();
         int var3;
         int var4;
         if (this.isRelativeToPosition) {
            var3 = Math.max(var1.position.y + this.minY, var2.min.y);
            var4 = Math.min(var1.position.y + this.maxY, var2.max.y);
         } else {
            int var5 = (int)this.baseHeight;
            var3 = Math.max(var5 + this.minY, var2.min.y);
            var4 = Math.min(var5 + this.maxY, var2.max.y);
         }

         int var12 = Math.max(0, var4 - var3);
         Vector3i var6 = new Vector3i(var1.position);
         Pattern.Context var7 = new Pattern.Context(var6, var1.materialSpace);

         for (int var8 = var3; var8 < var4; var8++) {
            var6.y = var8;
            if (var1.pattern.matches(var7)) {
               Vector3i var9 = new Vector3i(var1.position);
               var9.y = var8;
               this.rPositions.add(var9);
            }
         }

         if (!this.rPositions.isEmpty()) {
            if (this.rPositions.size() > this.resultsCap) {
               IntArrayList var13 = new IntArrayList(this.resultsCap);
               FastRandom var14 = new FastRandom(this.rngField.get(var1.position.x, var1.position.y, var1.position.z));

               for (int var10 = 0; var10 < this.resultsCap; var10++) {
                  int var11 = var14.nextInt(this.rPositions.size());
                  if (!var13.contains(var11)) {
                     var13.add(var11);
                     var1.validPositions_out.add(this.rPositions.get(var11));
                  }
               }
            }
         }
      }
   }

   class="kw">public void scanDartThrow(@Nonnull Scanner.Context var1) {
      if (this.resultsCap != 0) {
         Bounds3i var2 = var1.materialSpace.getBounds();
         int var3 = this.isRelativeToPosition ? Math.max(var1.position.y + this.minY, var2.min.y) : Math.max(this.minY, var2.min.y);
         int var4 = this.isRelativeToPosition ? Math.min(var1.position.y + this.maxY, var2.max.y) : Math.min(this.maxY, var2.max.y);
         int var5 = var4 - var3;
         if (var5 != 0) {
            int var6 = 1;
            int var7 = var5 * 1;
            FastRandom var8 = new FastRandom(this.rngField.get(var1.position.x, var1.position.y, var1.position.z));
            IntArrayList var9 = new IntArrayList(this.resultsCap);
            Vector3i var10 = new Vector3i(var1.position);
            Pattern.Context var11 = new Pattern.Context(var10, var1.materialSpace);

            for (int var12 = 0; var12 < var7; var12++) {
               var10.y = var8.nextInt(var5) + var3;
               if (var1.pattern.matches(var11) && !var9.contains(var10.y)) {
                  var9.add(var10.y);
                  Vector3i var13 = new Vector3i(var10);
                  var1.validPositions_out.add(var13);
                  if (var1.validPositions_out.size() == this.resultsCap) {
                     break;
                  }
               }
            }
         }
      }
   }

   @Override
   class="kw">public Bounds3i getBounds_voxelGrid() {
      class="kw">return this.bounds_voxelGrid;
   }

   class="kw">public enum Strategy {
      DART_THROW,
      PICK_VALID;

      Strategy() {
      }
   }
}