RandomChunkColumnIterator class

Пакет: com.hypixel.hytale.server.spawning.util

Файл: com/hypixel/hytale/server/spawning/util/RandomChunkColumnIterator.java

Поля (13)

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

Методы (17)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException()
public int getCurrentIndexint getCurrentIndex()
public int getCurrentXint getCurrentX()
public int getCurrentZint getCurrentZ()
if if(var2 == -1)
if if(var4 > 3)
if if(this.initialPositions == null)
if if(var1 == -1)
public boolean isAtSavedIteratorPositionboolean isAtSavedIteratorPosition()
public void markPositionVisitedvoid markPositionVisited(int var1)
public void markPositionVisitedvoid markPositionVisited()
public int nextPositionint nextPosition()
private int nextPositionint nextPosition(int var1)
public int nextPositionAvoidBordersint nextPositionAvoidBorders()
public int positionsLeftint positionsLeft()
private void resetvoid reset()
public void saveIteratorPositionvoid saveIteratorPosition()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.util;

class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.WorldChunk;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class RandomChunkColumnIterator {
   @Nonnull
   class="kw">private class="kw">final ChunkColumnMask availablePositions = new ChunkColumnMask();
   @Nullable
   class="kw">private class="kw">final ChunkColumnMask initialPositions;
   @Nonnull
   class="kw">private class="kw">final Random random = new Random();
   class="kw">private class="kw">final long seed;
   class="kw">private int currentIndex;
   class="kw">private int lastSavedIteratorPosition;

   class="kw">public RandomChunkColumnIterator() {
      this.initialPositions = null;
      this.seed = this.random.nextLong();
   }

   class="kw">public RandomChunkColumnIterator(@Nonnull ChunkColumnMask var1) {
      this.initialPositions = var1;
      if (var1.isEmpty()) {
         throw new IllegalArgumentException();
      }

      this.seed = this.random.nextLong();
   }

   class="kw">public RandomChunkColumnIterator(ChunkColumnMask var1, @Nonnull WorldChunk var2) {
      this.initialPositions = var1;
      this.seed = (var2.getX() * 151L + var2.getZ()) * 131L;
   }

   class="kw">public int getCurrentIndex() {
      class="kw">return this.currentIndex;
   }

   class="kw">public int getCurrentX() {
      class="kw">return ChunkUtil.xFromColumn(this.currentIndex);
   }

   class="kw">public int getCurrentZ() {
      class="kw">return ChunkUtil.zFromColumn(this.currentIndex);
   }

   @Nullable
   class="kw">public ChunkColumnMask getInitialPositions() {
      class="kw">return this.initialPositions;
   }

   class="kw">public int nextPosition() {
      if (this.availablePositions.isEmpty()) {
         this.reset();
      }

      int var1 = this.random.nextInt(1024);
      int var2 = this.availablePositions.nextSetBit(var1);
      if (var2 == -1) {
         var2 = this.availablePositions.previousSetBit(var1);
      }

      class="kw">return this.nextPosition(var2);
   }

   class="kw">public int nextPositionAvoidBorders() {
      if (this.availablePositions.isEmpty()) {
         this.reset();
      }

      int var1 = this.random.nextInt(1024);
      int var2;
      int var3;
      if (this.availablePositions.get(var1)) {
         var2 = this.availablePositions.previousClearBit(var1) + 1;
         var3 = this.availablePositions.nextClearBit(var1) - 1;
      } else {
         var3 = this.availablePositions.previousSetBit(var1);
         var2 = this.availablePositions.nextSetBit(var1);
         if (var3 != -1 && (var2 == -1 || var1 - var3 <= var2 - var1)) {
            var2 = this.availablePositions.previousClearBit(var3) + 1;
         } else {
            var3 = this.availablePositions.nextClearBit(var2) - 1;
         }
      }

      int var4 = var3 - var2 + 1;
      if (var4 > 3) {
         var2 += 1 + this.random.nextInt(var4 - 2);
      } else if (var4 > 1) {
         var2 += this.random.nextInt(var4);
      }

      if (!this.availablePositions.get(var2)) {
         throw new IllegalArgumentException();
      } else {
         class="kw">return this.nextPosition(var2);
      }
   }

   class="kw">public void saveIteratorPosition() {
      this.lastSavedIteratorPosition = this.positionsLeft();
   }

   class="kw">public boolean isAtSavedIteratorPosition() {
      class="kw">return this.positionsLeft() == this.lastSavedIteratorPosition;
   }

   class="kw">public int positionsLeft() {
      class="kw">return this.availablePositions.cardinality();
   }

   class="kw">public void markPositionVisited(int var1) {
      this.availablePositions.clear(var1);
   }

   class="kw">public void markPositionVisited() {
      this.markPositionVisited(this.currentIndex);
   }

   class="kw">private void reset() {
      this.random.setSeed(this.seed);
      if (this.initialPositions == null) {
         this.availablePositions.set();
      } else {
         if (this.initialPositions.isEmpty()) {
            throw new IllegalArgumentException();
         }

         this.availablePositions.copyFrom(this.initialPositions);
      }
   }

   class="kw">private int nextPosition(int var1) {
      if (var1 == -1) {
         throw new IllegalArgumentException();
      }

      this.markPositionVisited(var1);
      class="kw">return this.currentIndex = var1;
   }
}