SpreadFarmingStageData class

Пакет: com.hypixel.hytale.builtin.adventure.farming.config.stages.spread

Файл: com/hypixel/hytale/builtin/adventure/farming/config/stages/spread/SpreadFarmingStageData.java

extends: FarmingStageData

Поля (19)

МодификаторыТипИмя
int var10
int var10
int var11
int var11
float var12
int var12
float var13
float var13
int var14
int var14
double var15
int var17
SpreadGrowthBehaviour var19
float var20
FarmingBlock var7
ChunkSection var8
FarmingBlock var8
int var9
ChunkSection var9

Методы (8)

МодификаторыВозвратСигнатура
for for(int var18 = 0; var18 < this.spreadGrowthBehaviours.length; var18++)
public IntRange getExecutionsIntRange getExecutions()
public IntRange getSpreadDecayPercentIntRange getSpreadDecayPercent()
public SpreadGrowthBehaviour[] getSpreadGrowthBehavioursSpreadGrowthBehaviour[] getSpreadGrowthBehaviours()
if if(var7 == null)
if if(var8 == null)
if if(var8 != null)
if if(var9 != null)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.adventure.farming.config.stages.spread;

class="kw">import com.hypixel.hytale.builtin.adventure.farming.states.FarmingBlock;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.math.range.IntRange;
class="kw">import com.hypixel.hytale.math.util.ChunkUtil;
class="kw">import com.hypixel.hytale.math.util.HashUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.farming.FarmingStageData;
class="kw">import com.hypixel.hytale.server.core.universe.world.chunk.section.ChunkSection;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.ChunkStore;
class="kw">import java.util.Arrays;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class SpreadFarmingStageData class="kw">extends FarmingStageData {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SpreadFarmingStageData> CODEC = BuilderCodec.builder(
         SpreadFarmingStageData.class, SpreadFarmingStageData::new, FarmingStageData.BASE_CODEC
      )
      .append(new KeyedCodec<>("Executions", IntRange.CODEC), (var0, var1) -> var0.executions = var1, var0 -> var0.executions)
      .documentation("Defines the number of times the stage will be repeated. Range must be positive, min value must be >= 1.")
      .addValidator(Validators.nonNull())
      .add()
      .<IntRange>append(new KeyedCodec<>("SpreadDecayPercent", IntRange.CODEC), (var0, var1) -> var0.spreadDecayPercent = var1, var0 -> var0.spreadDecayPercent)
      .documentation(
         "The amount to reduce (linear decay) the spread rate (chance to spread) for any spawned blocks that also have a spread stage. Range must be positive."
      )
      .addValidator(Validators.nonNull())
      .add()
      .<SpreadGrowthBehaviour[]>append(
         new KeyedCodec<>("GrowthBehaviours", new ArrayCodec<>(SpreadGrowthBehaviour.CODEC, SpreadGrowthBehaviour[]::new)),
         (var0, var1) -> var0.spreadGrowthBehaviours = var1,
         var0 -> var0.spreadGrowthBehaviours
      )
      .documentation("Defines an array of the different growth behaviours that'll be run for each execution.")
      .addValidator(Validators.nonEmptyArray())
      .add()
      .afterDecode(
         var0 -> {
            if (var0.executions != null && var0.executions.getInclusiveMin() < 1) {
               throw new IllegalArgumentException("The min value for Executions range must be >= 1! Current min value is: " + var0.executions.getInclusiveMin());
            }

            if (var0.spreadDecayPercent != null && var0.spreadDecayPercent.getInclusiveMin() < 0) {
               throw new IllegalArgumentException(
                  "The min value for SpreadDecayPercent range must be >= 0! Current min value is: " + var0.spreadDecayPercent.getInclusiveMin()
               );
            }
         }
      )
      .build();
   class="kw">protected IntRange executions;
   class="kw">protected IntRange spreadDecayPercent;
   class="kw">protected SpreadGrowthBehaviour[] spreadGrowthBehaviours;

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

   class="kw">public IntRange getExecutions() {
      class="kw">return this.executions;
   }

   class="kw">public IntRange getSpreadDecayPercent() {
      class="kw">return this.spreadDecayPercent;
   }

   class="kw">public SpreadGrowthBehaviour[] getSpreadGrowthBehaviours() {
      class="kw">return this.spreadGrowthBehaviours;
   }

   @Override
   class="kw">public boolean implementsShouldStop() {
      class="kw">return true;
   }

   @Override
   class="kw">public boolean shouldStop(
      @Nonnull ComponentAccessor<ChunkStore> var1, @Nonnull Ref<ChunkStore> var2, @Nonnull Ref<ChunkStore> var3, int var4, int var5, int var6
   ) {
      FarmingBlock var7 = var1.getComponent(var3, FarmingBlock.getComponentType());
      if (var7 == null) {
         class="kw">return true;
      }

      ChunkSection var8 = var1.getComponent(var2, ChunkSection.getComponentType());
      if (var8 == null) {
         class="kw">return true;
      }

      int var9 = ChunkUtil.worldCoordFromLocalCoord(var8.getX(), var4);
      int var10 = ChunkUtil.worldCoordFromLocalCoord(var8.getY(), var5);
      int var11 = ChunkUtil.worldCoordFromLocalCoord(var8.getZ(), var6);
      float var12 = var7.getSpreadRate();
      float var13 = this.executions.getInt(HashUtil.random(var9, var10, var11, var7.getGeneration())) * var12;
      int var14 = var7.getExecutions();
      class="kw">return var12 <= 0.0F || var14 >= var13;
   }

   @Override
   class="kw">public void apply(
      @Nonnull ComponentAccessor<ChunkStore> var1,
      @Nonnull Ref<ChunkStore> var2,
      @Nonnull Ref<ChunkStore> var3,
      int var4,
      int var5,
      int var6,
      @Nullable FarmingStageData var7
   ) {
      super.apply(var1, var2, var3, var4, var5, var6, var7);
      FarmingBlock var8 = var1.getComponent(var3, FarmingBlock.getComponentType());
      if (var8 != null) {
         ChunkSection var9 = var1.getComponent(var2, ChunkSection.getComponentType());
         if (var9 != null) {
            int var10 = ChunkUtil.worldCoordFromLocalCoord(var9.getX(), var4);
            int var11 = ChunkUtil.worldCoordFromLocalCoord(var9.getY(), var5);
            int var12 = ChunkUtil.worldCoordFromLocalCoord(var9.getZ(), var6);
            float var13 = var8.getSpreadRate();
            int var14 = var8.getGeneration();
            double var15 = Math.floor(this.executions.getInt(HashUtil.random(var10, var11, var12, var14)) * var13);
            int var17 = var8.getExecutions();
            if (!(var13 <= 0.0F) && !(var17 >= var15)) {
               for (int var18 = 0; var18 < this.spreadGrowthBehaviours.length; var18++) {
                  SpreadGrowthBehaviour var19 = this.spreadGrowthBehaviours[var18];
                  float var20 = this.spreadDecayPercent.getInt(HashUtil.random(var18 | (long)var14 << 32, var10, var11, var12)) / 100.0F;
                  var19.execute(var1, var2, var3, var10, var11, var12, var13 - var20);
               }

               var8.setExecutions(++var17);
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "SpreadFarmingStageData{executions="
         + this.executions
         + ", spreadDecayPercent="
         + this.spreadDecayPercent
         + ", spreadGrowthBehaviours="
         + Arrays.toString(this.spreadGrowthBehaviours)
         + "} "
         + super.toString();
   }
}