SpawnReferenceSystems class

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

Файл: com/hypixel/hytale/server/npc/systems/SpawnReferenceSystems.java

Поля (74)

МодификаторыТипИмя
private static final Set<Dependency<EntityStore>> DEPENDENCIES
private static final Set<Dependency<EntityStore>> DEPENDENCIES
private final ComponentType<EntityStore, LegacySpawnBeaconEntity> legacySpawnBeaconComponent
private final ComponentType<EntityStore, SpawnMarkerEntity> markerTypeComponentType
private final ComponentType<EntityStore, NPCEntity> npcComponentType
private final ComponentType<EntityStore, NPCEntity> npcComponentType
private final ComponentType<EntityStore, NPCEntity> npcEntityComponentType
private final ComponentType<EntityStore, NPCEntity> npcEntityComponentType
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
private final Query<EntityStore> query
return
return
return
return
return
return
private final ComponentType<EntityStore, SpawnMarkerEntity> spawnMarkerEntityComponentType
private final ComponentType<EntityStore, SpawnMarkerEntity> spawnMarkerEntityComponentType
private final ComponentType<EntityStore, SpawnBeaconReference> spawnReferenceComponentType
private final ComponentType<EntityStore, SpawnMarkerReference> spawnReferenceComponentType
private final ComponentType<EntityStore, SpawnMarkerReference> spawnReferenceComponentType
private final ComponentType<EntityStore, SpawnBeaconReference> spawnReferenceComponentType
private final ComponentType<EntityStore, SpawnMarkerReference> spawnReferenceComponentType
private final ComponentType<EntityStore, UUIDComponent> uuidComponentComponentType
private final ComponentType<EntityStore, UUIDComponent> uuidComponentComponentType
UUID var10
int var10
HytaleLogger.Api var10
int var11
var11
var11
HytaleLogger.Api var11
SpawnMarker var12
UUIDComponent var12
InvalidatablePersistentRef[] var13
UUID var13
int var14
Instant var21
var21
Duration var22
InvalidatablePersistentRef[] var23
StoredFlock var24
int var25
SpawnBeaconReference var5
SpawnBeaconReference var5
SpawnMarkerReference var5
SpawnMarkerReference var6
Ref var6
Ref var6
Ref var6
NPCEntity var6
NPCEntity var6
Ref var7
LegacySpawnBeaconEntity var7
LegacySpawnBeaconEntity var7
SpawnMarkerEntity var7
SpawnBeaconReference var7
SpawnMarkerReference var7
SpawnMarkerEntity var8
NPCEntity var8
NPCEntity var8
Ref var8
Ref var8
UUIDComponent var9
BeaconSpawnController var9
WorldGenId var9
HytaleLogger.Api var9
SpawnMarkerEntity var9
private final ComponentType<EntityStore, WorldGenId> worldGenIdComponentType
private final ResourceType<EntityStore, WorldTimeResource> worldTimeResourceResourceType
private final ResourceType<EntityStore, WorldTimeResource> worldTimeResourceResourceType

Методы (43)

