FailReason enum
Пакет: com.hypixel.hytale.server.spawning.spawnmarkers
Файл: com/hypixel/hytale/server/spawning/spawnmarkers/SpawnMarkerEntity.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
INVALID_ROLE,
NONEXISTENT_ROLE,
FAILED_ROLE_VALIDATION,
NO_ROOM,
NO_VALID_SPAWN_POSITION,
NO_MOVEMENT_MODES,
MOVEMENT_MODE_REJECTED, |
TOO_HIGH |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.spawnmarkers;
class="kw">import com.hypixel.hytale.builtin.tagset.TagSetPlugin;
class="kw">import com.hypixel.hytale.builtin.tagset.config.NPCGroup;
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.common.map.IWeightedMap;
class="kw">import com.hypixel.hytale.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.function.consumer.TriConsumer;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.Model;
class="kw">import com.hypixel.hytale.server.core.asset.type.model.config.ModelAsset;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.group.EntityGroup;
class="kw">import com.hypixel.hytale.server.core.entity.reference.InvalidatablePersistentRef;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.WorldGenId;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.FlockPlugin;
class="kw">import com.hypixel.hytale.server.flock.StoredFlock;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.Builder;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderInfo;
class="kw">import com.hypixel.hytale.server.npc.components.SpawnMarkerReference;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.movement.MovementMode;
class="kw">import com.hypixel.hytale.server.spawning.ISpawnableWithModel;
class="kw">import com.hypixel.hytale.server.spawning.SpawnTestResult;
class="kw">import com.hypixel.hytale.server.spawning.SpawningContext;
class="kw">import com.hypixel.hytale.server.spawning.SpawningPlugin;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawnsuppression.SpawnSuppression;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import it.unimi.dsi.fastutil.ints.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.time.Duration;
class="kw">import java.time.Instant;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.ThreadLocalRandom;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class SpawnMarkerEntity class="kw">implements Component<EntityStore> {
class="kw">private class="kw">static class="kw">final double SPAWN_LOST_TIMEOUT = 35.0;
@Nonnull
class="kw">private class="kw">static class="kw">final InvalidatablePersistentRef[] EMPTY_REFERENCES = new InvalidatablePersistentRef[0];
class="kw">public class="kw">static class="kw">final ArrayCodec<InvalidatablePersistentRef> NPC_REFERENCES_CODEC = new ArrayCodec<>(
InvalidatablePersistentRef.CODEC, InvalidatablePersistentRef[]::new
);
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnMarkerEntity> CODEC = BuilderCodec.<SpawnMarkerEntity>builder(SpawnMarkerEntity.class, SpawnMarkerEntity::new)
.addField(new KeyedCodec<>("SpawnMarker", Codec.STRING), (var0, var1) -> var0.spawnMarkerId = var1, var0 -> var0.spawnMarkerId)
.addField(new KeyedCodec<>("RespawnTime", Codec.DOUBLE), (var0, var1) -> var0.respawnCounter = var1, var0 -> var0.respawnCounter)
.addField(new KeyedCodec<>("SpawnCount", Codec.INTEGER), (var0, var1) -> var0.spawnCount = var1, var0 -> var0.spawnCount)
.addField(new KeyedCodec<>("GameTimeRespawn", Codec.DURATION), (var0, var1) -> var0.gameTimeRespawn = var1, var0 -> var0.gameTimeRespawn)
.addField(new KeyedCodec<>("SpawnAfter", Codec.INSTANT), (var0, var1) -> var0.spawnAfter = var1, var0 -> var0.spawnAfter)
.addField(new KeyedCodec<>("NPCReferences", NPC_REFERENCES_CODEC), (var0, var1) -> var0.npcReferences = var1, var0 -> var0.npcReferences)
.addField(new KeyedCodec<>("PersistedFlock", StoredFlock.CODEC), (var0, var1) -> var0.storedFlock = var1, var0 -> var0.storedFlock)
.addField(
new KeyedCodec<>("SpawnPosition", Vector3dUtil.CODEC),
(var0, var1) -> var0.spawnPosition.set(var1),
var0 -> var0.storedFlock == null ? null : var0.spawnPosition
)
.build();
class="kw">private class="kw">static class="kw">final int MAX_FAILED_SPAWNS = 5;
class="kw">private String spawnMarkerId;
class="kw">private SpawnMarker cachedMarker;
class="kw">private double respawnCounter;
@Nullable
class="kw">private Duration gameTimeRespawn;
@Nullable
class="kw">private Instant spawnAfter;
class="kw">private int spawnCount;
@Nullable
class="kw">private Set<UUID> suppressedBy;
class="kw">private int failedSpawns;
class="kw">private boolean loggedNoConfiguration;
@Nullable
class="kw">private class="kw">final SpawningContext context;
class="kw">private class="kw">final Vector3d spawnPosition = new Vector3d();
class="kw">private InvalidatablePersistentRef[] npcReferences;
@Nullable
class="kw">private StoredFlock storedFlock;
@Nullable
class="kw">private List<Pair<Ref<EntityStore>, NPCEntity>> tempStorageList;
class="kw">private double timeToDeactivation;
class="kw">private boolean despawnStarted;
class="kw">private double spawnLostTimeoutCounter;
class="kw">public class="kw">static ComponentType<EntityStore, SpawnMarkerEntity> getComponentType() {
class="kw">return SpawningPlugin.get().getSpawnMarkerComponentType();
}
class="kw">public SpawnMarkerEntity() {
this(new SpawningContext());
}
class="kw">private SpawnMarkerEntity(@Nullable SpawningContext var1) {
this.context = var1;
this.npcReferences = EMPTY_REFERENCES;
}
class="kw">public SpawnMarker getCachedMarker() {
class="kw">return this.cachedMarker;
}
class="kw">public void setCachedMarker(@Nonnull SpawnMarker var1) {
this.cachedMarker = var1;
this.loggedNoConfiguration = false;
}
class="kw">public int getSpawnCount() {
class="kw">return this.spawnCount;
}
class="kw">public void setSpawnCount(int var1) {
this.spawnCount = var1;
}
class="kw">public void setRespawnCounter(double var1) {
this.respawnCounter = var1;
}
class="kw">public void setSpawnAfter(@Nullable Instant var1) {
this.spawnAfter = var1;
}
@Nullable
class="kw">public Instant getSpawnAfter() {
class="kw">return this.spawnAfter;
}
class="kw">public void setGameTimeRespawn(@Nullable Duration var1) {
this.gameTimeRespawn = var1;
}
@Nullable
class="kw">public Duration pollGameTimeRespawn() {
Duration var1 = this.gameTimeRespawn;
this.gameTimeRespawn = null;
class="kw">return var1;
}
class="kw">public boolean tickRespawnTimer(float var1) {
class="kw">return (this.respawnCounter -= var1) <= 0.0;
}
@Nullable
class="kw">public Set<UUID> getSuppressedBy() {
class="kw">return this.suppressedBy;
}
class="kw">public void setStoredFlock(@Nonnull StoredFlock var1) {
this.storedFlock = var1;
}
@Nullable
class="kw">public StoredFlock getStoredFlock() {
class="kw">return this.storedFlock;
}
class="kw">public double getTimeToDeactivation() {
class="kw">return this.timeToDeactivation;
}
class="kw">public void setTimeToDeactivation(double var1) {
this.timeToDeactivation = var1;
}
class="kw">public boolean tickTimeToDeactivation(float var1) {
class="kw">return (this.timeToDeactivation -= var1) <= 0.0;
}
class="kw">public boolean tickSpawnLostTimeout(float var1) {
class="kw">return (this.spawnLostTimeoutCounter -= var1) <= 0.0;
}
@Nonnull
class="kw">public Vector3d getSpawnPosition() {
class="kw">return this.spawnPosition;
}
class="kw">public InvalidatablePersistentRef[] getNpcReferences() {
class="kw">return this.npcReferences;
}
class="kw">public void setNpcReferences(@Nullable InvalidatablePersistentRef[] var1) {
this.npcReferences = var1 != null ? var1 : EMPTY_REFERENCES;
}
@Nullable
class="kw">public List<Pair<Ref<EntityStore>, NPCEntity>> getTempStorageList() {
class="kw">return this.tempStorageList;
}
class="kw">public void setTempStorageList(@Nonnull List<Pair<Ref<EntityStore>, NPCEntity>> var1) {
this.tempStorageList = var1;
}
class="kw">public boolean isDespawnStarted() {
class="kw">return this.despawnStarted;
}
class="kw">public void setDespawnStarted(boolean var1) {
this.despawnStarted = var1;
}
class="kw">public void refreshTimeout() {
this.spawnLostTimeoutCounter = 35.0;
}
class="kw">public boolean spawnNPC(@Nonnull Ref<EntityStore> var1, @Nonnull SpawnMarker var2, @Nullable List<Ref<EntityStore>> var3, @Nonnull Store<EntityStore> var4) {
assert this.context != null;
if (this.context == null) {
class="kw">return false;
}
IWeightedMap var5 = var2.getWeightedConfigurations();
if (var5 == null) {
if (!this.loggedNoConfiguration) {
this.loggedNoConfiguration = true;
SpawningPlugin.get().getLogger().at(Level.WARNING).log("Marker %s (%s) has no spawn configurations and cannot spawn", var1, this.spawnMarkerId);
}
this.refreshTimeout();
class="kw">return false;
} else {
SpawnMarker.SpawnConfiguration var6 = var5.get(ThreadLocalRandom.current());
if (var6 == null) {
if (!this.loggedNoConfiguration) {
this.loggedNoConfiguration = true;
SpawningPlugin.get()
.getLogger()
.at(Level.WARNING)
.log("Marker %s (%s) has no spawn configuration to choose from and cannot spawn", var1, this.spawnMarkerId);
}
this.refreshTimeout();
class="kw">return false;
} else {
boolean var7 = var2.isRealtimeRespawn();
if (var7) {
this.respawnCounter = var6.getRealtimeRespawnTime();
} else {
this.spawnAfter = null;
this.gameTimeRespawn = var6.getSpawnAfterGameTime();
}
UUIDComponent var8 = var4.getComponent(var1, UUIDComponent.getComponentType());
assert var8 != null;
UUID var9 = var8.getUuid();
String var10 = var6.getNpc();
if (var10 != null && !var10.isEmpty()) {
NPCPlugin var11 = NPCPlugin.get();
int var12 = var11.getIndex(var10);
TransformComponent var13 = var4.getComponent(var1, TransformComponent.getComponentType());
assert var13 != null;
Vector3d var14 = var13.getPosition();
BuilderInfo var15 = var11.getRoleBuilderInfo(var12);
if (var15 == null) {
SpawningPlugin.get().getLogger().at(Level.WARNING).log("Marker %s attempted to spawn non-existent NPC role '%s'", var9, var10);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.NONEXISTENT_ROLE);
class="kw">return false;
}
Builder var16 = var15.isValid() ? var15.getBuilder() : null;
if (var16 == null) {
SpawningPlugin.get().getLogger().at(Level.WARNING).log("Marker %s attempted to spawn invalid NPC role '%s'", var9, var10);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.INVALID_ROLE);
class="kw">return false;
}
if (!var16.isSpawnable()) {
SpawningPlugin.get().getLogger().at(Level.WARNING).log("Marker %s attempted to spawn a non-spawnable (class="kw">abstract) role '%s'", var9, var10);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.INVALID_ROLE);
class="kw">return false;
}
ISpawnableWithModel var17 = (ISpawnableWithModel)var16;
if (!this.context.setSpawnable(var17)) {
SpawningPlugin.get().getLogger().at(Level.WARNING).log("Marker %s failed to spawn NPC role '%s' due to failed role validation", var9, var10);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.FAILED_ROLE_VALIDATION);
class="kw">return false;
}
List var18 = SpatialResource.getThreadLocalReferenceList();
SpatialResource var19 = var4.getResource(EntityModule.get().getPlayerSpatialResourceType());
var19.getSpatialStructure().collect(var14, var2.getExclusionRadius(), var18);
boolean var20 = !var18.isEmpty();
if (var20) {
this.refreshTimeout();
class="kw">return false;
}
World var21 = var4.getExternalData().getWorld();
if (!this.context.set(var21, var14.x, var14.y, var14.z)) {
SpawningPlugin.get()
.getLogger()
.at(this.failDetailLevel())
.log("Marker %s attempted to spawn NPC '%s' at %s but the chunk is unloaded or no spawn span exists", var9, var10, var14);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.NO_VALID_SPAWN_POSITION);
class="kw">return false;
}
Set var22 = this.context.getSpawnMovementModes();
if (var22.isEmpty()) {
SpawningPlugin.get()
.getLogger()
.at(this.failDetailLevel())
.log(
"Marker %s attempted to spawn NPC '%s' but there are either no valid motion controllers or breathing config is incompatible",
var9,
var10
);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.NO_MOVEMENT_MODES);
class="kw">return false;
}
MovementMode var23 = var22.iterator().next();
if (!this.context.setMovementMode(var23, true)) {
SpawningPlugin.get()
.getLogger()
.at(this.failDetailLevel())
.log("Marker %s attempted to spawn NPC '%s' but movement mode %s is invalid for spawning", var9, var10, var23);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.MOVEMENT_MODE_REJECTED);
class="kw">return false;
}
SpawnTestResult var24 = this.context.canSpawn(true, false);
if (var24 != SpawnTestResult.TEST_OK) {
SpawningPlugin.get()
.getLogger()
.at(this.failDetailLevel())
.log("Marker %s attempted to spawn NPC '%s' at %s but could not fit: %s", var9, var10, var14, var24);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.NO_ROOM);
class="kw">return false;
}
this.spawnPosition.set(this.context.xSpawn, this.context.ySpawn, this.context.zSpawn);
double var25 = var2.getMaxDropHeightSquared();
double var27 = this.spawnPosition.distanceSquared(var14);
if (var17.requiresSpawnDropHeightCheck(this.context) && var27 > var25) {
SpawningPlugin.get()
.getLogger()
.at(this.failDetailLevel())
.log("Marker %s attempted to spawn NPC '%s' but was offset too far from the ground at %s", var9, var10, var14);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.TOO_HIGH);
class="kw">return false;
}
TriConsumer var29 = (var1x, var2x, var3x) -> {
SpawnMarkerReference var4 = var3x.ensureAndGetComponent(var2x, SpawnMarkerReference.getComponentType());
var4.getReference().setEntity(var1, var3x);
var4.refreshTimeoutCounter();
WorldGenId var5 = var3x.getComponent(var1, WorldGenId.getComponentType());
int var6 = var5 != null ? var5.getWorldGenId() : 0;
var3x.putComponent(var2x, WorldGenId.getComponentType(), new WorldGenId(var6));
};
Rotation3f var30 = var13.getRotation();
Pair var31 = var11.spawnEntity(var4, var12, this.spawnPosition, var30, null, var29);
if (var31 == null) {
SpawningPlugin.get()
.getLogger()
.at(Level.WARNING)
.log("Marker %s could not spawn NPC role '%s' because the entity was rejected while being added", var9, var10);
this.fail(var1, var9, var10, var14, var4, SpawnMarkerEntity.FailReason.INVALID_ROLE);
class="kw">return false;
}
Ref var32 = (Ref<EntityStore>)var31.first();
NPCEntity var33 = (NPCEntity)var31.second();
if (var3 != null) {
var3.add(var32);
}
Ref var34 = FlockPlugin.trySpawnFlock(var32, var33, var4, var12, this.spawnPosition, var30, var6.getFlockDefinition(), var29);
EntityGroup var35 = var34 == null ? null : var4.getComponent(var34, EntityGroup.getComponentType());
this.spawnCount = var35 != null ? var35.size() : 1;
if (this.storedFlock != null) {
this.despawnStarted = false;
this.npcReferences = new InvalidatablePersistentRef[this.spawnCount];
if (var35 != null) {
var35.forEachMember((var3x, var4x, var5x) -> {
InvalidatablePersistentRef var6 = new InvalidatablePersistentRef();
var6.setEntity(var4x, var4);
var5x[var3x] = var6;
if (var3 != null) {
if (var4x.equals(var32)) {
class="kw">return;
}
var3.add(var4x);
}
}, this.npcReferences);
} else {
InvalidatablePersistentRef var36 = new InvalidatablePersistentRef();
var36.setEntity(var32, var4);
this.npcReferences[0] = var36;
}
this.storedFlock.clear();
}
SpawningPlugin.get()
.getLogger()
.at(Level.FINE)
.log("Marker %s spawned %s and set respawn to %s", var9, var33.getRoleName(), var7 ? this.respawnCounter : this.gameTimeRespawn);
this.refreshTimeout();
class="kw">return true;
} else {
SpawningPlugin.get()
.getLogger()
.at(Level.FINE)
.log("Marker %s performed noop spawn and set repawn to %s", var9, var7 ? this.respawnCounter : this.gameTimeRespawn);
this.refreshTimeout();
class="kw">return true;
}
}
}
}
class="kw">private void fail(
@Nonnull Ref<EntityStore> var1,
@Nonnull UUID var2,
@Nonnull String var3,
@Nonnull Vector3d var4,
@Nonnull Store<EntityStore> var5,
@Nonnull SpawnMarkerEntity.FailReason var6
) {
boolean var7 = this.nextFailRemovesMarker();
this.failedSpawns++;
if (var7) {
SpawningPlugin.get()
.getLogger()
.at(Level.WARNING)
.log("Marker %s (%s) at %s removed due to repeated spawning fails of NPC %s with reason: %s", this.spawnMarkerId, var2, var4, var3, var6);
var5.removeEntity(var1, RemoveReason.REMOVE);
} else {
this.refreshTimeout();
}
}
class="kw">private boolean nextFailRemovesMarker() {
class="kw">return this.failedSpawns + 1 >= 5;
}
@Nonnull
class="kw">private Level failDetailLevel() {
class="kw">return this.nextFailRemovesMarker() ? Level.WARNING : Level.FINE;
}
class="kw">public void setSpawnMarker(@Nonnull SpawnMarker var1) {
this.spawnMarkerId = var1.getId();
this.setCachedMarker(var1);
if (this.cachedMarker.getDeactivationDistance() > 0.0) {
this.storedFlock = new StoredFlock();
this.tempStorageList = new ObjectArrayList();
} else {
this.storedFlock = null;
this.tempStorageList = null;
}
}
class="kw">public int decrementAndGetSpawnCount() {
class="kw">return --this.spawnCount;
}
class="kw">public String getSpawnMarkerId() {
class="kw">return this.spawnMarkerId;
}
class="kw">public boolean isManualTrigger() {
class="kw">return this.cachedMarker.isManualTrigger();
}
class="kw">public boolean trigger(@Nonnull Ref<EntityStore> var1, @Nullable List<Ref<EntityStore>> var2, @Nonnull Store<EntityStore> var3) {
class="kw">return this.cachedMarker.isManualTrigger() && this.spawnCount <= 0 ? this.spawnNPC(var1, this.cachedMarker, var2, var3) : false;
}
class="kw">public boolean isSuppressedBy(@Nonnull SpawnSuppression var1) {
int[] var2 = var1.getSuppressedGroupIds();
if (var2 != null && var2.length != 0) {
SpawnMarker var3 = this.cachedMarker != null ? this.cachedMarker : SpawnMarker.getAssetMap().getAsset(this.spawnMarkerId);
if (var3 == null) {
class="kw">return true;
}
IWeightedMap var4 = var3.getWeightedConfigurations();
if (var4 == null) {
class="kw">return false;
}
NPCPlugin var5 = NPCPlugin.get();
TagSetPlugin.TagSetLookup var6 = TagSetPlugin.get(NPCGroup.class);
boolean[] var7 = new boolean[]{false};
var4.forEach(var4x -> {
if (!var7[0]) {
String var5 = var4x.getNpc();
if (var5 != null && !var5.isEmpty()) {
int var6 = var5.getIndex(var5);
for (int var10 : var2) {
IntSet var11 = var6.getSet(var10);
if (var11 != null && var11.contains(var6)) {
var7[0] = true;
class="kw">return;
}
}
}
}
});
class="kw">return var7[0];
} else {
class="kw">return true;
}
}
class="kw">public void suppress(@Nonnull UUID var1) {
if (this.suppressedBy == null) {
this.suppressedBy = new HashSet<>();
}
this.suppressedBy.add(var1);
}
class="kw">public void releaseSuppression(@Nonnull UUID var1) {
if (this.suppressedBy != null) {
this.suppressedBy.remove(var1);
}
}
class="kw">public void clearAllSuppressions() {
if (this.suppressedBy != null) {
this.suppressedBy.clear();
}
}
@Nonnull
@Override
class="kw">public Component<EntityStore> clone() {
SpawnMarkerEntity var1 = new SpawnMarkerEntity();
var1.spawnMarkerId = this.spawnMarkerId;
var1.cachedMarker = this.cachedMarker;
var1.respawnCounter = this.respawnCounter;
var1.gameTimeRespawn = this.gameTimeRespawn;
var1.spawnAfter = this.spawnAfter;
var1.spawnCount = this.spawnCount;
var1.suppressedBy = this.suppressedBy != null ? new HashSet<>(this.suppressedBy) : null;
var1.failedSpawns = this.failedSpawns;
var1.loggedNoConfiguration = this.loggedNoConfiguration;
var1.spawnPosition.set(this.spawnPosition);
var1.npcReferences = this.npcReferences;
var1.storedFlock = this.storedFlock != null ? this.storedFlock.clone() : null;
var1.timeToDeactivation = this.timeToDeactivation;
var1.despawnStarted = this.despawnStarted;
var1.spawnLostTimeoutCounter = this.spawnLostTimeoutCounter;
class="kw">return var1;
}
@Nullable
@Override
class="kw">public Component<EntityStore> cloneSerializable() {
SpawnMarkerEntity var1 = new SpawnMarkerEntity(null);
var1.spawnMarkerId = this.spawnMarkerId;
var1.respawnCounter = this.respawnCounter;
var1.spawnCount = this.spawnCount;
var1.gameTimeRespawn = this.gameTimeRespawn;
var1.spawnAfter = this.spawnAfter;
var1.npcReferences = this.npcReferences;
var1.storedFlock = this.storedFlock != null ? this.storedFlock.cloneSerializable() : null;
var1.spawnPosition.set(this.spawnPosition);
class="kw">return var1;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "SpawnMarkerEntity{spawnMarkerId='"
+ this.spawnMarkerId
+ "', cachedMarker="
+ this.cachedMarker
+ ", respawnCounter="
+ this.respawnCounter
+ ", gameTimeRespawn="
+ this.gameTimeRespawn
+ ", spawnAfter="
+ this.spawnAfter
+ ", spawnCount="
+ this.spawnCount
+ ", spawnLostTimeoutCounter="
+ this.spawnLostTimeoutCounter
+ ", failedSpawns="
+ this.failedSpawns
+ ", context="
+ this.context
+ ", spawnPosition="
+ this.spawnPosition
+ ", storedFlock="
+ this.storedFlock
+ "} "
+ super.toString();
}
class="kw">public class="kw">static Model getModel(@Nonnull SpawnMarker var0) {
String var1 = var0.getModel();
ModelAsset var2 = null;
if (var1 != null && !var1.isEmpty()) {
var2 = ModelAsset.getAssetMap().getAsset(var1);
}
Model var3;
if (var2 == null) {
var3 = SpawningPlugin.get().getSpawnMarkerModel();
} else {
var3 = Model.createUnitScaleModel(var2);
}
class="kw">return var3;
}
class="kw">private enum FailReason {
INVALID_ROLE,
NONEXISTENT_ROLE,
FAILED_ROLE_VALIDATION,
NO_ROOM,
NO_VALID_SPAWN_POSITION,
NO_MOVEMENT_MODES,
MOVEMENT_MODE_REJECTED,
TOO_HIGH;
FailReason() {
}
}
}