ChunkGeneratorExecution class

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

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

Поля (40)

МодификаторыТипИмя
int var10
byte var10
var10
var10
byte var10
BlockType var10
byte var11
Holder var11
byte var12
FluidSection var12
var12
int var13
byte var13
Holder var14
BlockType var15
WorldGenTimingsCollector var2
int var2
long var3
var3
var3
int[] var3
long var4
int var4
int var4
var4
int var4
Holder var4
int var5
FluidSection var5
Holder var6
int var7
byte var7
var7
var7
FluidSection var7
int var8
byte var8
int var9
byte var9
Holder var9

Методы (56)

МодификаторыВозвратСигнатура
public void executevoid execute(int var1)
for for(int var5 = -var2; var5 < var4; var5++)
for for(int var6 = -var2; var6 < var4; var6++)
for for(int var15 = 0; var15 < 32; var15++)
for for(int var16 = 0; var16 < 32; var16++)
for for(int var11 = -var2; var11 <= var2; var11++)
for for(int var12 = -var2; var12 <= var2; var12++)
for for(int var2 = 0; var2 < 32; var2++)
for for(int var3 = 0; var3 < 32; var3++)
private void generateEnvironmentMappingvoid generateEnvironmentMapping(int var1)
private void generateTintMappingvoid generateTintMapping(int var1)
public int getBlockint getBlock(int var1, int var2, int var3)
public GeneratedBlockChunk getChunkGeneratedBlockChunk getChunk()
public GeneratedEntityChunk getEntityChunkGeneratedEntityChunk getEntityChunk()
public int getFluidint getFluid(int var1, int var2, int var3)
public int getHeightint getHeight(int var1, int var2, int var3)
public long getIndexlong getIndex()
public int getRotationIndexint getRotationIndex(int var1, int var2, int var3)
public Holder<ChunkStore> getSectionHolder<ChunkStore> getSection(int var1)
public int getXint getX()
public int getZint getZ()
public int globalXint globalX(int var1)
public int globalZint globalZ(int var1)
if if(var11 * var11 + var12 * var12 <= var4)
if if(var10 > 0)
if if(var4 != Integer.MIN_VALUE)
if if(var2 >= 0 && var2 < 320)
if if(var4 == -1)
if if(var10 < var13)
if if(var7 >= 0)
if if(var2 >= 0 && var2 < 320)
if if(var4 == -1)
if if(var7 >= var10)
if if(var12 == null)
if if(var2 >= 0 && var2 < 320)
if if(var2 >= 0 && var2 < 320)
protected int localXint localX(int var1)
protected int localZint localZ(int var1)
public void overrideBlockvoid overrideBlock(int var1, int var2, int var3, byte var4, int var5)
public void overrideBlockvoid overrideBlock(int var1, int var2, int var3, byte var4, int var5, Holder<ChunkStore> var6)
public void overrideBlockvoid overrideBlock(int var1, int var2, int var3, byte var4, BlockFluidEntry var5)
public void overrideBlockvoid overrideBlock(int var1, int var2, int var3, byte var4, int var5, Holder<ChunkStore> var6, int var7, int var8)
public void overrideFluidvoid overrideFluid(int var1, int var2, int var3, byte var4, int var5)
public boolean setBlockboolean setBlock(int var1, int var2, int var3, byte var4, int var5)
public boolean setBlockboolean setBlock(int var1, int var2, int var3, byte var4, BlockFluidEntry var5)
public boolean setBlockboolean setBlock(int var1, int var2, int var3, byte var4, int var5, int var6)
public boolean setBlockboolean setBlock(int var1, int var2, int var3, byte var4, BlockFluidEntry var5, int var6)
public boolean setBlockboolean setBlock(int var1, int var2, int var3, byte var4, int var5, Holder<ChunkStore> var6)
public boolean setBlockboolean setBlock(int var1, int var2, int var3, byte var4, int var5, @Nullable Holder<ChunkStore> var6, int var7, int var8, int var9)
public void setEnvironmentvoid setEnvironment(int var1, int var2, int var3, int var4)
public boolean setFluidboolean setFluid(int var1, int var2, int var3, byte var4, int var5, int var6)
public boolean setFluidboolean setFluid(int var1, int var2, int var3, byte var4, int var5)
public boolean setFluidboolean setFluid(int var1, int var2, int var3, byte var4, int var5, byte var6)
public void setPriorityModifiervoid setPriorityModifier(BlockPriorityModifier var1)
static int tintIndexLocalint tintIndexLocal(int var0, int var1)
public ZoneBiomeResult zoneBiomeResultZoneBiomeResult zoneBiomeResult(int var1, int var2)

Исходный код

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

