ChunkGeneratorCache class

Пакет: com.hypixel.hytale.server.worldgen.cache

Файл: com/hypixel/hytale/server/worldgen/cache/ChunkGeneratorCache.java

Поля (8)

МодификаторыТипИмя
final int CONCURRENCY_LEVEL
int var2
long var3
CoreDataCacheEntry var4
CoreDataCacheEntry var4
InterpolatedBiomeCountList var5
int var5
int var6

Методы (14)

МодификаторыВозвратСигнатура
abstract void computevoid compute(int var1, int var2, int var3, InterpolatedBiomeCountList var4)
abstract int computeint compute(int var1, int var2, int var3)
abstract double computedouble compute(InterpolatedBiomeCountList var1)
abstract ZoneBiomeResult computeZoneBiomeResult compute(int var1, int var2, int var3)
final void destroyEntryvoid destroyEntry(CoordinateCache.CoordinateKey var1, CoreDataCacheEntry var2)
public void ensureBiomeCountListvoid ensureBiomeCountList(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4)
public void ensureHeightvoid ensureHeight(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4)
public void ensureHeightNoisevoid ensureHeightNoise(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4)
public int getHeightint getHeight(int var1, int var2, int var3)
public ZoneBiomeResult getZoneBiomeResultZoneBiomeResult getZoneBiomeResult(int var1, int var2, int var3)
if if(var4.biomeCountList == null)
if if(var4.height == -1)
if if(var4.heightNoise == Double.NEGATIVE_INFINITY)
public void putHeightvoid putHeight(int var1, int var2, int var3, int var4)

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ChunkGenerator;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ZoneBiomeResult;
class="kw">import com.hypixel.hytale.server.worldgen.util.ObjectPool;
class="kw">import com.hypixel.hytale.server.worldgen.util.cache.ConcurrentSizedTimeoutCache;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ChunkGeneratorCache {
   class="kw">private class="kw">static class="kw">final int CONCURRENCY_LEVEL = Math.max(1, ChunkGenerator.POOL_SIZE / 2);
   class="kw">private class="kw">final ChunkGeneratorCache.ZoneBiomeResultFunction zoneBiomeResultFunction;
   class="kw">private class="kw">final ChunkGeneratorCache.BiomeCountFunction biomeCountFunction;
   class="kw">private class="kw">final ChunkGeneratorCache.HeightFunction heightFunction;
   class="kw">private class="kw">final ChunkGeneratorCache.HeightNoiseFunction heightNoiseFunction;
   class="kw">private class="kw">final ObjectPool<CoordinateCache.CoordinateKey> keyPool;
   class="kw">private class="kw">final ConcurrentSizedTimeoutCache<CoordinateCache.CoordinateKey, CoreDataCacheEntry> cache;

   class="kw">public ChunkGeneratorCache(
      ChunkGeneratorCache.ZoneBiomeResultFunction var1,
      ChunkGeneratorCache.BiomeCountFunction var2,
      ChunkGeneratorCache.HeightFunction var3,
      ChunkGeneratorCache.HeightNoiseFunction var4,
      int var5,
      long var6
   ) {
      this.zoneBiomeResultFunction = var1;
      this.biomeCountFunction = var2;
      this.heightFunction = var3;
      this.heightNoiseFunction = var4;
      this.keyPool = new ObjectPool<>(var5, CoordinateCache.CoordinateKey::new);
      this.cache = new ConcurrentSizedTimeoutCache<>(var5, CONCURRENCY_LEVEL, var6, TimeUnit.SECONDS, this::computeKey, this::computeValue, this::destroyEntry);
   }

   @Nonnull
   class="kw">public CoreDataCacheEntry get(int var1, int var2, int var3) {
      class="kw">return this.cache.get(localKey().setLocation(var1, var2, var3));
   }

   class="kw">public ZoneBiomeResult getZoneBiomeResult(int var1, int var2, int var3) {
      class="kw">return this.get(var1, var2, var3).zoneBiomeResult;
   }

   @Nullable
   class="kw">public InterpolatedBiomeCountList getBiomeCountResult(int var1, int var2, int var3) {
      CoreDataCacheEntry var4 = this.get(var1, var2, var3);
      this.ensureBiomeCountList(var1, var2, var3, var4);
      class="kw">return var4.biomeCountList;
   }

   class="kw">public void putHeight(int var1, int var2, int var3, int var4) {
      this.get(var1, var2, var3).height = var4;
   }

   class="kw">public int getHeight(int var1, int var2, int var3) {
      CoreDataCacheEntry var4 = this.get(var1, var2, var3);
      this.ensureHeight(var1, var2, var3, var4);
      class="kw">return var4.height;
   }

   class="kw">public void ensureBiomeCountList(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4) {
      if (var4.biomeCountList == null) {
         InterpolatedBiomeCountList var5 = new InterpolatedBiomeCountList();
         this.biomeCountFunction.compute(var1, var2, var3, var5);
         var4.biomeCountList = var5;
      }
   }

   class="kw">public void ensureHeight(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4) {
      if (var4.height == -1) {
         var4.height = this.heightFunction.compute(var1, var2, var3);
      }
   }

   class="kw">public void ensureHeightNoise(int var1, int var2, int var3, @Nonnull CoreDataCacheEntry var4) {
      if (var4.heightNoise == Double.NEGATIVE_INFINITY) {
         this.ensureBiomeCountList(var1, var2, var3, var4);
         var4.heightNoise = this.heightNoiseFunction.compute(var4.biomeCountList);
      }
   }

   @Nonnull
   class="kw">protected class="kw">final CoordinateCache.CoordinateKey computeKey(CoordinateCache.CoordinateKey var1) {
      class="kw">return this.keyPool.apply(var1);
   }

   @Nonnull
   class="kw">protected class="kw">final CoreDataCacheEntry computeValue(@Nonnull CoordinateCache.CoordinateKey var1) {
      int var2 = var1.seed();
      long var3 = var1.coord();
      int var5 = ChunkUtil.xOfChunkIndex(var3);
      int var6 = ChunkUtil.zOfChunkIndex(var3);
      class="kw">return new CoreDataCacheEntry(this.zoneBiomeResultFunction.compute(var2, var5, var6));
   }

   class="kw">protected class="kw">final void destroyEntry(CoordinateCache.CoordinateKey var1, CoreDataCacheEntry var2) {
      this.keyPool.recycle(var1);
   }

   @Nonnull
   class="kw">protected class="kw">static CoordinateCache.CoordinateKey localKey() {
      class="kw">return ChunkGenerator.getResource().cacheCoordinateKey;
   }

   @FunctionalInterface
   class="kw">public class="kw">interface BiomeCountFunction {
      void compute(int var1, int var2, int var3, InterpolatedBiomeCountList var4);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface HeightFunction {
      int compute(int var1, int var2, int var3);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface HeightNoiseFunction {
      double compute(InterpolatedBiomeCountList var1);
   }

   @FunctionalInterface
   class="kw">public class="kw">interface ZoneBiomeResultFunction {
      ZoneBiomeResult compute(int var1, int var2, int var3);
   }
}