RandomScanner class

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

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

extends: Scanner

Поля (3)

МодификаторыТипИмя
break
break
int var4

Методы (4)

МодификаторыВозвратСигнатура
public void acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2)
for for(int var3 = 0; var3 < this.attempts && !this.rControl.stop; var3++)
if if(var2.stop)
switch switch(this.axis)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.delimiters.RangeInt;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
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.math.Axis;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class RandomScanner class="kw">extends Scanner {
   @Nonnull
   class="kw">private class="kw">final Axis axis;
   @Nonnull
   class="kw">private class="kw">final RangeInt range;
   @Nonnull
   class="kw">private class="kw">final Scanner childScanner;
   @Nonnull
   class="kw">private class="kw">final Bounds3i bounds;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final FastRandom random;
   class="kw">private class="kw">final int attempts;
   @Nonnull
   class="kw">private class="kw">final Control rControl;
   @Nonnull
   class="kw">private class="kw">final Vector3i rPosition;
   @Nonnull
   class="kw">private Pipe.One<Vector3i> rContextPipe;
   @Nonnull
   class="kw">private class="kw">final Pipe.One<Vector3i> rChildPipe = new Pipe.One<Vector3i>() {
      class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
         RandomScanner.this.rContextPipe.accept(var1, var2);
         if (var2.stop) {
            RandomScanner.this.rControl.stop = true;
         }
      }
   };

   class="kw">public RandomScanner(@Nonnull Axis var1, @Nonnull RangeInt var2, @Nonnull Scanner var3, int var4) {
      this.axis = var1;
      this.range = var2;
      this.childScanner = var3;
      this.rngField = new RngField(var4);
      this.attempts = var2.getMaxExclusive() - var2.getMinInclusive();
      this.random = new FastRandom();

      this.bounds = class="kw">switch (var1) {
         case X -> new Bounds3i(new Vector3i(var2.getMinInclusive(), 0, 0), new Vector3i(var2.getMaxExclusive(), 1, 1));
         case Y -> new Bounds3i(new Vector3i(0, var2.getMinInclusive(), 0), new Vector3i(1, var2.getMaxExclusive(), 1));
         case Z -> new Bounds3i(new Vector3i(0, 0, var2.getMinInclusive()), new Vector3i(1, 1, var2.getMaxExclusive()));
      };
      this.bounds.stack(var3.getBounds_voxelGrid());
      this.rControl = new Control();
      this.rPosition = new Vector3i();
      this.rContextPipe = Pipe.getEmptyOne();
   }

   @Override
   class="kw">public void scan(@Nonnull Scanner.Context var1) {
   }

   @Override
   class="kw">public void scan(@Nonnull Vector3i var1, @Nonnull Pipe.One<Vector3i> var2) {
      this.rContextPipe = var2;
      this.rPosition.set(var1);
      this.rControl.reset();
      this.random.setSeed(this.rngField.get(var1.x, var1.y, var1.z));

      for (int var3 = 0; var3 < this.attempts && !this.rControl.stop; var3++) {
         int var4 = this.random.nextInt(this.attempts) + this.range.getMinInclusive();
         class="kw">switch (this.axis) {
            case X:
               this.rPosition.x = var4 + var1.x;
               break;
            case Y:
               this.rPosition.y = var4 + var1.y;
               break;
            case Z:
               this.rPosition.z = var4 + var1.z;
         }

         this.childScanner.scan(this.rPosition, this.rChildPipe);
      }

      this.rContextPipe = Pipe.getEmptyOne();
   }

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