class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.fluid.Fluid;
class="kw">import com.hypixel.hytale.server.core.blocktype.component.BlockPhysics;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.FluidSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldgen.GeneratedBlockChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldgen.GeneratedChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldgen.GeneratedEntityChunk;
class="kw">import com.hypixel.hytale.server.core.universe.world.worldgen.WorldGenTimingsCollector;
class="kw">import com.hypixel.hytale.server.worldgen.cache.CoreDataCacheEntry;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.populator.BlockPopulator;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.populator.CavePopulator;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.populator.PrefabPopulator;
class="kw">import com.hypixel.hytale.server.worldgen.chunk.populator.WaterPopulator;
class="kw">import com.hypixel.hytale.server.worldgen.util.BlockFluidEntry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class ChunkGeneratorExecution {
   @Nonnull
   class="kw">private class="kw">final ChunkGenerator chunkGenerator;
   class="kw">private class="kw">final GeneratedChunk chunk;
   class="kw">private class="kw">final GeneratedBlockChunk blockChunk;
   class="kw">private class="kw">final GeneratedEntityChunk entityChunk;
   class="kw">private class="kw">final Holder<ChunkStore>[] sections;
   @Nonnull
   class="kw">private class="kw">final BlockPriorityChunk priorityChunk;
   @Nonnull
   class="kw">private class="kw">final HeightThresholdInterpolator interpolator;
   class="kw">private BlockPriorityModifier blockPriorityModifier = BlockPriorityModifier.NONE;

   class="kw">public ChunkGeneratorExecution(int var1, @Nonnull ChunkGenerator var2, GeneratedChunk var3) {
      this.chunkGenerator = var2;
      this.chunk = var3;
      this.blockChunk = var3.getBlockChunk();
      this.entityChunk = var3.getEntityChunk();
      this.sections = var3.getSections();
      this.priorityChunk = ChunkGenerator.getResource().priorityChunk.reset();
      long var4 = -System.nanoTime();
      this.interpolator = new HeightThresholdInterpolator(this).populate(var1);
      var2.getTimings().reportPrepare(var4 + System.nanoTime());
   }

   class="kw">public void execute(int var1) {
      WorldGenTimingsCollector var2 = this.chunkGenerator.getTimings();
      this.generateTintMapping(var1);
      this.generateEnvironmentMapping(var1);
      long var3 = -System.nanoTime();
      BlockPopulator.populate(var1, this);
      var2.reportBlocksGeneration(var3 + System.nanoTime());
      var3 = -System.nanoTime();
      CavePopulator.populate(var1, this);
      var2.reportCaveGeneration(var3 + System.nanoTime());
      var3 = -System.nanoTime();
      PrefabPopulator.populate(var1, this);
      var2.reportPrefabGeneration(var3 + System.nanoTime());
      WaterPopulator.populate(var1, this);
   }

   @Nonnull
   class="kw">public ChunkGenerator getChunkGenerator() {
      class="kw">return this.chunkGenerator;
   }

   class="kw">public GeneratedBlockChunk getChunk() {
      class="kw">return this.blockChunk;
   }

   class="kw">public GeneratedEntityChunk getEntityChunk() {
      class="kw">return this.entityChunk;
   }

   @Nonnull
   class="kw">public BlockPriorityChunk getPriorityChunk() {
      class="kw">return this.priorityChunk;
   }

   @Nonnull
   class="kw">public HeightThresholdInterpolator getInterpolator() {
      class="kw">return this.interpolator;
   }

   class="kw">public Holder<ChunkStore> getSection(int var1) {
      class="kw">return this.sections[var1];
   }

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

   @Nonnull
   class="kw">public CoreDataCacheEntry[] getCoreDataEntries() {
      class="kw">return this.interpolator.getEntries();
   }

   class="kw">public long getIndex() {
      class="kw">return this.blockChunk.getIndex();
   }

   class="kw">public int getX() {
      class="kw">return this.blockChunk.getX();
   }

   class="kw">public int getZ() {
      class="kw">return this.blockChunk.getZ();
   }

   class="kw">public void setPriorityModifier(BlockPriorityModifier var1) {
      this.blockPriorityModifier = var1;
   }

   class="kw">public int getHeight(int var1, int var2, int var3) {
      if (ChunkUtil.isInsideChunk(this.getX(), this.getZ(), var2, var3)) {
         int var4 = var2 & 31;
         int var5 = var3 & 31;
         class="kw">return this.interpolator.tableEntry(var4, var5).height;
      } else {
         class="kw">return this.chunkGenerator.getHeight(var1, var2, var3);
      }
   }

   class="kw">private void generateTintMapping(int var1) {
      int var2 = 4;
      int[] var3 = new int[(32 + var2 * 2) * (32 + var2 * 2)];
      int var4 = 32 + var2;

