DespawnParameters class

Пакет: com.hypixel.hytale.server.spawning.assets.spawns.config

Файл: com/hypixel/hytale/server/spawning/assets/spawns/config/NPCSpawn.java

Поля (3)

МодификаторыТипИмя
public static final BuilderCodec<NPCSpawn.DespawnParameters> CODEC
protected double[] dayTimeRange
protected int[] moonPhaseRange

Методы (3)

МодификаторыВозвратСигнатура
public double[] getDayTimeRangepublic double[] getDayTimeRange()
public int[] getMoonPhaseRangepublic int[] getMoonPhaseRange()
public String toStringpublic String toString()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.assets.spawns.config;

class="kw">import com.hypixel.hytale.assetstore.AssetExtraInfo;
class="kw">import com.hypixel.hytale.assetstore.codec.AssetBuilderCodec;
class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.codec.Codec;
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.codecs.map.EnumMapCodec;
class="kw">import com.hypixel.hytale.codec.schema.metadata.ui.UIPropertyTitle;
class="kw">import com.hypixel.hytale.codec.validation.ValidationResults;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawns.LightType;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.ints.IntSets;
class="kw">import java.util.Arrays;
class="kw">import java.util.Map;
class="kw">import java.util.stream.Collectors;
class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">abstract class NPCSpawn {
   class="kw">public class="kw">static class="kw">final float HOURS_PER_DAY = 24.0F;
   class="kw">public class="kw">static class="kw">final BuilderCodec<NPCSpawn> BASE_CODEC = AssetBuilderCodec.abstractBuilder(NPCSpawn.class)
      .documentation("A specification for spawning NPCs, including spawn and despawn parameters.")
      .<RoleSpawnParameters[]>appendInherited(
         new KeyedCodec<>("NPCs", new ArrayCodec<>(RoleSpawnParameters.CODEC, RoleSpawnParameters[]::new)),
         (var0, var1) -> var0.npcs = var1,
         var0 -> var0.npcs,
         (var0, var1) -> var0.npcs = var1.npcs
      )
      .documentation("A required list of **Role Spawn Parameters** defining each NPC that can be spawned and their relative weights.")
      .metadata(new UIPropertyTitle("NPCs"))
      .addValidator(Validators.nonNull())
      .addValidator(Validators.nonEmptyArray())
      .add()
      .<NPCSpawn.DespawnParameters>appendInherited(
         new KeyedCodec<>("Despawn", NPCSpawn.DespawnParameters.CODEC),
         (var0, var1) -> var0.despawnParameters = var1,
         var0 -> var0.despawnParameters,
         (var0, var1) -> var0.despawnParameters = var1.despawnParameters
      )
      .documentation("Optional **Despawn Parameters** to control NPC despawning.")
      .add()
      .<double[]>appendInherited(new KeyedCodec<>("DayTimeRange", Codec.DOUBLE_ARRAY), (var0, var1) -> {
         var0.dayTimeRange = var1;
         var0.dayTimeRange[0] = var0.dayTimeRange[0] / 24.0;
         var0.dayTimeRange[1] = var0.dayTimeRange[1] / 24.0;
      }, var0 -> new double[]{var0.dayTimeRange[0] * 24.0, var0.dayTimeRange[1] * 24.0}, (var0, var1) -> var0.dayTimeRange = var1.dayTimeRange)
      .documentation("An optional hour range within which the NPCs/beacon will spawn (between 0 and 24).")
      .addValidator(Validators.doubleArraySize(2))
      .add()
      .<int[]>appendInherited(
         new KeyedCodec<>("MoonPhaseRange", Codec.INT_ARRAY),
         (var0, var1) -> var0.moonPhaseRange = var1,
         var0 -> new int[]{var0.moonPhaseRange[0], var0.moonPhaseRange[1]},
         (var0, var1) -> var0.moonPhaseRange = var1.moonPhaseRange
      )
      .documentation("An optional moon phase range during which the NPCs/beacon will spawn (must be greater than or equal to 0).")
      .addValidator(Validators.intArraySize(2))
      .add()
      .<Map<LightType, double[]>>appendInherited(
         new KeyedCodec<>(
            "LightRanges",
            new EnumMapCodec<>(LightType.class, Codec.DOUBLE_ARRAY)
               .documentKey(LightType.Light, "Total light level.")
               .documentKey(
                  LightType.SkyLight,
                  "Light level based on how deep under cover the position is relative to the open sky (e.g. inside a cave will be low SkyLight)."
               )
               .documentKey(LightType.Sunlight, "Light level based on time of day (peaks at around noon and is 0 during most of the night).")
               .documentKey(LightType.RedLight, "Red light level.")
               .documentKey(LightType.GreenLight, "Green light level.")
               .documentKey(LightType.BlueLight, "Blue light level.")
         ),
         (var0, var1) -> var0.lightTypeMap = var1,
         var0 -> var0.lightTypeMap,
         (var0, var1) -> var0.lightTypeMap = var1.lightTypeMap
      )
      .documentation("Optional light ranges to spawn the NPCs/beacon in, defined between 0 and 100.")
      .add()
      .<Boolean>appendInherited(
         new KeyedCodec<>("ScaleDayTimeRange", Codec.BOOLEAN),
         (var0, var1) -> var0.scaleDayTimeRange = var1,
         var0 -> var0.scaleDayTimeRange,
         (var0, var1) -> var0.scaleDayTimeRange = var1.scaleDayTimeRange
      )
      .documentation(
         "If set to true, instead of using absolute hour values for DayTimeRange, it will be scaled based on the world's DaytimePortion.\n\n * 0 and 24 will represent the middle of the night portion.\n * 6 will represent the moment of sunrise.\n * 12 will represent the middle of the day portion.\n * 18 will represent the moment of sunset."
      )
      .add()
      .afterDecode(var0 -> {
         if (var0.environments != null && var0.environments.length != 0) {
            IntOpenHashSet var1 = new IntOpenHashSet();
            IndexedLookupTableAssetMap var2 = Environment.getAssetMap();

            for (String var6 : var0.environments) {
               int var7 = var2.getIndex(var6);
               if (var7 != Integer.MIN_VALUE) {
                  var1.add(var7);
               }
            }

            var1.trim();
            var0.environmentIds = IntSets.unmodifiable(var1);
         } else {
            var0.environmentIds = IntSets.EMPTY_SET;
         }
      })
      .validator((var0, var1) -> {
         double[] var2 = var0.getDayTimeRange();
         if (var2[0] < 0.0 || var2[1] < 0.0) {
            var1.fail("DayTimeRange values must be >=0");
         }

         int[] var3 = var0.getMoonPhaseRange();
         if (var3[0] < 0 || var3[1] < 0) {
            var1.fail("MoonPhaseRange values must be >=0");
         }

         for (LightType var7 : LightType.VALUES) {
            validateLightRange(var1, var7.name(), var0.getLightRange(var7));
         }

         NPCSpawn.DespawnParameters var10 = var0.getDespawnParameters();
         if (var10 != null) {
            var2 = var10.getDayTimeRange();
            if (var2[0] < 0.0 || var2[1] < 0.0) {
               var1.fail("Despawn DayTimeRange values must be >=0");
            }

            var3 = var10.getMoonPhaseRange();
            if (var3[0] < 0 || var3[1] < 0) {
               var1.fail("Despawn MoonPhaseRange values must be >=0");
            }
         }
      })
      .build();
   class="kw">public class="kw">static class="kw">final double[] DEFAULT_DAY_TIME_RANGE = new double[]{0.0, Double.MAX_VALUE};
   class="kw">public class="kw">static class="kw">final int[] DEFAULT_MOON_PHASE_RANGE = new int[]{0, Integer.MAX_VALUE};
   class="kw">public class="kw">static class="kw">final double[] FULL_LIGHT_RANGE = new double[]{0.0, 100.0};
   class="kw">protected AssetExtraInfo.Data data;
   class="kw">protected String id;
   class="kw">protected RoleSpawnParameters[] npcs;
   class="kw">protected NPCSpawn.DespawnParameters despawnParameters;
   class="kw">protected String[] environments;
   class="kw">protected IntSet environmentIds = IntSets.EMPTY_SET;
   class="kw">protected double[] dayTimeRange = DEFAULT_DAY_TIME_RANGE;
   class="kw">protected int[] moonPhaseRange = DEFAULT_MOON_PHASE_RANGE;
   class="kw">protected Map<LightType, double[]> lightTypeMap;
   class="kw">protected boolean scaleDayTimeRange = true;

   class="kw">private class="kw">static void validateLightRange(@Nonnull ValidationResults var0, String var1, @Nonnull double[] var2) {
      for (int var3 = 0; var3 < var2.length; var3++) {
         double var4 = var2[var3];
         if (var4 < 0.0 || var4 > 100.0) {
            var0.fail(String.format("%s must be between 0 and 100 (inclusive)", var1));
         }

         if (var3 > 0 && var4 < var2[var3 - 1]) {
            var0.fail(String.format("Values in %s must be weakly monotonic", var1));
         }
      }
   }

   class="kw">public NPCSpawn(
      String var1,
      RoleSpawnParameters[] var2,
      NPCSpawn.DespawnParameters var3,
      String[] var4,
      IntSet var5,
      double[] var6,
      int[] var7,
      Map<LightType, double[]> var8,
      boolean var9
   ) {
      this.id = var1;
      this.npcs = var2;
      this.despawnParameters = var3;
      this.environments = var4;
      this.environmentIds = var5;
      this.dayTimeRange = var6;
      this.moonPhaseRange = var7;
      this.lightTypeMap = var8;
      this.scaleDayTimeRange = var9;
   }

   class="kw">protected NPCSpawn(String var1) {
      this.id = var1;
   }

   class="kw">protected NPCSpawn() {
   }

   class="kw">public class="kw">abstract String getId();

   class="kw">public RoleSpawnParameters[] getNPCs() {
      class="kw">return this.npcs;
   }

   class="kw">public NPCSpawn.DespawnParameters getDespawnParameters() {
      class="kw">return this.despawnParameters;
   }

   class="kw">public String[] getEnvironments() {
      class="kw">return this.environments;
   }

   class="kw">public IntSet getEnvironmentIds() {
      class="kw">return this.environmentIds;
   }

   class="kw">public double[] getDayTimeRange() {
      class="kw">return this.dayTimeRange;
   }

   class="kw">public int[] getMoonPhaseRange() {
      class="kw">return this.moonPhaseRange;
   }

   class="kw">public double[] getLightRange(LightType var1) {
      if (this.lightTypeMap != null && !this.lightTypeMap.isEmpty()) {
         double[] var2 = this.lightTypeMap.get(var1);
         if (var2 != null) {
            class="kw">return var2;
         }
      }

      class="kw">return FULL_LIGHT_RANGE;
   }

   class="kw">public boolean isScaleDayTimeRange() {
      class="kw">return this.scaleDayTimeRange;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "NPCSpawn{id='"
         + this.id
         + "', npcs="
         + Arrays.deepToString(this.npcs)
         + ", despawnParameters="
         + (this.despawnParameters != null ? this.despawnParameters.toString() : "Null")
         + ", environments="
         + Arrays.toString(this.environments)
         + ", dayTimeRange="
         + Arrays.toString(this.dayTimeRange)
         + ", moonPhaseRange="
         + Arrays.toString(this.moonPhaseRange)
         + ", lightTypeMap="
         + (
            this.lightTypeMap != null
               ? this.lightTypeMap
                  .entrySet()
                  .stream()
                  .map(var0 -> var0.getKey() + "=" + Arrays.toString(var0.getValue()))
                  .collect(Collectors.joining(", ", "{", "}"))
               : "Null"
         )
         + ", scaleDayTimeRange="
         + this.scaleDayTimeRange
         + "}";
   }

   class="kw">public class="kw">static class DespawnParameters {
      class="kw">public class="kw">static class="kw">final BuilderCodec<NPCSpawn.DespawnParameters> CODEC = BuilderCodec.<NPCSpawn.DespawnParameters>builder(
            NPCSpawn.DespawnParameters.class, NPCSpawn.DespawnParameters::new
         )
         .documentation("A set of parameters that determine if NPCs should despawn.")
         .<double[]>append(new KeyedCodec<>("DayTimeRange", Codec.DOUBLE_ARRAY), (var0, var1) -> {
            var0.dayTimeRange = var1;
            var0.dayTimeRange[0] = var0.dayTimeRange[0] / 24.0;
            var0.dayTimeRange[1] = var0.dayTimeRange[1] / 24.0;
         }, var0 -> new double[]{var0.dayTimeRange[0] * 24.0, var0.dayTimeRange[1] * 24.0})
         .documentation("An optional hour range within which the NPCs will despawn (between 0 and 24). For Spawn Beacons, this refers to the beacon itself.")
         .addValidator(Validators.doubleArraySize(2))
         .add()
         .<int[]>append(
            new KeyedCodec<>("MoonPhaseRange", Codec.INT_ARRAY),
            (var0, var1) -> var0.moonPhaseRange = var1,
            var0 -> new int[]{var0.moonPhaseRange[0], var0.moonPhaseRange[1]}
         )
         .documentation(
            "An optional moon phase range during which the NPCs will despawn (must be greater than or equal to 0). For Spawn Beacons, this refers to the beacon itself."
         )
         .addValidator(Validators.intArraySize(2))
         .add()
         .build();
      class="kw">protected double[] dayTimeRange = NPCSpawn.DEFAULT_DAY_TIME_RANGE;
      class="kw">protected int[] moonPhaseRange = NPCSpawn.DEFAULT_MOON_PHASE_RANGE;

      class="kw">public DespawnParameters(double[] var1, int[] var2) {
         this.dayTimeRange = var1;
         this.moonPhaseRange = var2;
      }

      class="kw">protected DespawnParameters() {
      }

      class="kw">public double[] getDayTimeRange() {
         class="kw">return this.dayTimeRange;
      }

      class="kw">public int[] getMoonPhaseRange() {
         class="kw">return this.moonPhaseRange;
      }

      @Nonnull
      @Override
      class="kw">public String toString() {
         class="kw">return "DespawnParameters{dayTimeRange=" + Arrays.toString(this.dayTimeRange) + ", moonPhaseRange=" + Arrays.toString(this.moonPhaseRange) + "}";
      }
   }
}