LayerPopulator class

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

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

Поля (24)

МодификаторыТипИмя
return
int var11
int var12
LayerContainer.StaticLayerEntry var12
int var13
var13
int var13
NoiseBlockArray.Entry[] var14
int var15
int var16
int var17
LayerContainer.DynamicLayerEntry var18
BlockFluidEntry var18
var18
int var19
NoiseBlockArray var20
int var23
BlockFluidEntry var24
int var25
int var26
int var28
LayerContainer var7
LayerContainer var8
int var9

Методы (20)

МодификаторыВозвратСигнатура
for for(int var26 = 0; var26 < var25; var26++)
for for(NoiseBlockArray.Entry var22 : var14)
for for(int var25 = 0; var25 < var23; var25++)
for for(int var27 = var16 - 1; var27 >= var15; var27--)
abstract for for(int var10 = var7.size()
private static void generateDynamicLayersprivate static void generateDynamicLayers(int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Biome var6, @Nonnull IntList var7)
abstract generateDynamicLayers generateDynamicLayers(var0, var1, var2, var3, var4, var5, var6, var7)
static void generateLayersstatic void generateLayers(int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Biome var6, @Nonnull IntList var7)
private static void generateStaticLayersprivate static void generateStaticLayers(int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Biome var6)
abstract generateStaticLayers generateStaticLayers(var0, var1, var2, var3, var4, var5, var6)
if if(var18 != null)
if if(var13 > var11)
if if(var12 != null)
if if(var23 > 0)
if if(var26 != 0)
if if(var17 <= var15)
if if(var14.length == 0 && var13 != Integer.MIN_VALUE)
if if(var18 != null)
if if(var28 != 0)
while while(var17 > var15)

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.procedurallib.condition.ConstantIntCondition;
class="kw">import com.hypixel.hytale.procedurallib.condition.IBlockFluidCondition;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldgen.GeneratedBlockChunk;
class="kw">import com.hypixel.hytale.server.worldgen.biome.Biome;
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.HeightThresholdInterpolator;
class="kw">import com.hypixel.hytale.server.worldgen.container.CoverContainer;
class="kw">import com.hypixel.hytale.server.worldgen.container.LayerContainer;
class="kw">import com.hypixel.hytale.server.worldgen.container.WaterContainer;
class="kw">import com.hypixel.hytale.server.worldgen.util.BlockFluidEntry;
class="kw">import com.hypixel.hytale.server.worldgen.util.NoiseBlockArray;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
class="kw">import java.util.Random;
class="kw">import javax.annotation.Nonnull;

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

   class="kw">public class="kw">static void populate(int var0, @Nonnull ChunkGeneratorExecution var1) {
      Random var2 = new FastRandom(HashUtil.hash(var0, var1.getX(), var1.getZ(), 5647422603192711886L));

      for (int var3 = 0; var3 < 32; var3++) {
         for (int var4 = 0; var4 < 32; var4++) {
            generateBlockColumn(var0, var1, var3, var4, var2);
         }
      }
   }

   class="kw">private class="kw">static void generateBlockColumn(int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, @Nonnull Random var4) {
      HeightThresholdInterpolator var5 = var1.getInterpolator();
      IntList var6 = ChunkGenerator.getResource().coverArray;
      Biome var7 = var1.zoneBiomeResult(var2, var3).getBiome();
      LayerContainer var8 = var7.getLayerContainer();
      int var9 = var1.globalX(var2);
      int var10 = var1.globalZ(var3);
      double var11 = var5.getHeightNoise(var2, var3);
      BlockFluidEntry var13 = var8.getFilling();
      int var14 = var8.getFillingEnvironment();
      int var15 = 0;
      int var16 = var5.getLowestNonOne(var2, var3);
      int var17 = var5.getHighestNonZero(var2, var3);
      boolean var18 = true;

      while (var17 >= var16) {
         double var19 = var5.getHeightThreshold(var0, var9, var10, var17);
         if (!(var19 > var11) && var19 != 1.0) {
            var18 = true;
         } else {
            if (var17 > var15) {
               var15 = var17;
            }

            var1.setBlock(var2, var17, var3, (byte)1, var13, var14);
            if (var18) {
               var6.add(var17);
               var18 = false;
            }
         }

         var17--;
      }

      if (var18) {
         var6.add(var17);
      }

      if (var17 > var15) {
         var15 = var17;
      }

      while (var17 >= 0) {
         var1.setBlock(var2, var17, var3, (byte)1, var13);
         var17--;
      }

      var1.getChunkGenerator().putHeight(var0, var9, var10, var15);
      BlockPopulator.LayerPopulator.generateLayers(var0, var1, var2, var3, var9, var10, var7, var6);
      generateCovers(var0, var1, var2, var3, var9, var10, var4, var7, var6);
      var6.clear();
   }

   class="kw">private class="kw">static void generateCovers(
      int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Random var6, @Nonnull Biome var7, @Nonnull IntList var8
   ) {
      CoverContainer var9 = var7.getCoverContainer();
      int var10 = var8.size();
      if (var10 != 0) {
         for (WaterContainer.Entry var14 : var7.getWaterContainer().getEntries()) {
            for (CoverContainer.CoverContainerEntry var18 : var9.getEntries()) {
               if (var18.isOnWater() && isMatchingCoverColumn(var0, var18, var6, var4, var5)) {
                  int var19 = var14.getMax(var0, var4, var5) + 1;
                  if (isMatchingCoverHeight(var0, var18, var6, var4, var19, var5)
                     && isMatchingParentCover(var1, var18, var2, var3, var19, var14.getBlock(), var14.getFluid())) {
                     CoverContainer.CoverContainerEntry.CoverContainerEntryPart var20 = var18.get(var6);
                     var1.setBlock(var2, var19 + var20.getOffset(), var3, (byte)3, var20.getEntry());
                     var1.setFluid(var2, var19 + var20.getOffset(), var3, (byte)3, var20.getEntry().fluidId());
                  }
               }
            }
         }

         for (int var21 = 0; var21 < var10; var21++) {
            int var22 = var8.getInt(var21) + 1;

            for (CoverContainer.CoverContainerEntry var26 : var9.getEntries()) {
               if (!var26.isOnWater()
                  && isMatchingParentCover(var1, var26, var2, var3, var22, 0, 0)
                  && isMatchingCoverColumn(var0, var26, var6, var4, var5)
                  && isMatchingCoverHeight(var0, var26, var6, var4, var22, var5)) {
                  CoverContainer.CoverContainerEntry.CoverContainerEntryPart var27 = var26.get(var6);
                  var1.setBlock(var2, var22 + var27.getOffset(), var3, (byte)3, var27.getEntry());
                  var1.setFluid(var2, var22 + var27.getOffset(), var3, (byte)3, var27.getEntry().fluidId());
               }
            }
         }
      }
   }

   class="kw">private class="kw">static boolean isMatchingParentCover(
      @Nonnull ChunkGeneratorExecution var0, @Nonnull CoverContainer.CoverContainerEntry var1, int var2, int var3, int var4, int var5, int var6
   ) {
      if (var4 > 0 && var4 < 320) {
         IBlockFluidCondition var7 = var1.getParentCondition();
         if (var7 == ConstantIntCondition.DEFAULT_TRUE) {
            class="kw">return true;
         }

         if (var7 == ConstantIntCondition.DEFAULT_FALSE) {
            class="kw">return false;
         }

         GeneratedBlockChunk var8 = var0.getChunk();
         int var9 = var8.getBlock(var2, var4 - 1, var3);
         if (var9 == 0) {
            var9 = var5;
         }

         int var10 = var0.getFluid(var2, var4 - 1, var3);
         if (var10 == 0) {
            var10 = var6;
         }

         class="kw">return var7.eval(var9, var10);
      } else {
         class="kw">return false;
      }
   }

   class="kw">private class="kw">static boolean isMatchingCoverColumn(int var0, @Nonnull CoverContainer.CoverContainerEntry var1, @Nonnull Random var2, int var3, int var4) {
      class="kw">return var2.nextDouble() < var1.getCoverDensity() && var1.getMapCondition().eval(var0, var3, var4);
   }

   class="kw">private class="kw">static boolean isMatchingCoverHeight(int var0, @Nonnull CoverContainer.CoverContainerEntry var1, Random var2, int var3, int var4, int var5) {
      class="kw">return var1.getHeightCondition().eval(var0, var3, var5, var4, var2);
   }

   class="kw">private class="kw">static class LayerPopulator {
      class="kw">private LayerPopulator() {
      }

      class="kw">static void generateLayers(
         int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Biome var6, @Nonnull IntList var7
      ) {
         generateStaticLayers(var0, var1, var2, var3, var4, var5, var6);
         generateDynamicLayers(var0, var1, var2, var3, var4, var5, var6, var7);
      }

      class="kw">private class="kw">static void generateDynamicLayers(
         int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Biome var6, @Nonnull IntList var7
      ) {
         LayerContainer var8 = var6.getLayerContainer();
         int var9 = 0;

         for (int var10 = var7.size(); var9 < var10; var9++) {
            int var11 = var7.getInt(var9);
            int var12 = var11;
            int var13 = var11;

            label47:
            for (LayerContainer.DynamicLayer var17 : var8.getDynamicLayers()) {
               LayerContainer.DynamicLayerEntry var18 = var17.getActiveEntry(var0, var4, var5);
               if (var18 != null) {
                  int var19 = var17.getEnvironmentId();
                  var12 += var17.getOffset(var0, var4, var5);
                  var13 = Math.max(var13, var12);
                  NoiseBlockArray var20 = var18.getBlockArray();

                  for (NoiseBlockArray.Entry var24 : var20.getEntries()) {
                     int var25 = var24.getRepetitions(var0, var4, var5);

                     for (int var26 = 0; var26 < var25; var26++) {
                        if (var12 <= var11 && var1.getBlock(var2, var12, var3) == 0) {
                           break label47;
                        }

                        var1.setBlock(var2, var12, var3, (byte)2, var24.getBlockEntry(), var19);
                        var1.setFluid(var2, var12, var3, (byte)2, var24.getBlockEntry().fluidId(), var19);
                        var12--;
                     }
                  }
               }
            }

            if (var13 > var11) {
               var7.set(var9, var13);
            }
         }
      }

      class="kw">private class="kw">static void generateStaticLayers(int var0, @Nonnull ChunkGeneratorExecution var1, int var2, int var3, int var4, int var5, @Nonnull Biome var6) {
         LayerContainer var7 = var6.getLayerContainer();

         for (LayerContainer.StaticLayer var11 : var7.getStaticLayers()) {
            LayerContainer.StaticLayerEntry var12 = var11.getActiveEntry(var0, var4, var5);
            if (var12 != null) {
               int var13 = var11.getEnvironmentId();
               NoiseBlockArray.Entry[] var14 = var12.getBlockArray().getEntries();
               int var15 = Math.max(var12.getMinInt(var0, var4, var5), 0);
               int var16 = Math.min(var12.getMaxInt(var0, var4, var5), 320);
               int var17 = var12.getMaxInt(var0, var4, var5);
               BlockFluidEntry var18 = null;

               for (NoiseBlockArray.Entry var22 : var14) {
                  int var23 = var22.getRepetitions(var0, var4, var5);
                  if (var23 > 0) {
                     BlockFluidEntry var24 = var22.getBlockEntry();
                     var18 = var24;

                     for (int var25 = 0; var25 < var23; var25++) {
                        int var26 = var1.getBlock(var2, --var17, var3);
                        if (var26 != 0) {
                           var1.setBlock(var2, var17, var3, (byte)2, var24, var13);
                           var1.setFluid(var2, var17, var3, (byte)2, var24.fluidId(), var13);
                        }

                        if (var17 <= var15) {
                           class="kw">return;
                        }
                     }
                  }
               }

               if (var14.length == 0 && var13 != Integer.MIN_VALUE) {
                  for (int var27 = var16 - 1; var27 >= var15; var27--) {
                     var1.setEnvironment(var2, var27, var3, var13);
                  }
               }

               if (var18 != null) {
                  while (var17 > var15) {
                     int var28 = var1.getBlock(var2, --var17, var3);
                     if (var28 != 0) {
                        var1.setBlock(var2, var17, var3, (byte)2, var18);
                        var1.setFluid(var2, var17, var3, (byte)2, var18.fluidId());
                     }
                  }
               }
            }
         }
      }
   }
}