      for (int var5 = -var2; var5 < var4; var5++) {
         for (int var6 = -var2; var6 < var4; var6++) {
            var3[tintIndexLocal(var5, var6)] = this.zoneBiomeResult(var5, var6)
               .getBiome()
               .getTintContainer()
               .getTintColorAt(var1, this.globalX(var5), this.globalZ(var6));
         }
      }

      var4 = var2 * var2;

      for (int var15 = 0; var15 < 32; var15++) {
         for (int var16 = 0; var16 < 32; var16++) {
            int var7 = 0;
            int var8 = 0;
            int var9 = 0;
            int var10 = 0;

            for (int var11 = -var2; var11 <= var2; var11++) {
               for (int var12 = -var2; var12 <= var2; var12++) {
                  if (var11 * var11 + var12 * var12 <= var4) {
                     int var13 = var3[tintIndexLocal(var15 + var11, var16 + var12)];
                     var7 += var13 >> 16 & 0xFF;
                     var8 += var13 >> 8 & 0xFF;
                     var9 += var13 & 0xFF;
                     var10++;
                  }
               }
            }

            if (var10 > 0) {
               var7 /= var10;
               var8 /= var10;
               var9 /= var10;
               this.blockChunk.setTint(var15, var16, 0xFF000000 | var7 << 16 | var8 << 8 | var9);
            } else {
               this.blockChunk.setTint(var15, var16, -65536);
            }
         }
      }
   }

   class="kw">public class="kw">static int tintIndexLocal(int var0, int var1) {
      class="kw">return (var0 + 4) * 40 + var1 + 4;
   }

   class="kw">private void generateEnvironmentMapping(int var1) {
      for (int var2 = 0; var2 < 32; var2++) {
         for (int var3 = 0; var3 < 32; var3++) {
            int var4 = this.zoneBiomeResult(var2, var3).getBiome().getEnvironmentContainer().getEnvironmentAt(var1, this.globalX(var2), this.globalZ(var3));
            this.blockChunk.setEnvironmentColumn(var2, var3, var4);
         }
      }
   }

   class="kw">public int getBlock(int var1, int var2, int var3) {
      class="kw">return this.blockChunk.getBlock(var1, var2, var3);
   }

   class="kw">public int getRotationIndex(int var1, int var2, int var3) {
      class="kw">return this.blockChunk.getRotationIndex(var1, var2, var3);
   }

   class="kw">public void setEnvironment(int var1, int var2, int var3, int var4) {
      if (var4 != Integer.MIN_VALUE) {
         this.blockChunk.setEnvironment(var1, var2, var3, var4);
      }
   }

   class="kw">public boolean setBlock(int var1, int var2, int var3, byte var4, int var5) {
      class="kw">return this.setBlock(var1, var2, var3, var4, var5, null);
   }

   class="kw">public boolean setBlock(int var1, int var2, int var3, byte var4, BlockFluidEntry var5) {
      class="kw">return this.setBlock(var1, var2, var3, var4, var5.blockId(), null, -1, var5.rotation(), 0);
   }