МодификаторыВозвратСигнатура
public BeaconAddRemoveSystempublic BeaconAddRemoveSystem(@Nonnull ComponentType<EntityStore, SpawnBeaconReference> var1, @Nonnull ComponentType<EntityStore, LegacySpawnBeaconEntity> var2)
public MarkerAddRemoveSystempublic MarkerAddRemoveSystem(@Nonnull ComponentType<EntityStore, SpawnMarkerReference> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var2)
public MarkerDeathSystempublic MarkerDeathSystem(@Nonnull ComponentType<EntityStore, SpawnMarkerReference> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var2)
public TickingSpawnBeaconSystempublic TickingSpawnBeaconSystem(@Nonnull ComponentType<EntityStore, SpawnBeaconReference> var1)
public TickingSpawnMarkerSystempublic TickingSpawnMarkerSystem(@Nonnull ComponentType<EntityStore, SpawnMarkerReference> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var2)
static void disconnectFromMarkervoid disconnectFromMarker(@Nonnull Ref<EntityStore> var0, @Nonnull Store<EntityStore> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerReference> var2, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var3, @Nonnull ComponentType<EntityStore, UUIDComponent> var4, @Nonnull ResourceType<EntityStore, WorldTimeResource> var5)
for for(InvalidatablePersistentRef var18 : var13)
for for(InvalidatablePersistentRef var20 : var13)
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Set<Dependency<EntityStore>> getDependenciespublic Set<Dependency<EntityStore>> getDependencies()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
public Query<EntityStore> getQuerypublic Query<EntityStore> getQuery()
if if(var6 != null)
if if(var7 != null)
if if(var8 != null)
if if(var11 < 0)
if if(var14 == var13.length)
if if(var11 != var14)
if if(var22 != null)
if if(var24 != null)
if if(var6 == null)
if if(var5 == null)
if if(var6 == null)
if if(var7 == null)
if if(var6 == null)
if if(var8 != null)
if if(var8 != null)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public boolean isParallelpublic boolean isParallel(int var1, int var2)
public void onComponentAddedpublic void onComponentAdded(@Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityAddedpublic void onEntityAdded(@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
public void onEntityRemovepublic void onEntityRemove(@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4)
switch switch(var2)
switch switch(var2)
switch switch(var2)
switch switch(var2)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)
public void tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5)

Исходный код

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

