TickingSpawnBeaconSystem class
Пакет: com.hypixel.hytale.server.npc.systems
Файл: com/hypixel/hytale/server/npc/systems/SpawnReferenceSystems.java
extends: EntityTickingSystem<EntityStore>
Поля (8)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private static final Set<Dependency<EntityStore>> |
DEPENDENCIES |
|
private final ComponentType<EntityStore, NPCEntity> |
npcEntityComponentType |
|
private final Query<EntityStore> |
query |
|
private final ComponentType<EntityStore, SpawnBeaconReference> |
spawnReferenceComponentType |
|
NPCEntity |
var6 |
|
SpawnBeaconReference |
var7 |
|
Ref |
var8 |
|
HytaleLogger.Api |
var9 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
|
if if(var8 != null) |
|
public boolean |
isParallelpublic boolean isParallel(int var1, int var2) |
|
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));
}
}
}
}
}
}
}