   class="kw">public boolean setBlock(int var1, int var2, int var3, byte var4, int var5, int var6) {
      if (this.setBlock(var1, var2, var3, var4, var5, null)) {
         this.setEnvironment(var1, var2, var3, var6);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public boolean setBlock(int var1, int var2, int var3, byte var4, BlockFluidEntry var5, int var6) {
      if (this.setBlock(var1, var2, var3, var4, var5.blockId(), null, -1, var5.rotation(), 0)) {
         this.setEnvironment(var1, var2, var3, var6);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public boolean setBlock(int var1, int var2, int var3, byte var4, int var5, Holder<ChunkStore> var6) {
      class="kw">return this.setBlock(var1, var2, var3, var4, var5, var6, -1, 0, 0);
   }

   class="kw">public boolean setBlock(int var1, int var2, int var3, byte var4, int var5, @Nullable Holder<ChunkStore> var6, int var7, int var8, int var9) {
      if (var2 >= 0 && var2 < 320) {
         byte var10 = (byte)(var4 & 31);
         byte var11 = (byte)(var4 & -32);
         byte var12 = this.priorityChunk.get(var1, var2, var3);
         byte var13 = this.blockPriorityModifier.modifyCurrent(var12, var10);
         if (var4 == -1) {
            var10 = var13;
         }

         if (var10 < var13) {
            class="kw">return false;
         }

         var10 = (byte)(this.blockPriorityModifier.modifyTarget(var12, var10) | var11);
         this.priorityChunk.set(var1, var2, var3, var10);
         this.blockChunk.setBlock(var1, var2, var3, var5, var8, var9);
         this.chunk.setState(var1, var2, var3, var6);
         Holder var14 = this.getSection(ChunkUtil.chunkCoordinate(var2));
         if (var7 >= 0) {
            BlockPhysics.setSupportValue(var14, var1, var2, var3, var7);
         } else {
            BlockType var15 = BlockType.getAssetMap().getAsset(var5);
            if (var15 != null && var15.hasSupport()) {
               BlockPhysics.reset(var14, var1, var2, var3);
            } else {
               BlockPhysics.clear(var14, var1, var2, var3);
            }
         }

         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public boolean setFluid(int var1, int var2, int var3, byte var4, int var5, int var6) {
      if (this.setFluid(var1, var2, var3, var4, var5)) {
         this.setEnvironment(var1, var2, var3, var6);
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">public boolean setFluid(int var1, int var2, int var3, byte var4, int var5) {
      class="kw">return this.setFluid(var1, var2, var3, var4, var5, (byte)Fluid.getAssetMap().getAssetOrDefault(var5, Fluid.EMPTY).getMaxFluidLevel());
   }

   class="kw">public boolean setFluid(int var1, int var2, int var3, byte var4, int var5, byte var6) {
      if (var2 >= 0 && var2 < 320) {
         byte var7 = (byte)(var4 & 31);
         byte var8 = (byte)(var4 & -32);
         byte var9 = this.priorityChunk.get(var1, var2, var3);
         byte var10 = this.blockPriorityModifier.modifyCurrent(var9, var7);
         if (var4 == -1) {
            var7 = var10;
         }

         if (var7 >= var10) {
            var7 = (byte)(this.blockPriorityModifier.modifyTarget(var9, var7) | var8);
            this.priorityChunk.set(var1, var2, var3, var7);
            Holder var11 = this.getSection(ChunkUtil.chunkCoordinate(var2));
            FluidSection var12 = var11.getComponent(FluidSection.getComponentType());
            if (var12 == null) {
               var12 = var11.ensureAndGetComponent(FluidSection.getComponentType());
            }

            var12.setFluid(var1, var2, var3, var5, var6);
            class="kw">return true;
         } else {
            class="kw">return false;
         }
      } else {
         class="kw">return false;
      }
   }

   class="kw">public int getFluid(int var1, int var2, int var3) {
      if (var2 >= 0 && var2 < 320) {
         Holder var4 = this.getSection(ChunkUtil.chunkCoordinate(var2));
         FluidSection var5 = var4.ensureAndGetComponent(FluidSection.getComponentType());
         class="kw">return var5.getFluidId(var1, var2, var3);
      } else {
         class="kw">return Integer.MIN_VALUE;
      }
   }

   class="kw">public void overrideBlock(int var1, int var2, int var3, byte var4, int var5) {
      this.overrideBlock(var1, var2, var3, var4, var5, null);
   }

   class="kw">public void overrideBlock(int var1, int var2, int var3, byte var4, int var5, Holder<ChunkStore> var6) {
      this.overrideBlock(var1, var2, var3, var4, var5, var6, 0, 0);
   }

   class="kw">public void overrideBlock(int var1, int var2, int var3, byte var4, BlockFluidEntry var5) {
      this.overrideBlock(var1, var2, var3, var4, var5.blockId(), null, var5.rotation(), 0);
   }

   class="kw">public void overrideBlock(int var1, int var2, int var3, byte var4, int var5, Holder<ChunkStore> var6, int var7, int var8) {
      this.priorityChunk.set(var1, var2, var3, var4);
      this.blockChunk.setBlock(var1, var2, var3, var5, var7, var8);
      this.chunk.setState(var1, var2, var3, var6);
      Holder var9 = this.getSection(ChunkUtil.chunkCoordinate(var2));
      BlockType var10 = BlockType.getAssetMap().getAsset(var5);
      if (var10 != null && var10.hasSupport()) {
         BlockPhysics.reset(var9, var1, var2, var3);
      } else {
         BlockPhysics.clear(var9, var1, var2, var3);
      }
   }

   class="kw">public void overrideFluid(int var1, int var2, int var3, byte var4, int var5) {
      if (var2 >= 0 && var2 < 320) {
         this.priorityChunk.set(var1, var2, var3, var4);
         Holder var6 = this.getSection(ChunkUtil.chunkCoordinate(var2));
         FluidSection var7 = var6.ensureAndGetComponent(FluidSection.getComponentType());
         var7.setFluid(var1, var2, var3, var5, (byte)Fluid.getAssetMap().getAsset(var5).getMaxFluidLevel());
      }
   }

   class="kw">protected int localX(int var1) {
      class="kw">return var1 - this.blockChunk.getX() * 32;
   }

   class="kw">protected int localZ(int var1) {
      class="kw">return var1 - this.blockChunk.getZ() * 32;
   }

   class="kw">public int globalX(int var1) {
      class="kw">return ChunkUtil.minBlock(this.blockChunk.getX()) + var1;
   }

   class="kw">public int globalZ(int var1) {
      class="kw">return ChunkUtil.minBlock(this.blockChunk.getZ()) + var1;
   }
}