CavePopulator class

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

Файл: com/hypixel/hytale/server/worldgen/chunk/populator/CavePopulator.java

Поля (19)

МодификаторыТипИмя
IPointGenerator var10
int var10
ZoneBiomeResult var11
int var11
int var12
long var13
boolean var15
PrefabPasteUtil.PrefabPasteBuffer var16
long var3
int var5
int var5
ICoordinateCondition var5
int var6
int var6
int var6
Random var7
ChunkGenerator var8
int var8
int var9

Методы (11)

МодификаторыВозвратСигнатура
static void generatePrefabAtvoid generatePrefabAt(int var0, int var1, int var2, int var3, int var4, @Nonnull ChunkGeneratorExecution var5, @Nonnull Cave var6, @Nonnull CaveNode var7, BlockMaskCondition var8, @Nonnull WorldGenPrefabSupplier var9, PrefabRotation var10)
if if(var5 == DefaultCoordinateCondition.DEFAULT_TRUE)
if if(var5 == DefaultCoordinateCondition.DEFAULT_FALSE)
static boolean isMatchingHeightThresholdboolean isMatchingHeightThreshold(int var0, int var1, int var2, @Nonnull ChunkGenerator var3, @Nonnull CaveType var4)
static void populatevoid populate(int var0, @Nonnull ChunkGeneratorExecution var1)
static void populatevoid populate(int var0, @Nonnull ChunkGeneratorExecution var1, @Nonnull Cave var2)
static void populateCaveNodevoid populateCaveNode(int var0, @Nonnull ChunkGeneratorExecution var1, @Nonnull Cave var2, @Nonnull CaveNode var3, @Nonnull Random var4)
abstract populateCaveNode populateCaveNode(var0, var1, var2, var12, var7)
static void populatePrefabvoid populatePrefab(int var0, int var1, @Nonnull ChunkGeneratorExecution var2, @Nonnull Cave var3, @Nonnull CaveNode var4, @Nonnull CavePrefab var5)
abstract populatePrefab populatePrefab(var0, var8, var1, var2, var20, var16)
static void runvoid run(int var0, double var1, double var3, @Nonnull ChunkGeneratorExecution var5, Zone var6, @Nonnull CaveType var7)

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.procedurallib.condition.DefaultCoordinateCondition;
class="kw">import com.hypixel.hytale.procedurallib.condition.ICoordinateCondition;
class="kw">import com.hypixel.hytale.procedurallib.logic.point.IPointGenerator;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabRotation;
class="kw">import com.hypixel.hytale.server.worldgen.cave.Cave;
class="kw">import com.hypixel.hytale.server.worldgen.cave.CaveBlockPriorityModifier;
class="kw">import com.hypixel.hytale.server.worldgen.cave.CaveType;
class="kw">import com.hypixel.hytale.server.worldgen.cave.element.CaveNode;
class="kw">import com.hypixel.hytale.server.worldgen.cave.element.CavePrefab;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.BlockPriorityModifier;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ChunkGenerator;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ChunkGeneratorExecution;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.ZoneBiomeResult;
class="kw">import com.hypixel.hytale.server.worldgen.loader.WorldGenPrefabSupplier;
class="kw">import com.hypixel.hytale.server.worldgen.prefab.PrefabPasteUtil;
class="kw">import com.hypixel.hytale.server.worldgen.util.condition.BlockMaskCondition;
class="kw">import com.hypixel.hytale.server.worldgen.zone.Zone;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;

class="kw">public class CavePopulator {
   class="kw">public CavePopulator() {
   }

   class="kw">public class="kw">static void populate(int var0, @Nonnull ChunkGeneratorExecution var1) {
      for (Zone var5 : var1.getChunkGenerator().getZonePatternProvider().getZones()) {
         if (var5.caveGenerator() != null) {
            for (CaveType var9 : var5.caveGenerator().getCaveTypes()) {
               IPointGenerator var10 = var9.getEntryPointGenerator();
               var10.collect(
                  var0,
                  ChunkUtil.minBlock(var1.getX()) - var9.getMaximumSize(),
                  ChunkUtil.minBlock(var1.getZ()) - var9.getMaximumSize(),
                  ChunkUtil.maxBlock(var1.getX()) + var9.getMaximumSize(),
                  ChunkUtil.maxBlock(var1.getZ()) + var9.getMaximumSize(),
                  (var4, var6) -> run(var0, var4, var6, var1, var5, var9)
               );
            }
         }
      }
   }

