NPCEntity class

Пакет: com.hypixel.hytale.server.npc.entities

Файл: com/hypixel/hytale/server/npc/entities/NPCEntity.java

extends: LivingEntity

implements: INonPlayerCharacter

Поля (24)

МодификаторыТипИмя
final BuilderCodec<NPCEntity> CODEC
AlarmStore var1
var1
DebugSupport var1
ApplicationEffects var10
float var11
String var2
boolean var2
DebugSupport var2
CombatSupport var3
ModelComponent var3
EffectControllerComponent var3
Model var4
Model var4
int[] var4
StateSupport var5
NPCEntity var5
Model var6
var6
ModelAsset var6
ModelComponent var7
ActiveAnimationComponent var8
String[] var9
EntityEffect var9

Методы (83)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("setSpawnConfiguration: Cannot find spawn configuration name for index: " + var1)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Appearance can't be changed to empty")
public void addReservationvoid addReservation(@Nonnull UUID var1)
public void clearDamageDatavoid clearDamageData()
for for(int var8 : var4)
public boolean getCanCauseDamageboolean getCanCauseDamage(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
public float getCurrentHorizontalSpeedMultiplierfloat getCurrentHorizontalSpeedMultiplier(@Nullable Ref<EntityStore> var1, @Nullable ComponentAccessor<EntityStore> var2)
public DamageData getDamageDataDamageData getDamageData()
public double getDespawnTimedouble getDespawnTime()
public int getEnvironmentint getEnvironment()
public double getHoverHeightdouble getHoverHeight()
public float getHoverPhasefloat getHoverPhase()
public float getLeashHeadingfloat getLeashHeading()
public float getLeashPitchfloat getLeashPitch()
public Vector3d getLeashPointVector3d getLeashPoint()
public Vector3d getOldPositionVector3d getOldPosition()
public EnumSet<RoleDebugFlags> getRoleDebugFlagsEnumSet<RoleDebugFlags> getRoleDebugFlags()
public int getRoleIndexint getRoleIndex()
public String getRoleNameString getRoleName()
public int getSpawnConfigurationint getSpawnConfiguration()
public Instant getSpawnInstantInstant getSpawnInstant()
public int getSpawnRoleIndexint getSpawnRoleIndex()
if if(var7 != null)
if if(var8 == null)
if if(this.isDespawning)
if if(var1 == this.roleIndex)
if if(var1 == Integer.MIN_VALUE)
if if(var1 == Integer.MIN_VALUE)
if if(var2 == null)
if if(var3 == null)
if if(var6 == null)
if if(this.cachedEntityHorizontalSpeedMultiplier != Float.MAX_VALUE)
if if(var1 != null && var2 != null)
if if(var3 == null)
if if(var4 == null)
if if(var9 != null)
if if(var10 != null)
if if(var11 >= 0.0F)
public void invalidateCachedHorizontalSpeedMultipliervoid invalidateCachedHorizontalSpeedMultiplier()
public boolean isDespawningboolean isDespawning()
public boolean isPlayingDespawnAnimboolean isPlayingDespawnAnim()
public boolean isReservedboolean isReserved()
public boolean isReservedByboolean isReservedBy(@Nonnull UUID var1)
public void onFlockSetStatevoid onFlockSetState(@Nonnull Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4)
public void onFlockSetTargetvoid onFlockSetTarget(@Nonnull String var1, @Nonnull Ref<EntityStore> var2)
public void playAnimationvoid playAnimation(@Nonnull Ref<EntityStore> var1, @Nonnull AnimationSlot var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4)
public void playAnimationvoid playAnimation(@Nonnull Ref<EntityStore> var1, @Nonnull AnimationSlot var2, @Nullable String var3, boolean var4, @Nonnull ComponentAccessor<EntityStore> var5)
public void removeReservationvoid removeReservation(@Nonnull UUID var1)
public boolean requiresLeashPositionboolean requiresLeashPosition()
public void saveLeashBlockTypevoid saveLeashBlockType()
public void saveLeashInformationvoid saveLeashInformation(@Nonnull Vector3dc var1, @Nonnull Rotation3fc var2)
public void setActiveMotionControllerNamevoid setActiveMotionControllerName(@Nullable String var1)
static boolean setAppearanceboolean setAppearance(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2)
public void setAppearancevoid setAppearance(@Nonnull Ref<EntityStore> var1, @Nonnull ModelAsset var2, @Nonnull ComponentAccessor<EntityStore> var3)
public void setCollectSensorStatsvoid setCollectSensorStats(boolean var1)
public void setDespawnAnimationRemainingSecondsvoid setDespawnAnimationRemainingSeconds(float var1)
public void setDespawnCheckRemainingSecondsvoid setDespawnCheckRemainingSeconds(float var1)
public void setDespawnRemainingSecondsvoid setDespawnRemainingSeconds(float var1)
public void setDespawnTimevoid setDespawnTime(float var1)
public void setDespawningvoid setDespawning(boolean var1)
public void setEnvironmentvoid setEnvironment(int var1)
public void setHoverHeightvoid setHoverHeight(double var1)
public void setHoverPhasevoid setHoverPhase(float var1)
public void setInitialModelScalevoid setInitialModelScale(float var1)
public void setLeashHeadingvoid setLeashHeading(float var1)
public void setLeashPitchvoid setLeashPitch(float var1)
public void setLeashPointvoid setLeashPoint(@Nonnull Vector3d var1)
public void setPlayingDespawnAnimvoid setPlayingDespawnAnim(boolean var1)
public void setRolevoid setRole(Role var1)
public void setRoleDebugFlagsvoid setRoleDebugFlags(@Nonnull EnumSet<RoleDebugFlags> var1)
public void setRoleIndexvoid setRoleIndex(int var1)
public void setRoleNamevoid setRoleName(String var1)
public void setSpawnConfigurationvoid setSpawnConfiguration(int var1)
public void setSpawnInstantvoid setSpawnInstant(@Nonnull Instant var1)
public void setSpawnRoleIndexvoid setSpawnRoleIndex(int var1)
public void setToDespawnvoid setToDespawn()
public boolean shouldCollectSensorStatsboolean shouldCollectSensorStats()
public void storeTickStartPositionvoid storeTickStartPosition(@Nonnull Vector3d var1)
abstract super super(var1)
public boolean tickDespawnAnimationRemainingSecondsboolean tickDespawnAnimationRemainingSeconds(float var1)
public boolean tickDespawnCheckRemainingSecondsboolean tickDespawnCheckRemainingSeconds(float var1)
public boolean tickDespawnRemainingSecondsboolean tickDespawnRemainingSeconds(float var1)
public boolean updateSpawnTrackingStateboolean updateSpawnTrackingState(boolean var1)

Исходный код

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

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.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.AnimationSlot;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.ApplicationEffects;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.asset.type.environment.config.Environment;
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.AnimationUtils;
class="kw">import com.hypixel.hytale.server.core.entity.Entity;
class="kw">import com.hypixel.hytale.server.core.entity.LivingEntity;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ActiveAnimationComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ModelComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.npc.INonPlayerCharacter;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.role.RoleDebugFlags;
class="kw">import com.hypixel.hytale.server.npc.role.support.CombatSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.DebugSupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.StateSupport;
class="kw">import com.hypixel.hytale.server.npc.storage.AlarmStore;
class="kw">import com.hypixel.hytale.server.npc.util.DamageData;
class="kw">import com.hypixel.hytale.server.spawning.assets.spawns.config.WorldNPCSpawn;
class="kw">import java.time.Instant;
class="kw">import java.util.EnumSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.TimeUnit;
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">import org.joml.Vector3dc;

class="kw">public class NPCEntity class="kw">extends LivingEntity class="kw">implements INonPlayerCharacter {
   class="kw">public class="kw">static class="kw">final BuilderCodec<NPCEntity> CODEC = BuilderCodec.builder(NPCEntity.class, NPCEntity::new, LivingEntity.CODEC)
      .append(new KeyedCodec<>("Env", Codec.STRING), (var0, var1) -> var0.environmentIndex = Environment.getAssetMap().getIndex(var1), var0 -> {
         Environment var1 = Environment.getAssetMap().getAssetOrDefault(var0.environmentIndex, null);
         class="kw">return var1 != null ? var1.getId() : null;
      })
      .add()
      .append(new KeyedCodec<>("HvrPhs", Codec.DOUBLE), (var0, var1) -> var0.hoverPhase = var1.floatValue(), var0 -> (double)var0.hoverPhase)
      .add()
      .append(new KeyedCodec<>("HvrHght", Codec.DOUBLE), (var0, var1) -> var0.hoverHeight = var1, var0 -> var0.hoverHeight)
      .add()
      .append(new KeyedCodec<>("SpawnName", Codec.STRING), (var0, var1) -> {
         var0.spawnRoleName = var1;
         var0.spawnRoleIndex = NPCPlugin.get().getIndex(var1);
      }, var0 -> var0.spawnRoleName)
      .add()
      .append(new KeyedCodec<>("MdlScl", Codec.DOUBLE), (var0, var1) -> var0.initialModelScale = var1.floatValue(), var0 -> (double)var0.initialModelScale)
      .add()
      .append(new KeyedCodec<>("SpawnConfig", Codec.STRING), (var0, var1) -> {
         var0.spawnConfigurationName = var1;
         var0.spawnConfigurationIndex = WorldNPCSpawn.getAssetMap().getIndex(var1);
      }, var0 -> var0.spawnConfigurationName)
      .add()
      .append(new KeyedCodec<>("SpawnInstant", Codec.INSTANT), (var0, var1) -> var0.spawnInstant = var1, var0 -> var0.spawnInstant)
      .add()
      .append(new KeyedCodec<>("AlarmStore", AlarmStore.CODEC), (var0, var1) -> var0.alarmStore = var1, var0 -> null)
      .add()
      .append(new KeyedCodec<>("WorldgenId", Codec.INTEGER), (var0, var1) -> var0.worldgenId = var1, var0 -> var0.worldgenId)
      .add()
      .append(new KeyedCodec<>("PathManager", PathManager.CODEC), (var0, var1) -> var0.pathManager = var1, var0 -> var0.pathManager)
      .add()
      .append(new KeyedCodec<>("LeashPos", Vector3dUtil.CODEC), (var0, var1) -> {
         var0.leashPoint.set(var1);
         var0.hasLeashPosition = true;
      }, var0 -> var0.requiresLeashPosition() ? var0.leashPoint : null)
      .add()
      .append(
         new KeyedCodec<>("LeashHdg", Codec.DOUBLE),
         (var0, var1) -> var0.leashHeading = var1.floatValue(),
         var0 -> var0.requiresLeashPosition() ? (double)var0.leashHeading : null
      )
      .add()
      .append(
         new KeyedCodec<>("LeashPtch", Codec.DOUBLE),
         (var0, var1) -> var0.leashPitch = var1.floatValue(),
         var0 -> var0.requiresLeashPosition() ? (double)var0.leashPitch : null
      )
      .add()
      .append(new KeyedCodec<>("RoleName", Codec.STRING), (var0, var1) -> var0.roleName = var1, var0 -> var0.roleName)
      .add()
      .append(new KeyedCodec<>("ActiveMC", Codec.STRING), (var0, var1) -> var0.activeMotionControllerName = var1, var0 -> var0.activeMotionControllerName)
      .add()
      .build();
   class="kw">private String roleName;
   class="kw">private int roleIndex = Integer.MIN_VALUE;
   @Nullable
   class="kw">private Role role;
   class="kw">private int spawnRoleIndex = Integer.MIN_VALUE;
   @Nullable
   class="kw">private String spawnRoleName;
   @Nullable
   class="kw">private String spawnConfigurationName;
   @Nullable
   class="kw">private String activeMotionControllerName;
   class="kw">private int environmentIndex = Integer.MIN_VALUE;
   class="kw">private int spawnConfigurationIndex = Integer.MIN_VALUE;
   class="kw">private boolean isSpawnTracked;
   class="kw">private boolean collectSensorStats;
   class="kw">private boolean isDespawning;
   class="kw">private boolean isPlayingDespawnAnim;
   class="kw">private float despawnRemainingSeconds;
   class="kw">private float despawnCheckRemainingSeconds = RandomExtra.randomRange(1.0F, 5.0F);
   class="kw">private float despawnAnimationRemainingSeconds;
   class="kw">private float cachedEntityHorizontalSpeedMultiplier = Float.MAX_VALUE;
   class="kw">private class="kw">final Vector3d leashPoint = new Vector3d();
   class="kw">private float leashHeading;
   class="kw">private float leashPitch;
   class="kw">private boolean hasLeashPosition;
   class="kw">private float hoverPhase;
   class="kw">private double hoverHeight;
   class="kw">private float initialModelScale = 1.0F;
   class="kw">private Instant spawnInstant;
   @Nonnull
   class="kw">private PathManager pathManager = new PathManager();
   class="kw">private class="kw">final DamageData damageData = new DamageData();
   @Deprecated(forRemoval = true)
   @Nullable
   class="kw">private AlarmStore alarmStore;
   @Deprecated(forRemoval = true)
   class="kw">private int worldgenId = 0;
   @Nonnull
   class="kw">private class="kw">final Set<UUID> reservedBy = new HashSet<>();
   class="kw">private class="kw">final Vector3d oldPosition = new Vector3d();

   @Nullable
   class="kw">public class="kw">static ComponentType<EntityStore, NPCEntity> getComponentType() {
      class="kw">return EntityModule.get().getComponentType(NPCEntity.class);
   }

   class="kw">public NPCEntity() {
      this.role = null;
   }

   class="kw">public NPCEntity(@Nonnull World var1) {
      super(var1);
      this.role = null;
   }

   @Deprecated(forRemoval = true)
   @Nullable
   class="kw">public AlarmStore takeLegacyAlarmStore() {
      AlarmStore var1 = this.alarmStore;
      this.alarmStore = null;
      class="kw">return var1;
   }

   @Nullable
   class="kw">public Role getRole() {
      class="kw">return this.role;
   }

   class="kw">public void invalidateCachedHorizontalSpeedMultiplier() {
      this.cachedEntityHorizontalSpeedMultiplier = Float.MAX_VALUE;
   }

   class="kw">public void storeTickStartPosition(@Nonnull Vector3d var1) {
      this.oldPosition.set(var1);
   }

   class="kw">public boolean tickDespawnAnimationRemainingSeconds(float var1) {
      class="kw">return (this.despawnAnimationRemainingSeconds -= var1) <= 0.0F;
   }

   class="kw">public void setDespawnAnimationRemainingSeconds(float var1) {
      this.despawnAnimationRemainingSeconds = var1;
   }

   class="kw">public boolean tickDespawnRemainingSeconds(float var1) {
      class="kw">return (this.despawnRemainingSeconds -= var1) <= 0.0F;
   }

   class="kw">public void setDespawnRemainingSeconds(float var1) {
      this.despawnRemainingSeconds = var1;
   }

   class="kw">public void setDespawning(boolean var1) {
      this.isDespawning = var1;
   }

   class="kw">public void setPlayingDespawnAnim(boolean var1) {
      this.isPlayingDespawnAnim = var1;
   }

   class="kw">public boolean tickDespawnCheckRemainingSeconds(float var1) {
      class="kw">return (this.despawnCheckRemainingSeconds -= var1) <= 0.0F;
   }

   class="kw">public void setDespawnCheckRemainingSeconds(float var1) {
      this.despawnCheckRemainingSeconds = var1;
   }

   class="kw">public void setInitialModelScale(float var1) {
      this.initialModelScale = var1;
   }

   class="kw">public Vector3d getOldPosition() {
      class="kw">return this.oldPosition;
   }

   class="kw">public void playAnimation(@Nonnull Ref<EntityStore> var1, @Nonnull AnimationSlot var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) {
      this.playAnimation(var1, var2, var3, false, var4);
   }

   class="kw">public void playAnimation(
      @Nonnull Ref<EntityStore> var1, @Nonnull AnimationSlot var2, @Nullable String var3, boolean var4, @Nonnull ComponentAccessor<EntityStore> var5
   ) {
      Model var6 = null;
      ModelComponent var7 = var5.getComponent(var1, ModelComponent.getComponentType());
      if (var7 != null) {
         var6 = var7.getModel();
      }

      if (var2 != AnimationSlot.Action && var3 != null && var6 != null && !var6.getAnimationSetMap().containsKey(var3)) {
         ((HytaleLogger.Api)Entity.LOGGER.at(Level.WARNING).atMostEvery(1, TimeUnit.MINUTES))
            .log("Missing animation '%s' for Model '%s'", var3, var6.getModelAssetId());
      } else {
         ActiveAnimationComponent var8 = var5.getComponent(var1, ActiveAnimationComponent.getComponentType());
         if (var8 == null) {
            ((HytaleLogger.Api)Entity.LOGGER.at(Level.WARNING).atMostEvery(1, TimeUnit.MINUTES))
               .log("Missing active animation component for entity: %s", this.roleName);
         } else {
            String[] var9 = var8.getActiveAnimations();
            if (var4 || var2 == AnimationSlot.Action || !Objects.equals(var9[var2.ordinal()], var3)) {
               var9[var2.ordinal()] = var3;
               var8.setPlayingAnimation(var2, var3);
               AnimationUtils.playAnimation(var1, var2, var3, var5);
            }
         }
      }
   }

   class="kw">public void clearDamageData() {
      this.damageData.reset();
   }

   class="kw">public void setToDespawn() {
      this.isDespawning = true;
   }

   class="kw">public void setDespawnTime(float var1) {
      if (this.isDespawning) {
         this.despawnRemainingSeconds = var1;
      }
   }

   class="kw">public double getDespawnTime() {
      class="kw">return this.despawnRemainingSeconds;
   }

   class="kw">public DamageData getDamageData() {
      class="kw">return this.damageData;
   }

   class="kw">public boolean getCanCauseDamage(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      CombatSupport var3 = CombatSupport.get(this.reference, var2);
      class="kw">return var3.getCanCauseDamage(this.reference, var1, var2);
   }

   class="kw">public void onFlockSetState(@Nonnull Ref<EntityStore> var1, @Nonnull String var2, @Nullable String var3, @Nonnull ComponentAccessor<EntityStore> var4) {
      StateSupport var5 = StateSupport.get(var1, var4);
      var5.setState(var1, var2, var3, var4);
   }

   class="kw">public void onFlockSetTarget(@Nonnull String var1, @Nonnull Ref<EntityStore> var2) {
      this.role.setMarkedTarget(this.reference, this.reference.getStore(), var1, var2);
   }

   class="kw">public void saveLeashInformation(@Nonnull Vector3dc var1, @Nonnull Rotation3fc var2) {
      this.leashPoint.set(var1);
      this.leashHeading = var2.yaw();
      this.leashPitch = var2.pitch();
      this.saveLeashBlockType();
   }

   class="kw">public void saveLeashBlockType() {
   }

   class="kw">public boolean requiresLeashPosition() {
      class="kw">return this.role != null ? this.role.requiresLeashPosition() : this.hasLeashPosition;
   }

   class="kw">public Vector3d getLeashPoint() {
      class="kw">return this.leashPoint;
   }

   class="kw">public void setLeashPoint(@Nonnull Vector3d var1) {
      this.leashPoint.set(var1);
   }

   class="kw">public float getLeashHeading() {
      class="kw">return this.leashHeading;
   }

   class="kw">public void setLeashHeading(float var1) {
      this.leashHeading = var1;
   }

   class="kw">public float getLeashPitch() {
      class="kw">return this.leashPitch;
   }

   class="kw">public void setLeashPitch(float var1) {
      this.leashPitch = var1;
   }

   class="kw">public float getHoverPhase() {
      class="kw">return this.hoverPhase;
   }

   class="kw">public void setHoverPhase(float var1) {
      this.hoverPhase = var1;
   }

   class="kw">public double getHoverHeight() {
      class="kw">return this.hoverHeight;
   }

   class="kw">public void setHoverHeight(double var1) {
      this.hoverHeight = var1;
   }

   class="kw">public String getRoleName() {
      class="kw">return this.roleName;
   }

   class="kw">public void setRoleName(String var1) {
      this.roleName = var1;
   }

   class="kw">public int getRoleIndex() {
      class="kw">return this.roleIndex;
   }

   class="kw">public void setRoleIndex(int var1) {
      this.roleIndex = var1;
   }

   class="kw">public boolean shouldCollectSensorStats() {
      class="kw">return this.collectSensorStats;
   }

   class="kw">public void setCollectSensorStats(boolean var1) {
      this.collectSensorStats = var1;
   }

   class="kw">public void setRole(Role var1) {
      this.role = var1;
   }

   class="kw">public int getSpawnRoleIndex() {
      class="kw">return this.spawnRoleIndex != Integer.MIN_VALUE ? this.spawnRoleIndex : this.roleIndex;
   }

   class="kw">public void setSpawnRoleIndex(int var1) {
      if (var1 == this.roleIndex) {
         var1 = Integer.MIN_VALUE;
      }

      this.spawnRoleIndex = var1;
      if (var1 == Integer.MIN_VALUE) {
         this.spawnRoleName = null;
      } else {
         this.spawnRoleName = NPCPlugin.get().getName(var1);
      }
   }

   @Nullable
   class="kw">public String getActiveMotionControllerName() {
      class="kw">return this.activeMotionControllerName;
   }

   class="kw">public void setActiveMotionControllerName(@Nullable String var1) {
      this.activeMotionControllerName = var1;
   }

   class="kw">public void setEnvironment(int var1) {
      this.environmentIndex = var1;
   }

   class="kw">public int getEnvironment() {
      class="kw">return this.environmentIndex;
   }

   class="kw">public int getSpawnConfiguration() {
      class="kw">return this.spawnConfigurationIndex;
   }

   class="kw">public void setSpawnConfiguration(int var1) {
      if (var1 == Integer.MIN_VALUE) {
         this.spawnConfigurationIndex = Integer.MIN_VALUE;
         this.spawnConfigurationName = null;
      } else {
         String var2 = WorldNPCSpawn.getAssetMap().getAsset(var1).getId();
         if (var2 == null) {
            throw new IllegalArgumentException("setSpawnConfiguration: Cannot find spawn configuration name for index: " + var1);
         }

         this.spawnConfigurationIndex = var1;
         this.spawnConfigurationName = var2;
      }
   }

   class="kw">public boolean updateSpawnTrackingState(boolean var1) {
      boolean var2 = this.isSpawnTracked;
      this.isSpawnTracked = var1;
      class="kw">return var2;
   }

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

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

   class="kw">public EnumSet<RoleDebugFlags> getRoleDebugFlags() {
      DebugSupport var1 = DebugSupport.get(this.reference, this.reference.getStore());
      class="kw">return var1.getDebugFlags();
   }

   class="kw">public void setRoleDebugFlags(@Nonnull EnumSet<RoleDebugFlags> var1) {
      DebugSupport var2 = DebugSupport.get(this.reference, this.reference.getStore());
      var2.setDebugFlags(var1);
   }

   class="kw">public void setSpawnInstant(@Nonnull Instant var1) {
      this.spawnInstant = var1;
   }

   class="kw">public Instant getSpawnInstant() {
      class="kw">return this.spawnInstant;
   }

   @Deprecated(forRemoval = true)
   class="kw">public int getLegacyWorldgenId() {
      class="kw">return this.worldgenId;
   }

   @Nonnull
   class="kw">public PathManager getPathManager() {
      class="kw">return this.pathManager;
   }

   class="kw">public class="kw">static boolean setAppearance(@Nonnull Ref<EntityStore> var0, @Nonnull String var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      if (var1.isEmpty()) {
         throw new IllegalArgumentException("Appearance can't be changed to empty");
      } else {
         ModelComponent var3 = var2.getComponent(var0, ModelComponent.getComponentType());
         if (var3 == null) {
            class="kw">return false;
         } else {
            Model var4 = var3.getModel();
            if (var1.equals(var4.getModelAssetId())) {
               class="kw">return true;
            } else {
               NPCEntity var5 = var2.getComponent(var0, getComponentType());
               assert var5 != null;
               ModelAsset var6 = ModelAsset.getAssetMap().getAsset(var1);
               if (var6 == null) {
                  NPCPlugin.get().getLogger().at(Level.SEVERE).log("Role '%s': Cannot find model '%s'", var5.roleName, var1);
                  class="kw">return false;
               } else {
                  var5.setAppearance(var0, var6, var2);
                  class="kw">return true;
               }
            }
         }
      }
   }

   class="kw">public void setAppearance(@Nonnull Ref<EntityStore> var1, @Nonnull ModelAsset var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      Model var4 = Model.createScaledModel(var2, this.initialModelScale);
      var3.putComponent(var1, ModelComponent.getComponentType(), new ModelComponent(var4));
      this.role.updateMotionControllers(var1, var4, var4.getBoundingBox(), var3);
   }

   class="kw">public float getCurrentHorizontalSpeedMultiplier(@Nullable Ref<EntityStore> var1, @Nullable ComponentAccessor<EntityStore> var2) {
      if (this.cachedEntityHorizontalSpeedMultiplier != Float.MAX_VALUE) {
         class="kw">return this.cachedEntityHorizontalSpeedMultiplier;
      }

      this.cachedEntityHorizontalSpeedMultiplier = 1.0F;
      if (var1 != null && var2 != null) {
         EffectControllerComponent var3 = var2.getComponent(var1, EffectControllerComponent.getComponentType());
         if (var3 == null) {
            class="kw">return this.cachedEntityHorizontalSpeedMultiplier;
         }

         int[] var4 = var3.getActiveEffectIndexes();
         if (var4 == null) {
            class="kw">return this.cachedEntityHorizontalSpeedMultiplier;
         }

         for (int var8 : var4) {
            EntityEffect var9 = EntityEffect.getAssetMap().getAsset(var8);
            if (var9 != null) {
               ApplicationEffects var10 = var9.getApplicationEffects();
               if (var10 != null) {
                  float var11 = var10.getHorizontalSpeedMultiplier();
                  if (var11 >= 0.0F) {
                     this.cachedEntityHorizontalSpeedMultiplier *= var11;
                  }
               }
            }
         }

         class="kw">return this.cachedEntityHorizontalSpeedMultiplier;
      } else {
         class="kw">return this.cachedEntityHorizontalSpeedMultiplier;
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "NPCEntity{role="
         + this.role
         + ", spawnRoleIndex="
         + this.spawnRoleIndex
         + ", leashPoint="
         + this.leashPoint
         + ", leashHeading="
         + this.leashHeading
         + ", leashPitch="
         + this.leashPitch
         + ", environmentIndex="
         + this.environmentIndex
         + "} "
         + super.toString();
   }

   @Override
   class="kw">public String getNPCTypeId() {
      class="kw">return this.roleName;
   }

   @Override
   class="kw">public int getNPCTypeIndex() {
      class="kw">return this.roleIndex;
   }

   class="kw">public void addReservation(@Nonnull UUID var1) {
      this.reservedBy.add(var1);
   }

   class="kw">public void removeReservation(@Nonnull UUID var1) {
      this.reservedBy.remove(var1);
   }

   class="kw">public boolean isReserved() {
      class="kw">return !this.reservedBy.isEmpty();
   }

   class="kw">public boolean isReservedBy(@Nonnull UUID var1) {
      class="kw">return this.reservedBy.contains(var1);
   }
}