NPCSpawn class
Пакет: com.hypixel.hytale.server.spawning.assets.spawns.config
Файл: com/hypixel/hytale/server/spawning/assets/spawns/config/NPCSpawn.java
Поля (14)
| Модификаторы | Тип | Имя |
|---|---|---|
|
public static final BuilderCodec<NPCSpawn.DespawnParameters> |
CODEC |
final |
float |
HOURS_PER_DAY |
|
protected double[] |
dayTimeRange |
|
protected int[] |
moonPhaseRange |
|
IntOpenHashSet |
var1 |
|
NPCSpawn.DespawnParameters |
var10 |
|
IndexedLookupTableAssetMap |
var2 |
|
double[] |
var2 |
|
|
var2 |
|
double[] |
var2 |
|
int[] |
var3 |
|
|
var3 |
|
double |
var4 |
|
int |
var7 |
Методы (28)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
DespawnParameterspublic DespawnParameters(double[] var1, int[] var2) |
|
protected |
DespawnParametersprotected DespawnParameters() |
|
|
for for(String var6 : var0.environments) |
|
|
for for(LightType var7 : LightType.VALUES) |
|
|
for for(int var3 = 0; var3 < var2.length; var3++) |
public |
double[] |
getDayTimeRangedouble[] getDayTimeRange() |
|
public double[] |
getDayTimeRangepublic double[] getDayTimeRange() |
public |
NPCSpawn.DespawnParameters |
getDespawnParametersNPCSpawn.DespawnParameters getDespawnParameters() |
public |
IntSet |
getEnvironmentIdsIntSet getEnvironmentIds() |
public |
String[] |
getEnvironmentsString[] getEnvironments() |
abstract abstract |
String |
getIdString getId() |
public |
double[] |
getLightRangedouble[] getLightRange(LightType var1) |
public |
int[] |
getMoonPhaseRangeint[] getMoonPhaseRange() |
|
public int[] |
getMoonPhaseRangepublic int[] getMoonPhaseRange() |
public |
RoleSpawnParameters[] |
getNPCsRoleSpawnParameters[] getNPCs() |
|
|
if if(var0.environments != null && var0.environments.length != 0) |
|
|
if if(var7 != Integer.MIN_VALUE) |
|
|
if if(var2[0] < 0.0 || var2[1] < 0.0) |
|
|
if if(var3[0] < 0 || var3[1] < 0) |
|
|
if if(var10 != null) |
|
|
if if(var2[0] < 0.0 || var2[1] < 0.0) |
|
|
if if(var3[0] < 0 || var3[1] < 0) |
|
|
if if(var4 < 0.0 || var4 > 100.0) |
|
|
if if(var3 > 0 && var4 < var2[var3 - 1]) |
|
|
if if(var2 != null) |
public |
boolean |
isScaleDayTimeRangeboolean isScaleDayTimeRange() |
|
public String |
toStringpublic String toString() |
static |
void |
validateLightRangevoid validateLightRange(@Nonnull ValidationResults var0, String var1, @Nonnull double[] var2) |
Исходный код
Показать/скрыть
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) + "}";
}
}
}