CachedPositionProvider class

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/positionproviders/cached/CachedPositionProvider.java

extends: PositionProvider

Поля (18)

МодификаторыТипИмя
return
ArrayList var10
Pipe.One var11
PositionProvider.Context var12
long var13
Control var15
Vector3i var2
Vector3i var2
Vector3d var2
Vector3i var3
int var3
var3
Vector3i var4
long var5
Vector3d[] var7
var7
Vector3d var8
Bounds3d var9

Методы (11)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException()
for for(var4.x = var2.x; var4.x <= var3.x; var4.x++)
for for(var4.z = var2.z; var4.z <= var3.z; var4.z++)
for for(var4.y = var2.y; var4.y <= var3.y; var4.y++)
for for(Vector3d var19 : var7)
public void getvoid get(@Nonnull PositionProvider.Context var1)
if if(var2 > 0 && var3 >= 0)
if if(var7 == null)
if if(var15.stop)
public int sectionFloorint sectionFloor(int var1)
private int toSectionAddressint toSectionAddress(double var1)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
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.positionproviders.PositionProvider;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import java.util.ArrayList;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class CachedPositionProvider class="kw">extends PositionProvider {
   @Nonnull
   class="kw">private class="kw">final PositionProvider positionProvider;
   class="kw">private class="kw">final int sectionSize;
   class="kw">private CacheThreadMemory cache;

   class="kw">public CachedPositionProvider(@Nonnull PositionProvider var1, int var2, int var3) {
      if (var2 > 0 && var3 >= 0) {
         this.positionProvider = var1;
         this.sectionSize = var2;
         this.cache = new CacheThreadMemory(var3);
      } else {
         throw new IllegalArgumentException();
      }
   }

   @Override
   class="kw">public void generate(@Nonnull PositionProvider.Context var1) {
      this.get(var1);
   }

   class="kw">public void get(@Nonnull PositionProvider.Context var1) {
      Vector3i var2 = this.sectionAddress(var1.bounds.min);
      Vector3i var3 = this.sectionAddress(var1.bounds.max);
      Vector3i var4 = new Vector3i(var2);

      for (var4.x = var2.x; var4.x <= var3.x; var4.x++) {
         for (var4.z = var2.z; var4.z <= var3.z; var4.z++) {
            for (var4.y = var2.y; var4.y <= var3.y; var4.y++) {
               long var5 = HashUtil.hash(var4.x, var4.y, var4.z);
               Vector3d[] var7 = (Vector3d[])this.cache.sections.get(var5);
               if (var7 == null) {
                  Vector3d var8 = this.sectionMin(var4);
                  Bounds3d var9 = new Bounds3d(var8, new Vector3d(var8).add(this.sectionSize, this.sectionSize, this.sectionSize));
                  ArrayList var10 = new ArrayList<>();
                  Pipe.One var11 = (var1x, var2x) -> var10.add(var1x);
                  PositionProvider.Context var12 = new PositionProvider.Context(var9, var11, null, null);
                  this.positionProvider.generate(var12);
                  var7 = new Vector3d[var10.size()];
                  var10.toArray(var7);
                  this.cache.sections.put(var5, var7);
                  this.cache.expirationList.add(var5);
                  if (this.cache.expirationList.size() > this.cache.size) {
                     long var13 = this.cache.expirationList.removeLong(0);
                     this.cache.sections.remove(var13);
                  }
               }

               Control var15 = new Control();

               for (Vector3d var19 : var7) {
                  if (var1.bounds.contains(var19)) {
                     if (var15.stop) {
                        class="kw">return;
                     }

                     var1.pipe.accept(new Vector3d(var19), var15);
                  }
               }
            }
         }
      }
   }

   @Nonnull
   class="kw">private Vector3i sectionAddress(@Nonnull Vector3d var1) {
      Vector3i var2 = Vector3dUtil.toVector3i(var1);
      var2.x = this.sectionFloor(var2.x) / this.sectionSize;
      var2.y = this.sectionFloor(var2.y) / this.sectionSize;
      var2.z = this.sectionFloor(var2.z) / this.sectionSize;
      class="kw">return var2;
   }

   @Nonnull
   class="kw">private Vector3d sectionMin(@Nonnull Vector3i var1) {
      Vector3d var2 = Vector3iUtil.toVector3d(var1);
      var2.x = var2.x * this.sectionSize;
      var2.y = var2.y * this.sectionSize;
      var2.z = var2.z * this.sectionSize;
      class="kw">return var2;
   }

   class="kw">private int toSectionAddress(double var1) {
      int var3 = (int)var1;
      var3 = this.sectionFloor(var3);
      class="kw">return var3 / this.sectionSize;
   }

   class="kw">public int sectionFloor(int var1) {
      class="kw">return var1 < 0 ? var1 - var1 % this.sectionSize - this.sectionSize : var1 - var1 % this.sectionSize;
   }
}