   class="kw">private class="kw">static void run(int var0, double var1, double var3, @Nonnull ChunkGeneratorExecution var5, Zone var6, @Nonnull CaveType var7) {
      ChunkGenerator var8 = var5.getChunkGenerator();
      int var9 = MathUtil.floor(var1);
      int var10 = MathUtil.floor(var3);
      ZoneBiomeResult var11 = var8.getZoneBiomeResultAt(var0, var9, var10);
      if (var11.getZoneResult().getZone() == var6 && var7.isEntryThreshold(var0, var9, var10) && isMatchingHeightThreshold(var0, var9, var10, var8, var7)) {
         populate(var0, var5, var5.getChunkGenerator().getCave(var7, var0, var9, var10));
      }
   }

   class="kw">private class="kw">static void populate(int var0, @Nonnull ChunkGeneratorExecution var1, @Nonnull Cave var2) {
      long var3 = var1.getIndex();
      if (var2.contains(var3)) {
         int var5 = var1.getX();
         int var6 = var1.getZ();
         Random var7 = new Random();
         int var8 = var2.getCaveType().getEnvironment();
         var1.setPriorityModifier(CaveBlockPriorityModifier.INSTANCE);

         for (CaveNode var12 : var2.getCaveNodes(var3)) {
            populateCaveNode(var0, var1, var2, var12, var7);
         }

         var1.setPriorityModifier(BlockPriorityModifier.NONE);

         for (CaveNode var20 : var2.getCaveNodes(var3)) {
            for (CavePrefab var16 : var20.getCavePrefabs()) {
               if (var16.getBounds().intersectsChunk(var5, var6)) {
                  populatePrefab(var0, var8, var1, var2, var20, var16);
               }
            }
         }
      }
   }

   class="kw">private class="kw">static void populateCaveNode(int var0, @Nonnull ChunkGeneratorExecution var1, @Nonnull Cave var2, @Nonnull CaveNode var3, @Nonnull Random var4) {
      var4.setSeed(var0 + var3.getSeedOffset());
      var3.getShape().populateChunk(var0, var1, var2, var3, var4);
      if (var1.getChunkGenerator().getBenchmark().isEnabled()) {
         int var5 = var3.getBounds().getLowBoundX();
         int var6 = var3.getBounds().getLowBoundZ();
         if (ChunkUtil.isInsideChunk(var1.getX(), var1.getZ(), var5, var6)) {
            var1.getChunkGenerator().getBenchmark().registerCaveNode("Cave\t" + var2.getCaveType().getName() + "\t" + var3.getCaveNodeType().getName());
         }
      }
   }

   class="kw">private class="kw">static void populatePrefab(
      int var0, int var1, @Nonnull ChunkGeneratorExecution var2, @Nonnull Cave var3, @Nonnull CaveNode var4, @Nonnull CavePrefab var5
   ) {
      generatePrefabAt(var0, var5.getX(), var5.getZ(), var5.getY(), var1, var2, var3, var4, var5.getConfiguration(), var5.getPrefab(), var5.getRotation());
   }

   class="kw">private class="kw">static void generatePrefabAt(
      int var0,
      int var1,
      int var2,
      int var3,
      int var4,
      @Nonnull ChunkGeneratorExecution var5,
      @Nonnull Cave var6,
      @Nonnull CaveNode var7,
      BlockMaskCondition var8,
      @Nonnull WorldGenPrefabSupplier var9,
      PrefabRotation var10
   ) {
      int var11 = var1 - ChunkUtil.minBlock(var5.getX());
      int var12 = var2 - ChunkUtil.minBlock(var5.getZ());
      long var13 = HashUtil.rehash(var1, var2) * -99562191L;
      boolean var15 = var6.getCaveType().isSubmerge();
      PrefabPasteUtil.PrefabPasteBuffer var16 = ChunkGenerator.getResource().prefabBuffer;
      var16.setSeed(var0, var13);
      var16.blockMask = var8;
      var16.execution = var5;
      var16.environmentId = var4;
      var16.priority = (byte)(var15 ? 39 : 7);
      if (var5.getChunkGenerator().getBenchmark().isEnabled() && ChunkUtil.isInsideChunkRelative(var11, var12)) {
         var5.getChunkGenerator()
            .getBenchmark()
            .registerPrefab("CavePrefab: " + var6.getCaveType().getName() + "\t" + var7.getCaveNodeType().getName() + "\t" + var9.getName());
      }

      PrefabPasteUtil.generate(var16, var10, var9, var1, var3, var2, var11, var12);
   }

   class="kw">public class="kw">static boolean isMatchingHeightThreshold(int var0, int var1, int var2, @Nonnull ChunkGenerator var3, @Nonnull CaveType var4) {
      ICoordinateCondition var5 = var4.getHeightCondition();
      if (var5 == DefaultCoordinateCondition.DEFAULT_TRUE) {
         class="kw">return true;
      }

      if (var5 == DefaultCoordinateCondition.DEFAULT_FALSE) {
         class="kw">return false;
      }

      int var6 = var3.getHeight(var0, var1, var2);
      class="kw">return var5.eval(var0 + -173220171, var1, var6, var2);
   }
}