class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.Archetype;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
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.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.dependency.Dependency;
class="kw">import com.hypixel.hytale.component.dependency.Order;
class="kw">import com.hypixel.hytale.component.dependency.SystemDependency;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.reference.InvalidatablePersistentRef;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.WorldGenId;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathSystems;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.flock.StoredFlock;
class="kw">import com.hypixel.hytale.server.npc.components.SpawnBeaconReference;
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.role.support.StateSupport;
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.beacons.LegacySpawnBeaconEntity;
class="kw">import com.hypixel.hytale.server.spawning.controllers.BeaconSpawnController;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import java.time.Duration;
class="kw">import java.time.Instant;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;

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

   class="kw">private class="kw">static void disconnectFromMarker(
      @Nonnull Ref<EntityStore> var0,
      @Nonnull Store<EntityStore> var1,
      @Nonnull ComponentType<EntityStore, SpawnMarkerReference> var2,
      @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var3,
      @Nonnull ComponentType<EntityStore, UUIDComponent> var4,
      @Nonnull ResourceType<EntityStore, WorldTimeResource> var5
   ) {
      SpawnMarkerReference var6 = var1.getComponent(var0, var2);
      if (var6 != null) {
         Ref var7 = var6.getReference().getEntity(var1);
         if (var7 != null) {
            SpawnMarkerEntity var8 = var1.getComponent(var7, var3);
            if (var8 != null) {
               UUIDComponent var9 = var1.getComponent(var0, var4);
               assert var9 != null;
               UUID var10 = var9.getUuid();
               int var11 = var8.decrementAndGetSpawnCount();
               if (var11 < 0) {
                  SpawningPlugin.get()
                     .getLogger()
                     .at(Level.WARNING)
                     .log("Marker %s spawn count went negative (%d) while disconnecting NPC %s", var7, var11, var10);
                  var11 = 0;
                  var8.setSpawnCount(0);
               }

               SpawnMarker var12 = var8.getCachedMarker();
               if (var12.getDeactivationDistance() > 0.0) {
                  InvalidatablePersistentRef[] var13 = var8.getNpcReferences();
                  int var14 = 0;

                  for (InvalidatablePersistentRef var18 : var13) {
                     if (!var10.equals(var18.getUuid())) {
                        var14++;
                     }
                  }

                  InvalidatablePersistentRef[] var23 = new InvalidatablePersistentRef[var14];
                  int var25 = 0;

                  for (InvalidatablePersistentRef var20 : var13) {
                     if (!var10.equals(var20.getUuid())) {
                        var23[var25++] = var20;
                     }
                  }

                  var8.setNpcReferences(var23);
                  if (var14 == var13.length) {
                     SpawningPlugin.get()
                        .getLogger()
                        .at(Level.WARNING)
                        .log(
                           "Marker %s disconnected NPC %s that was not present in marker references (spawnCount=%d, refs=%d)", var7, var10, var11, var13.length
                        );
                  }

                  if (var11 != var14) {
                     SpawningPlugin.get()
                        .getLogger()
                        .at(Level.WARNING)
                        .log("Marker %s spawn count/reference mismatch while disconnecting NPC %s (spawnCount=%d, refsAfter=%d)", var7, var10, var11, var14);
                     var11 = var14;
                     var8.setSpawnCount(var14);
                  }
               }

               if (var11 <= 0 && !var12.isRealtimeRespawn()) {
                  Instant var21 = var1.getResource(var5).getGameTime();
                  Duration var22 = var8.pollGameTimeRespawn();
                  if (var22 != null) {
                     var21 = var21.plus(var22);
                  }

                  var8.setSpawnAfter(var21);
                  var8.setNpcReferences(null);
                  StoredFlock var24 = var8.getStoredFlock();
                  if (var24 != null) {
                     var24.clear();
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class BeaconAddRemoveSystem class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnBeaconReference> spawnReferenceComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, LegacySpawnBeaconEntity> legacySpawnBeaconComponent;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> npcComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public BeaconAddRemoveSystem(
         @Nonnull ComponentType<EntityStore, SpawnBeaconReference> var1, @Nonnull ComponentType<EntityStore, LegacySpawnBeaconEntity> var2
      ) {
         this.spawnReferenceComponentType = var1;
         this.legacySpawnBeaconComponent = var2;
         this.npcComponentType = NPCEntity.getComponentType();
         this.query = Archetype.of(var1, this.npcComponentType);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         class="kw">switch (var2) {
            case LOAD:
               SpawnBeaconReference var5 = var3.getComponent(var1, this.spawnReferenceComponentType);
               assert var5 != null;
               Ref var6 = var5.getReference().getEntity(var3);
               if (var6 == null) {
                  class="kw">return;
               } else {
                  LegacySpawnBeaconEntity var7 = var3.getComponent(var6, this.legacySpawnBeaconComponent);
                  assert var7 != null;
                  NPCEntity var8 = var3.getComponent(var1, this.npcComponentType);
                  assert var8 != null;
                  var5.getReference().setEntity(var6, var3);
                  var5.refreshTimeoutCounter();
                  BeaconSpawnController var9 = var7.getSpawnController();
                  if (!var9.hasSlots()) {
                     var8.setToDespawn();
                     class="kw">return;
                  } else {
                     var9.notifySpawnedEntityExists(var6, var4);
                  }
               }
            case SPAWN:
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         class="kw">switch (var2) {
            case REMOVE:
            case BUILDER_TOOLS_UNDO:
               SpawnBeaconReference var5 = var3.getComponent(var1, this.spawnReferenceComponentType);
               if (var5 == null) {
                  class="kw">return;
               } else {
                  Ref var6 = var5.getReference().getEntity(var3);
                  if (var6 == null) {
                     class="kw">return;
                  } else {
                     LegacySpawnBeaconEntity var7 = var3.getComponent(var6, this.legacySpawnBeaconComponent);
                     if (var7 == null) {
                        class="kw">return;
                     } else {
                        var7.getSpawnController().notifyNPCRemoval(var1, var3);
                     }
                  }
               }
            case UNLOAD:
         }
      }
   }

   class="kw">public class="kw">static class MarkerAddRemoveSystem class="kw">extends RefSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerReference> spawnReferenceComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerEntity> spawnMarkerEntityComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> npcComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, WorldGenId> worldGenIdComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, UUIDComponent> uuidComponentComponentType;
      @Nonnull
      class="kw">private class="kw">final ResourceType<EntityStore, WorldTimeResource> worldTimeResourceResourceType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public MarkerAddRemoveSystem(@Nonnull ComponentType<EntityStore, SpawnMarkerReference> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var2) {
         this.spawnReferenceComponentType = var1;
         this.spawnMarkerEntityComponentType = var2;
         this.npcComponentType = NPCEntity.getComponentType();
         this.worldGenIdComponentType = WorldGenId.getComponentType();
         this.uuidComponentComponentType = UUIDComponent.getComponentType();
         this.worldTimeResourceResourceType = WorldTimeResource.getResourceType();
         this.query = Archetype.of(var1, this.npcComponentType, this.uuidComponentComponentType);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public void onEntityAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         class="kw">switch (var2) {
            case LOAD:
               SpawnMarkerReference var5 = var3.getComponent(var1, this.spawnReferenceComponentType);
               assert var5 != null;
               Ref var6 = var5.getReference().getEntity(var3);
               label38:
               if (var6 == null) {
                  class="kw">return;
               } else {
                  SpawnMarkerEntity var7 = var3.getComponent(var6, this.spawnMarkerEntityComponentType);
                  assert var7 != null;
                  NPCEntity var8 = var3.getComponent(var1, this.npcComponentType);
                  assert var8 != null;
                  var5.getReference().setEntity(var6, var3);
                  var5.refreshTimeoutCounter();
                  var7.refreshTimeout();
                  WorldGenId var9 = var4.getComponent(var6, this.worldGenIdComponentType);
                  int var10 = var9 != null ? var9.getWorldGenId() : 0;
                  var4.putComponent(var6, WorldGenId.getComponentType(), new WorldGenId(var10));
                  HytaleLogger.Api var11 = SpawningPlugin.get().getLogger().at(Level.FINE);
                  if (var11.isEnabled()) {
                     UUIDComponent var12 = var4.getComponent(var6, this.uuidComponentComponentType);
                     assert var12 != null;
                     UUID var13 = var12.getUuid();
                     var11.log("%s synced up with marker %s", var8.getRoleName(), var13);
                  }
               }
            case SPAWN:
         }
      }

      @Override
      class="kw">public void onEntityRemove(
         @Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         class="kw">switch (var2) {
            case REMOVE:
            case BUILDER_TOOLS_UNDO:
               SpawnReferenceSystems.disconnectFromMarker(
                  var1,
                  var3,
                  this.spawnReferenceComponentType,
                  this.spawnMarkerEntityComponentType,
                  this.uuidComponentComponentType,
                  this.worldTimeResourceResourceType
               );
            case UNLOAD:
         }
      }
   }

   class="kw">public class="kw">static class MarkerDeathSystem class="kw">extends DeathSystems.OnDeathSystem {
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerReference> spawnReferenceComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerEntity> spawnMarkerEntityComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, UUIDComponent> uuidComponentComponentType;
      @Nonnull
      class="kw">private class="kw">final ResourceType<EntityStore, WorldTimeResource> worldTimeResourceResourceType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public MarkerDeathSystem(@Nonnull ComponentType<EntityStore, SpawnMarkerReference> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var2) {
         this.spawnReferenceComponentType = var1;
         this.spawnMarkerEntityComponentType = var2;
         this.uuidComponentComponentType = UUIDComponent.getComponentType();
         this.worldTimeResourceResourceType = WorldTimeResource.getResourceType();
         this.query = Archetype.of(var1, this.uuidComponentComponentType);
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      class="kw">public void onComponentAdded(
         @Nonnull Ref<EntityStore> var1, @Nonnull DeathComponent var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
      ) {
         SpawnReferenceSystems.disconnectFromMarker(
            var1,
            var3,
            this.spawnReferenceComponentType,
            this.spawnMarkerEntityComponentType,
            this.uuidComponentComponentType,
            this.worldTimeResourceResourceType
         );
         var4.removeComponent(var1, this.spawnReferenceComponentType);
      }
   }

   class="kw">public class="kw">static class TickingSpawnBeaconSystem class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(
         new SystemDependency<>(Order.AFTER, NPCPreTickSystem.class), new SystemDependency<>(Order.BEFORE, DeathSystems.CorpseRemoval.class)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnBeaconReference> spawnReferenceComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> npcEntityComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public TickingSpawnBeaconSystem(@Nonnull ComponentType<EntityStore, SpawnBeaconReference> var1) {
         this.spawnReferenceComponentType = var1;
         this.npcEntityComponentType = NPCEntity.getComponentType();
         this.query = Archetype.of(var1, this.npcEntityComponentType);
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         NPCEntity var6 = var3.getComponent(var2, this.npcEntityComponentType);
         assert var6 != null;
         if (!var6.isDespawning() && !var6.isPlayingDespawnAnim()) {
            SpawnBeaconReference var7 = var3.getComponent(var2, this.spawnReferenceComponentType);
            assert var7 != null;
            if (var7.tickMarkerLostTimeoutCounter(var1)) {
               Ref var8 = var7.getReference().getEntity(var5);
               if (var8 != null) {
                  var7.refreshTimeoutCounter();
               } else if (StateSupport.get(var3.getReferenceTo(var2), var5).isInBusyState()) {
                  var7.refreshTimeoutCounter();
               } else {
                  var6.setToDespawn();
                  HytaleLogger.Api var9 = SpawningPlugin.get().getLogger().at(Level.WARNING);
                  if (var9.isEnabled()) {
                     var9.log("NPCEntity despawning due to lost marker: %s", var3.getReferenceTo(var2));
                  }
               }
            }
         }
      }
   }

   class="kw">public class="kw">static class TickingSpawnMarkerSystem class="kw">extends EntityTickingSystem<EntityStore> {
      @Nonnull
      class="kw">private class="kw">static class="kw">final Set<Dependency<EntityStore>> DEPENDENCIES = Set.of(
         new SystemDependency<>(Order.AFTER, NPCPreTickSystem.class), new SystemDependency<>(Order.BEFORE, DeathSystems.CorpseRemoval.class)
      );
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerReference> spawnReferenceComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, SpawnMarkerEntity> markerTypeComponentType;
      @Nonnull
      class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> npcEntityComponentType;
      @Nonnull
      class="kw">private class="kw">final Query<EntityStore> query;

      class="kw">public TickingSpawnMarkerSystem(
         @Nonnull ComponentType<EntityStore, SpawnMarkerReference> var1, @Nonnull ComponentType<EntityStore, SpawnMarkerEntity> var2
      ) {
         this.spawnReferenceComponentType = var1;
         this.markerTypeComponentType = var2;
         this.npcEntityComponentType = NPCEntity.getComponentType();
         this.query = Archetype.of(var1, this.npcEntityComponentType);
      }

      @Nonnull
      @Override
      class="kw">public Set<Dependency<EntityStore>> getDependencies() {
         class="kw">return DEPENDENCIES;
      }

      @Nonnull
      @Override
      class="kw">public Query<EntityStore> getQuery() {
         class="kw">return this.query;
      }

      @Override
      class="kw">public boolean isParallel(int var1, int var2) {
         class="kw">return EntityTickingSystem.maybeUseParallel(var1, var2);
      }

      @Override
      class="kw">public void tick(
         float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
      ) {
         NPCEntity var6 = var3.getComponent(var2, this.npcEntityComponentType);
         assert var6 != null;
         if (!var6.isDespawning() && !var6.isPlayingDespawnAnim()) {
            SpawnMarkerReference var7 = var3.getComponent(var2, this.spawnReferenceComponentType);
            assert var7 != null;
            if (var7.tickMarkerLostTimeoutCounter(var1)) {
               Ref var8 = var7.getReference().getEntity(var5);
               if (var8 != null) {
                  SpawnMarkerEntity var9 = var5.getComponent(var8, this.markerTypeComponentType);
                  assert var9 != null;
                  var7.refreshTimeoutCounter();
                  var9.refreshTimeout();
               } else if (StateSupport.get(var3.getReferenceTo(var2), var5).isInBusyState()) {
                  var7.refreshTimeoutCounter();
               } else {
                  var6.setToDespawn();
                  HytaleLogger.Api var10 = SpawningPlugin.get().getLogger().at(Level.WARNING);
                  if (var10.isEnabled()) {
                     var10.log("NPCEntity despawning due to lost marker: %s", var3.getReferenceTo(var2));
                  }
               }
            }
         }
      }
   }
}