SpawnBeaconSystems class
Пакет: com.hypixel.hytale.server.spawning.beacons
Файл: com/hypixel/hytale/server/spawning/beacons/SpawnBeaconSystems.java
Поля (143)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
private static final HytaleLogger |
LOGGER |
|
private static final HytaleLogger |
LOGGER |
|
private static final ThreadLocal<List<NPCEntity>> |
THREAD_LOCAL_VALIDATED_ENTITIES |
|
|
break |
|
private final ComponentType<EntityStore, LegacySpawnBeaconEntity> |
componentType |
|
private final ComponentType<EntityStore, LegacySpawnBeaconEntity> |
componentType |
|
private final ComponentType<EntityStore, SpawnBeacon> |
componentType |
|
private final ComponentType<EntityStore, LegacySpawnBeaconEntity> |
componentType |
|
private final ComponentType<EntityStore, InitialBeaconDelay> |
componentType |
|
private final ComponentType<EntityStore, FloodFillPositionSelector> |
componentType |
|
private final ComponentType<EntityStore, LegacySpawnBeaconEntity> |
componentType |
|
private final ComponentType<EntityStore, DeathComponent> |
deathComponentComponentType |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final Set<Dependency<EntityStore>> |
dependencies |
|
private final ResourceType<EntityStore, FloodFillEntryPoolProviderSimple> |
floodFillEntryPoolProviderSimpleResourceType |
|
private final ComponentType<EntityStore, FloodFillPositionSelector> |
floodFillPositionSelectorComponentType |
|
private final ComponentType<EntityStore, NPCEntity> |
npcComponentType |
|
private final ComponentType<EntityStore, NPCEntity> |
npcComponentType |
|
private final ComponentType<EntityStore, Player> |
playerComponentType |
|
private final ComponentType<EntityStore, PlayerRef> |
playerRefComponentType |
|
private final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> |
playerSpatialResource |
|
private final Query<EntityStore> |
query |
|
private final Query<EntityStore> |
query |
|
private final Query<EntityStore> |
query |
|
private final Query<EntityStore> |
query |
|
private final ComponentType<EntityStore, TransformComponent> |
transformComponentType |
|
private final ComponentType<EntityStore, TransformComponent> |
transformComponentType |
|
private final ComponentType<EntityStore, TransformComponent> |
transformComponentType |
|
private final ComponentType<EntityStore, UUIDComponent> |
uuidComponentType |
|
WorldTimeResource |
var10 |
|
List |
var10 |
|
int |
var10 |
|
BeaconSpawnWrapper |
var10 |
|
Ref |
var10 |
|
Ref |
var10 |
|
World |
var11 |
|
BeaconSpawnController |
var11 |
|
FloodFillPositionSelector |
var11 |
|
BeaconSpawnWrapper |
var12 |
|
List |
var12 |
|
ScaledXYResponseCurve |
var12 |
|
Reference2DoubleMap |
var13 |
|
int |
var13 |
|
boolean |
var14 |
|
int |
var14 |
|
double |
var15 |
|
InitialBeaconDelay |
var15 |
|
int[] |
var16 |
|
double |
var17 |
|
Instant |
var2 |
|
Ref |
var20 |
|
NPCEntity |
var21 |
|
Role |
var22 |
|
boolean |
var23 |
|
TransformComponent |
var24 |
|
Vector3d |
var25 |
|
double |
var26 |
|
TransformComponent |
var27 |
|
double |
var28 |
|
Vector3d |
var29 |
|
Instant |
var3 |
|
Ref |
var3 |
|
NPCEntity |
var31 |
|
Role |
var32 |
|
Ref |
var33 |
|
UUIDComponent |
var34 |
|
WorldTimeResource |
var35 |
|
int |
var36 |
|
BeaconSpawnWrapper |
var37 |
|
double |
var38 |
|
double |
var39 |
|
Ref |
var4 |
|
LegacySpawnBeaconEntity |
var4 |
|
Ref |
var4 |
|
SpatialResource |
var40 |
|
List |
var41 |
|
List |
var42 |
|
Ref |
var44 |
|
Ref |
var45 |
|
boolean |
var46 |
|
|
var46 |
|
PlayerRef |
var47 |
|
ScaledXYResponseCurve |
var49 |
|
NPCEntity |
var5 |
|
ScaledXYResponseCurve |
var5 |
|
SpawnBeacon |
var5 |
|
LegacySpawnBeaconEntity |
var5 |
|
Ref |
var5 |
|
TransformComponent |
var5 |
|
SpawningContext |
var5 |
|
HytaleLogger.Api |
var5 |
|
Ref |
var50 |
|
int |
var51 |
|
double |
var52 |
|
TransformComponent |
var53 |
|
int |
var54 |
|
Object2IntMap |
var55 |
|
LegacySpawnBeaconEntity |
var6 |
|
FloodFillPositionSelector |
var6 |
|
int[] |
var6 |
|
String |
var6 |
|
String |
var6 |
|
InitialBeaconDelay |
var6 |
|
FloodFillPositionSelector |
var6 |
|
LegacySpawnBeaconEntity |
var6 |
|
LegacySpawnBeaconEntity |
var6 |
|
Vector3d |
var6 |
|
Vector3d |
var6 |
|
TransformComponent |
var6 |
|
UUIDComponent |
var7 |
|
TransformComponent |
var7 |
|
List |
var7 |
|
int |
var7 |
|
int |
var7 |
|
TransformComponent |
var7 |
|
Ref |
var7 |
|
Rotation3f |
var7 |
|
Vector3d |
var7 |
|
BeaconSpawnController |
var8 |
|
Vector3d |
var8 |
|
int |
var8 |
|
|
var8 |
|
|
var8 |
|
BeaconSpawnWrapper |
var8 |
|
World |
var8 |
|
Vector3d |
var8 |
|
LegacySpawnBeaconEntity |
var8 |
|
int |
var8 |
|
LegacySpawnBeaconEntity |
var8 |
|
Instant |
var9 |
|
LegacySpawnBeaconEntity |
var9 |
|
int |
var9 |
|
|
var9 |
|
|
var9 |
|
FloodFillPositionSelector |
var9 |
|
BeaconSpawnController |
var9 |
|
FloodFillEntryPoolProviderSimple |
var9 |
|
String |
var9 |
|
Pair |
var9 |
|
Ref |
var9 |
Методы (61)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
CheckDespawnpublic CheckDespawn(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1, ComponentType<EntityStore, InitialBeaconDelay> var2) |
|
public |
ControllerTickpublic ControllerTick(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1,
ComponentType<EntityStore, FloodFillPositionSelector> var2,
ComponentType<EntityStore, InitialBeaconDelay> var3) |
|
public |
EntityAddedpublic EntityAdded(ComponentType<EntityStore, SpawnBeacon> var1) |
|
public |
LegacyEntityAddedpublic LegacyEntityAdded(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1) |
|
public |
LoadTimeDelaypublic LoadTimeDelay(ComponentType<EntityStore, InitialBeaconDelay> var1) |
|
public |
PositionSelectorUpdatepublic PositionSelectorUpdate(ComponentType<EntityStore, FloodFillPositionSelector> var1, ResourceType<EntityStore, FloodFillEntryPoolProviderSimple> var2) |
|
public |
SpawnJobTickpublic SpawnJobTick(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1, ComponentType<EntityStore, InitialBeaconDelay> var2) |
|
protected void |
createRandomSpawnJobsprotected void createRandomSpawnJobs(@Nonnull BeaconSpawnController var1, @Nonnull ComponentAccessor<EntityStore> var2) |
|
private void |
despawnAllSpawnsprivate void despawnAllSpawns(@Nonnull List<Ref<EntityStore>> var1, @Nonnull CommandBuffer<EntityStore> var2) |
abstract |
|
for for(int var3 = 0; var3 < var1.size() |
abstract |
|
for for(int var43 = 0; var43 < var41.size() |
abstract |
|
for for(int var48 = 0; var48 < var42.size() |
abstract |
|
for for(int var30 = 0; var30 < var10.size() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
public Set<Dependency<EntityStore>> |
getDependenciespublic Set<Dependency<EntityStore>> getDependencies() |
|
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() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
public Query<EntityStore> |
getQuerypublic Query<EntityStore> getQuery() |
|
|
if if(var22 != null) |
|
|
if if(var28 >= var17) |
|
|
if if(var46) |
|
|
if if(var32 != null) |
|
|
if if(var33 != null) |
|
|
if if(var34 != null) |
|
|
if if(var2 == null) |
|
|
if if(var5 != null) |
|
|
if if(var10 == 0) |
|
|
if if(var7 == Integer.MIN_VALUE) |
|
|
if if(var7 == Integer.MIN_VALUE) |
|
|
if if(var10 != null) |
|
|
if if(var2 == AddReason.LOAD) |
|
|
if if(var4) |
|
public boolean |
isParallelpublic boolean isParallel(int var1, int var2) |
|
public boolean |
isParallelpublic boolean isParallel(int var1, int var2) |
|
public boolean |
isParallelpublic boolean isParallel(int var1, int var2) |
|
public boolean |
isParallelpublic boolean isParallel(int var1, int var2) |
|
public boolean |
isParallelpublic boolean isParallel(int var1, int var2) |
|
private static boolean |
isReadyToRespawnprivate static boolean isReadyToRespawn(@Nonnull LegacySpawnBeaconEntity var0, @Nonnull WorldTimeResource var1) |
|
protected void |
onEndProbingprotected void onEndProbing(@Nonnull BeaconSpawnController var1, @Nonnull NPCBeaconSpawnJob var2, SpawnJobSystem.Result var3, @Nonnull ComponentAccessor<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) |
|
private void |
onSpawnprivate void onSpawn(@Nonnull Ref<EntityStore> var1, @Nonnull BeaconSpawnController var2, @Nonnull NPCBeaconSpawnJob var3, @Nonnull Store<EntityStore> var4) |
|
protected void |
onStartRunprotected void onStartRun(NPCBeaconSpawnJob var1) |
|
protected boolean |
pickSpawnPositionprotected boolean pickSpawnPosition(@Nonnull BeaconSpawnController var1, @Nonnull NPCBeaconSpawnJob var2, @Nonnull CommandBuffer<EntityStore> var3) |
|
private static void |
postSpawnprivate static void postSpawn(@Nonnull NPCEntity var0, @Nonnull Ref<EntityStore> var1, int var2, @Nullable String var3, boolean var4, @Nonnull Store<EntityStore> var5) |
|
protected void |
prepareSpawnJobGenerationprotected void prepareSpawnJobGeneration(@Nonnull BeaconSpawnController var1, @Nonnull ComponentAccessor<EntityStore> var2) |
|
protected SpawnJobSystem.Result |
spawnprotected SpawnJobSystem.Result spawn(World var1, @Nonnull BeaconSpawnController var2, @Nonnull NPCBeaconSpawnJob var3, @Nonnull CommandBuffer<EntityStore> var4) |
|
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) |
|
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) |
|
public void |
tickpublic void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) |
|
protected SpawnJobSystem.Result |
trySpawnprotected SpawnJobSystem.Result trySpawn(@Nonnull BeaconSpawnController var1, @Nonnull NPCBeaconSpawnJob var2, @Nonnull CommandBuffer<EntityStore> var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.spawning.beacons;
class="kw">import com.hypixel.hytale.component.AddReason;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
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.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.OrderPriority;
class="kw">import com.hypixel.hytale.component.dependency.RootDependency;
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.spatial.SpatialResource;
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.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.server.core.asset.type.responsecurve.ScaledXYResponseCurve;
class="kw">import com.hypixel.hytale.server.core.entity.Frozen;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Spectating;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.damage.DeathComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.system.PlayerSpatialSystem;
class="kw">import com.hypixel.hytale.server.core.modules.time.WorldTimeResource;
class="kw">import com.hypixel.hytale.server.core.prefab.PrefabCopyableComponent;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
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.npc.NPCPlugin;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.role.Role;
class="kw">import com.hypixel.hytale.server.npc.role.support.MarkedEntitySupport;
class="kw">import com.hypixel.hytale.server.npc.role.support.StateSupport;
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.spawns.config.BeaconNPCSpawn;
class="kw">import com.hypixel.hytale.server.spawning.controllers.BeaconSpawnController;
class="kw">import com.hypixel.hytale.server.spawning.controllers.SpawnControllerSystem;
class="kw">import com.hypixel.hytale.server.spawning.controllers.SpawnJobSystem;
class="kw">import com.hypixel.hytale.server.spawning.jobs.NPCBeaconSpawnJob;
class="kw">import com.hypixel.hytale.server.spawning.util.FloodFillEntryPoolProviderSimple;
class="kw">import com.hypixel.hytale.server.spawning.util.FloodFillPositionSelector;
class="kw">import com.hypixel.hytale.server.spawning.wrappers.BeaconSpawnWrapper;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Reference2DoubleMap;
class="kw">import java.time.Instant;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
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">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class SpawnBeaconSystems {
class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public class="kw">static class="kw">final double[] POSITION_CALCULATION_DELAY_RANGE = new double[]{0.0, 1.0};
class="kw">private class="kw">static class="kw">final double LOAD_TIME_SPAWN_DELAY = 15.0;
class="kw">public SpawnBeaconSystems() {
}
class="kw">public class="kw">static class CheckDespawn class="kw">extends EntityTickingSystem<EntityStore> {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">final ComponentType<EntityStore, LegacySpawnBeaconEntity> componentType;
@Nullable
class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> npcComponentType;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public CheckDespawn(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1, ComponentType<EntityStore, InitialBeaconDelay> var2) {
this.componentType = var1;
this.npcComponentType = NPCEntity.getComponentType();
this.query = Query.and(var1, UUIDComponent.getComponentType(), Query.not(var2));
}
@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
) {
LegacySpawnBeaconEntity var6 = var3.getComponent(var2, this.componentType);
assert var6 != null;
UUIDComponent var7 = var3.getComponent(var2, UUIDComponent.getComponentType());
assert var7 != null;
BeaconSpawnController var8 = var6.getSpawnController();
Instant var9 = var6.getDespawnSelfAfter();
WorldTimeResource var10 = var5.getResource(WorldTimeResource.getResourceType());
if (var9 != null && var10.getGameTime().isAfter(var9)) {
this.despawnAllSpawns(var8.getSpawnedEntities(), var5);
var5.removeEntity(var3.getReferenceTo(var2), RemoveReason.REMOVE);
} else {
World var11 = var4.getExternalData().getWorld();
BeaconSpawnWrapper var12 = var6.getSpawnWrapper();
if (var12.shouldDespawn(var11, var10)) {
LOGGER.at(Level.FINE).log("Removing spawn beacon %s due to matching despawn parameters", var7.getUuid());
this.despawnAllSpawns(var8.getSpawnedEntities(), var5);
var5.removeEntity(var3.getReferenceTo(var2), RemoveReason.REMOVE);
}
}
}
class="kw">private void despawnAllSpawns(@Nonnull List<Ref<EntityStore>> var1, @Nonnull CommandBuffer<EntityStore> var2) {
for (int var3 = 0; var3 < var1.size(); var3++) {
Ref var4 = var1.get(var3);
if (var4.isValid()) {
NPCEntity var5 = var2.getComponent(var4, this.npcComponentType);
if (var5 != null && !StateSupport.get(var4, var2).isInBusyState() && !var5.isDespawning()) {
var5.setToDespawn();
}
}
}
var1.clear();
}
}
class="kw">public class="kw">static class ControllerTick class="kw">extends SpawnControllerSystem<NPCBeaconSpawnJob, BeaconSpawnController> {
class="kw">private class="kw">static class="kw">final ThreadLocal<List<NPCEntity>> THREAD_LOCAL_VALIDATED_ENTITIES = ThreadLocal.withInitial(ArrayList::new);
class="kw">private class="kw">final ComponentType<EntityStore, LegacySpawnBeaconEntity> componentType;
class="kw">private class="kw">final ComponentType<EntityStore, FloodFillPositionSelector> floodFillPositionSelectorComponentType;
class="kw">private class="kw">final ComponentType<EntityStore, PlayerRef> playerRefComponentType;
@Nullable
class="kw">private class="kw">final ComponentType<EntityStore, NPCEntity> npcComponentType;
class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
class="kw">private class="kw">final ComponentType<EntityStore, DeathComponent> deathComponentComponentType;
class="kw">private class="kw">final ComponentType<EntityStore, UUIDComponent> uuidComponentType = UUIDComponent.getComponentType();
class="kw">private class="kw">final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> playerSpatialResource;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
@Nonnull
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies;
class="kw">public ControllerTick(
ComponentType<EntityStore, LegacySpawnBeaconEntity> var1,
ComponentType<EntityStore, FloodFillPositionSelector> var2,
ComponentType<EntityStore, InitialBeaconDelay> var3
) {
this.componentType = var1;
this.floodFillPositionSelectorComponentType = var2;
this.playerRefComponentType = PlayerRef.getComponentType();
this.npcComponentType = NPCEntity.getComponentType();
this.transformComponentType = TransformComponent.getComponentType();
this.deathComponentComponentType = DeathComponent.getComponentType();
this.playerSpatialResource = EntityModule.get().getPlayerSpatialResourceType();
this.query = Query.and(var1, var2, this.transformComponentType, Query.not(var3));
this.dependencies = Set.of(
new SystemDependency<>(Order.AFTER, PlayerSpatialSystem.class, OrderPriority.CLOSEST),
new SystemDependency<>(Order.AFTER, SpawnBeaconSystems.PositionSelectorUpdate.class)
);
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.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 false;
}
@Override
class="kw">public void tick(
float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
) {
FloodFillPositionSelector var6 = var3.getComponent(var2, this.floodFillPositionSelectorComponentType);
assert var6 != null;
if (!var6.shouldRebuildCache()) {
TransformComponent var7 = var3.getComponent(var2, this.transformComponentType);
assert var7 != null;
Vector3d var8 = var7.getPosition();
LegacySpawnBeaconEntity var9 = var3.getComponent(var2, this.componentType);
assert var9 != null;
var9.setSpawnAttempts(0);
List var10 = THREAD_LOCAL_VALIDATED_ENTITIES.get();
BeaconSpawnController var11 = var9.getSpawnController();
List var12 = var11.getSpawnedEntities();
if (!var12.isEmpty()) {
Reference2DoubleMap var13 = var11.getEntityTimeoutCounter();
boolean var14 = var11.isDespawnNPCsIfIdle();
double var15 = var11.getBeaconRadiusSquared();
double var17 = var11.getDespawnNPCAfterTimeout();
for (int var19 = var12.size() - 1; var19 >= 0; var19--) {
Ref var20 = var12.get(var19);
if (!var20.isValid()) {
var12.remove(var19);
} else {
NPCEntity var21 = var5.getComponent(var20, this.npcComponentType);
if (var21 != null && !var21.isDespawning()) {
Role var22 = var21.getRole();
if (var22 != null) {
boolean var23 = MarkedEntitySupport.get(var20, var5).hasMarkedEntityInSlot(var9.getSpawnWrapper().getSpawn().getTargetSlot());
TransformComponent var24 = var5.getComponent(var20, this.transformComponentType);
assert var24 != null;
Vector3d var25 = var24.getPosition();
double var26 = var25.distanceSquared(var8);
if ((var14 && !var23 || var26 > var15) && !StateSupport.get(var20, var5).isInBusyState()) {
double var28 = var13.mergeDouble(var20, var1, Double::sum);
if (var28 >= var17) {
var21.setToDespawn();
}
} else {
var13.put(var20, 0.0);
var10.add(var21);
}
}
}
}
}
}
WorldTimeResource var35 = var5.getResource(WorldTimeResource.getResourceType());
if (!isReadyToRespawn(var9, var35)) {
var10.clear();
} else {
int var36 = MathUtil.floor(var8.y());
BeaconSpawnWrapper var37 = var9.getSpawnWrapper();
int[] var16 = var37.getSpawn().getYRange();
double var38 = var36 + var16[0];
double var39 = var36 + var16[1];
SpatialResource var40 = var4.getResource(this.playerSpatialResource);
List var41 = SpatialResource.getThreadLocalReferenceList();
var40.getSpatialStructure().collect(var8, var37.getBeaconRadius(), var41);
List var42 = var11.getPlayersInRegion();
for (int var43 = 0; var43 < var41.size(); var43++) {
Ref var45 = var41.get(var43);
if (var45.isValid()) {
PlayerRef var47 = var5.getComponent(var45, this.playerRefComponentType);
assert var47 != null;
TransformComponent var27 = var5.getComponent(var45, this.transformComponentType);
assert var27 != null;
double var52 = var27.getPosition().y();
if (!(var52 < var38)
&& !(var52 > var39)
&& !var5.getArchetype(var45).contains(this.deathComponentComponentType)
&& !var5.getArchetype(var45).contains(Spectating.getComponentType())) {
var42.add(var47);
}
}
}
var9.setLastPlayerCount(var42.size());
Ref var44 = var3.getReferenceTo(var2);
if (var42.isEmpty()) {
LegacySpawnBeaconEntity.setToDespawnAfter(var44, var11.getDespawnBeaconAfterTimeout(), var5);
var10.clear();
} else {
boolean var46 = false;
for (int var48 = 0; var48 < var42.size(); var48++) {
Ref var50 = var42.get(var48).getReference();
TransformComponent var53 = var5.getComponent(var50, this.transformComponentType);
assert var53 != null;
Vector3d var29 = var53.getPosition();
if (var29.distanceSquared(var8) <= var11.getSpawnRadiusSquared()) {
var46 = true;
break;
}
}
if (var46) {
LegacySpawnBeaconEntity.clearDespawnTimer(var44, var5);
} else {
LegacySpawnBeaconEntity.setToDespawnAfter(var44, var11.getDespawnBeaconAfterTimeout(), var5);
}
ScaledXYResponseCurve var49 = var37.getSpawn().getMaxSpawnsScalingCurve();
int var51 = var11.getBaseMaxTotalSpawns();
int var54 = var49 != null ? var51 + MathUtil.floor(var49.computeY(var42.size()) + 0.25) : var51;
var11.setCurrentScaledMaxTotalSpawns(var54);
if (var11.getSpawnedEntities().size() >= var54) {
var42.clear();
var10.clear();
} else {
Object2IntMap var55 = var11.getEntitiesPerPlayer();
for (int var30 = 0; var30 < var10.size(); var30++) {
NPCEntity var31 = var10.get(var30);
Role var32 = var31.getRole();
if (var32 != null) {
Ref var33 = MarkedEntitySupport.get(var31.getReference(), var5)
.getMarkedEntityRef(var9.getSpawnWrapper().getSpawn().getTargetSlot());
if (var33 != null) {
UUIDComponent var34 = var5.getComponent(var33, this.uuidComponentType);
if (var34 != null) {
var55.mergeInt(var34.getUuid(), 1, Integer::sum);
}
}
}
}
var42.sort(var11.getThreatComparator());
var55.clear();
this.tickController(var11, var4);
var42.clear();
var11.setNextPlayerIndex(0);
var10.clear();
}
}
}
}
}
class="kw">private class="kw">static boolean isReadyToRespawn(@Nonnull LegacySpawnBeaconEntity var0, @Nonnull WorldTimeResource var1) {
Instant var2 = var0.getNextSpawnAfter();
if (var2 == null) {
class="kw">return true;
}
Instant var3 = var0.isNextSpawnAfterRealtime() ? Instant.now() : var1.getGameTime();
class="kw">return var3.isAfter(var2);
}
class="kw">protected void prepareSpawnJobGeneration(@Nonnull BeaconSpawnController var1, @Nonnull ComponentAccessor<EntityStore> var2) {
if (var1.isRoundStart()) {
Ref var3 = var1.getOwnerRef();
LegacySpawnBeaconEntity var4 = var2.getComponent(var3, LegacySpawnBeaconEntity.getComponentType());
assert var4 != null;
ScaledXYResponseCurve var5 = var4.getSpawnWrapper().getSpawn().getConcurrentSpawnsScalingCurve();
int[] var6 = var1.getBaseMaxConcurrentSpawns();
List var7 = var1.getPlayersInRegion();
int var8;
int var9;
if (var5 != null) {
var8 = var6[0] + MathUtil.floor(var5.computeY(var7.size()) + 0.25);
var9 = var6[1] + MathUtil.floor(var5.computeY(var7.size()) + 0.25);
} else {
var8 = var6[0];
var9 = var6[1];
}
var1.setCurrentScaledMaxConcurrentSpawns(RandomExtra.randomRange(var8, var9));
var1.setRoundStart(false);
}
int var10 = Math.max(0, var1.getCurrentScaledMaxConcurrentSpawns()) - var1.getSpawnsThisRound();
var1.setRemainingSpawns(var10);
if (var10 == 0) {
var1.onAllConcurrentSpawned(var2);
}
}
class="kw">protected void createRandomSpawnJobs(@Nonnull BeaconSpawnController var1, @Nonnull ComponentAccessor<EntityStore> var2) {
while (var1.getActiveJobCount() < var1.getMaxActiveJobs()) {
if (var1.createRandomSpawnJob(var2) == null) {
var1.addRoundSpawn();
}
}
}
}
class="kw">public class="kw">static class EntityAdded class="kw">extends RefSystem<EntityStore> {
class="kw">private class="kw">final ComponentType<EntityStore, SpawnBeacon> componentType;
class="kw">public EntityAdded(ComponentType<EntityStore, SpawnBeacon> var1) {
this.componentType = var1;
}
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.componentType;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
SpawnBeacon var5 = var3.getComponent(var1, this.componentType);
assert var5 != null;
String var6 = var5.getSpawnConfigId();
int var7 = BeaconNPCSpawn.getAssetMap().getIndex(var6);
if (var7 == Integer.MIN_VALUE) {
SpawnBeaconSystems.LOGGER.at(Level.SEVERE).log("Beacon %s removed due to missing spawn beacon type: %s", var1, var6);
var4.removeEntity(var1, RemoveReason.REMOVE);
} else {
BeaconSpawnWrapper var8 = SpawningPlugin.get().getBeaconSpawnWrapper(var7);
var5.setSpawnWrapper(var8);
FloodFillPositionSelector var9 = new FloodFillPositionSelector(var3.getExternalData().getWorld(), var8);
var9.setCalculatePositionsAfter(
RandomExtra.randomRange(SpawnBeaconSystems.POSITION_CALCULATION_DELAY_RANGE[0], SpawnBeaconSystems.POSITION_CALCULATION_DELAY_RANGE[1])
);
var4.putComponent(var1, FloodFillPositionSelector.getComponentType(), var9);
var4.ensureComponent(var1, PrefabCopyableComponent.getComponentType());
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
}
class="kw">public class="kw">static class LegacyEntityAdded class="kw">extends RefSystem<EntityStore> {
class="kw">private class="kw">final ComponentType<EntityStore, LegacySpawnBeaconEntity> componentType;
class="kw">public LegacyEntityAdded(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1) {
this.componentType = var1;
}
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.componentType;
}
@Override
class="kw">public void onEntityAdded(
@Nonnull Ref<EntityStore> var1, @Nonnull AddReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
LegacySpawnBeaconEntity var5 = var3.getComponent(var1, this.componentType);
assert var5 != null;
String var6 = var5.getSpawnConfigId();
int var7 = BeaconNPCSpawn.getAssetMap().getIndex(var6);
if (var7 == Integer.MIN_VALUE) {
SpawnBeaconSystems.LOGGER.at(Level.SEVERE).log("Beacon %s removed due to missing spawn beacon type: %s", var1, var6);
var4.removeEntity(var1, RemoveReason.REMOVE);
} else {
var5.setSpawnWrapper(SpawningPlugin.get().getBeaconSpawnWrapper(var7));
World var8 = var3.getExternalData().getWorld();
BeaconSpawnController var9 = new BeaconSpawnController(var8, var1);
var5.setSpawnController(var9);
BeaconSpawnWrapper var10 = var5.getSpawnWrapper();
if (var10 != null) {
var9.initialise(var10);
FloodFillPositionSelector var11 = new FloodFillPositionSelector(var8, var10);
var11.setCalculatePositionsAfter(
RandomExtra.randomRange(SpawnBeaconSystems.POSITION_CALCULATION_DELAY_RANGE[0], SpawnBeaconSystems.POSITION_CALCULATION_DELAY_RANGE[1])
);
var4.putComponent(var1, FloodFillPositionSelector.getComponentType(), var11);
ScaledXYResponseCurve var12 = var10.getSpawn().getMaxSpawnsScalingCurve();
int var13 = var9.getBaseMaxTotalSpawns();
int var14 = var12 != null ? var13 + MathUtil.floor(var12.computeY(var5.getLastPlayerCount()) + 0.25) : var13;
var9.setCurrentScaledMaxTotalSpawns(var14);
}
if (var2 == AddReason.LOAD) {
InitialBeaconDelay var15 = new InitialBeaconDelay();
var15.setLoadTimeSpawnDelay(15.0);
var4.putComponent(var1, InitialBeaconDelay.getComponentType(), var15);
}
var4.ensureComponent(var1, PrefabCopyableComponent.getComponentType());
}
}
@Override
class="kw">public void onEntityRemove(
@Nonnull Ref<EntityStore> var1, @Nonnull RemoveReason var2, @Nonnull Store<EntityStore> var3, @Nonnull CommandBuffer<EntityStore> var4
) {
}
}
class="kw">public class="kw">static class LoadTimeDelay class="kw">extends EntityTickingSystem<EntityStore> {
class="kw">private class="kw">final ComponentType<EntityStore, InitialBeaconDelay> componentType;
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = RootDependency.lastSet();
class="kw">public LoadTimeDelay(ComponentType<EntityStore, InitialBeaconDelay> var1) {
this.componentType = var1;
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.dependencies;
}
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.componentType;
}
@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
) {
InitialBeaconDelay var6 = var3.getComponent(var2, this.componentType);
assert var6 != null;
if (var6.tickLoadTimeSpawnDelay(var1)) {
var5.removeComponent(var3.getReferenceTo(var2), this.componentType);
}
}
}
class="kw">public class="kw">static class PositionSelectorUpdate class="kw">extends EntityTickingSystem<EntityStore> {
class="kw">private class="kw">final ComponentType<EntityStore, FloodFillPositionSelector> componentType;
class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
class="kw">private class="kw">final ResourceType<EntityStore, FloodFillEntryPoolProviderSimple> floodFillEntryPoolProviderSimpleResourceType;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, SpawnBeaconSystems.CheckDespawn.class));
class="kw">public PositionSelectorUpdate(
ComponentType<EntityStore, FloodFillPositionSelector> var1, ResourceType<EntityStore, FloodFillEntryPoolProviderSimple> var2
) {
this.componentType = var1;
this.transformComponentType = TransformComponent.getComponentType();
this.floodFillEntryPoolProviderSimpleResourceType = var2;
this.query = Query.and(var1, this.transformComponentType);
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.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 false;
}
@Override
class="kw">public void tick(
float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
) {
FloodFillPositionSelector var6 = var3.getComponent(var2, this.componentType);
assert var6 != null;
if (var6.shouldRebuildCache() && var6.tickCalculatePositionsAfter(var1)) {
var6.init();
TransformComponent var7 = var3.getComponent(var2, this.transformComponentType);
assert var7 != null;
Vector3d var8 = var7.getPosition();
FloodFillEntryPoolProviderSimple var9 = var4.getResource(this.floodFillEntryPoolProviderSimpleResourceType);
var6.buildPositionCache(var8, var9.getPool());
}
}
}
class="kw">public class="kw">static class SpawnJobTick class="kw">extends SpawnJobSystem<NPCBeaconSpawnJob, BeaconSpawnController> {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">final ComponentType<EntityStore, LegacySpawnBeaconEntity> componentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, Player> playerComponentType;
class="kw">private class="kw">final ComponentType<EntityStore, TransformComponent> transformComponentType;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">private class="kw">final Set<Dependency<EntityStore>> dependencies = Set.of(new SystemDependency<>(Order.AFTER, SpawnBeaconSystems.ControllerTick.class));
class="kw">public SpawnJobTick(ComponentType<EntityStore, LegacySpawnBeaconEntity> var1, ComponentType<EntityStore, InitialBeaconDelay> var2) {
this.componentType = var1;
this.playerComponentType = Player.getComponentType();
this.transformComponentType = TransformComponent.getComponentType();
this.query = Query.and(var1, Query.not(var2));
}
@Nonnull
@Override
class="kw">public Set<Dependency<EntityStore>> getDependencies() {
class="kw">return this.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 false;
}
@Override
class="kw">public void tick(
float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5
) {
LegacySpawnBeaconEntity var6 = var3.getComponent(var2, this.componentType);
assert var6 != null;
this.tickSpawnJobs(var6.getSpawnController(), var4, var5);
}
class="kw">protected void onStartRun(NPCBeaconSpawnJob var1) {
}
class="kw">protected void onEndProbing(
@Nonnull BeaconSpawnController var1, @Nonnull NPCBeaconSpawnJob var2, SpawnJobSystem.Result var3, @Nonnull ComponentAccessor<EntityStore> var4
) {
Ref var5 = var1.getOwnerRef();
if (var5.isValid()) {
LegacySpawnBeaconEntity var6 = var4.getComponent(var5, LegacySpawnBeaconEntity.getComponentType());
assert var6 != null;
if (var3 == SpawnJobSystem.Result.FAILED && var6.getSpawnAttempts() > 5) {
LegacySpawnBeaconEntity.prepareNextSpawnTimer(var5, var4);
var2.setBudgetUsed(var2.getColumnBudget());
} else if (var3 == SpawnJobSystem.Result.PERMANENT_FAILURE) {
var6.remove();
} else if (var3 != SpawnJobSystem.Result.SUCCESS) {
var6.notifyFailedSpawn();
}
}
}
class="kw">protected boolean pickSpawnPosition(@Nonnull BeaconSpawnController var1, @Nonnull NPCBeaconSpawnJob var2, @Nonnull CommandBuffer<EntityStore> var3) {
Ref var4 = var2.getPlayer();
if (var4 != null && var4.isValid()) {
TransformComponent var5 = var3.getComponent(var4, this.transformComponentType);
assert var5 != null;
Vector3d var6 = var5.getPosition();
Ref var7 = var1.getOwnerRef();
LegacySpawnBeaconEntity var8 = var3.getComponent(var7, LegacySpawnBeaconEntity.getComponentType());
assert var8 != null;
class="kw">return var8.prepareSpawnContext(var6, var2.getSpawnsThisRound(), var2.getRoleIndex(), var2.getSpawningContext(), var3);
} else {
class="kw">return false;
}
}
@Nonnull
class="kw">protected SpawnJobSystem.Result trySpawn(@Nonnull BeaconSpawnController var1, @Nonnull NPCBeaconSpawnJob var2, @Nonnull CommandBuffer<EntityStore> var3) {
class="kw">return this.spawn(var3.getExternalData().getWorld(), var1, var2, var3);
}
@Nonnull
class="kw">protected SpawnJobSystem.Result spawn(
World var1, @Nonnull BeaconSpawnController var2, @Nonnull NPCBeaconSpawnJob var3, @Nonnull CommandBuffer<EntityStore> var4
) {
SpawningContext var5 = var3.getSpawningContext();
Vector3d var6 = var5.newPosition();
Rotation3f var7 = var5.newRotation();
int var8 = var3.getRoleIndex();
String var9 = var5.activeMotionControllerType;
var4.run(
var8x -> {
try {
Pair var9 = NPCPlugin.get()
.spawnEntity(
var8x,
var8,
var6,
var7,
var5.getModel(),
(var3x, var4x, var5x) -> postSpawn(var3x, var4x, var8, var9, var2.isDebugSpawnFrozen(), var5x)
);
Ref var10 = (Ref<EntityStore>)var9.first();
FlockPlugin.trySpawnFlock(
var10,
(NPCEntity)var9.second(),
var8,
var6,
var7,
var3.getFlockSize(),
var3.getFlockAsset(),
null,
(var3x, var4x, var5x) -> postSpawn(var3x, var4x, var8, var9, var2.isDebugSpawnFrozen(), var5x),
var8x
);
this.onSpawn(var10, var2, var3, var8x);
this.endProbing(var2, var3, SpawnJobSystem.Result.SUCCESS, var8x);
} catch (RuntimeException var11) {
LOGGER.at(Level.WARNING).log("Spawn job %s: Failed to create %s: %s", var3.getJobId(), NPCPlugin.get().getName(var8), var11.getMessage());
this.endProbing(var2, var3, SpawnJobSystem.Result.FAILED, var8x);
}
var2.addIdleJob(var3);
}
);
class="kw">return SpawnJobSystem.Result.PENDING_SPAWN;
}
class="kw">private void onSpawn(
@Nonnull Ref<EntityStore> var1, @Nonnull BeaconSpawnController var2, @Nonnull NPCBeaconSpawnJob var3, @Nonnull Store<EntityStore> var4
) {
HytaleLogger.Api var5 = LOGGER.at(Level.FINE);
if (var5.isEnabled()) {
TransformComponent var6 = var4.getComponent(var1, this.transformComponentType);
assert var6 != null;
Vector3d var7 = var6.getPosition();
var5.log("Spawn job %s: Created %s at position %s", var3.getJobId(), NPCPlugin.get().getName(var3.getRoleIndex()), var7);
}
Ref var9 = var3.getPlayer();
assert var9 != null;
Ref var10 = var2.getOwnerRef();
LegacySpawnBeaconEntity var8 = var4.getComponent(var10, LegacySpawnBeaconEntity.getComponentType());
assert var8 != null;
var8.notifySpawn(var9, var1, var4);
}
class="kw">private class="kw">static void postSpawn(
@Nonnull NPCEntity var0, @Nonnull Ref<EntityStore> var1, int var2, @Nullable String var3, boolean var4, @Nonnull Store<EntityStore> var5
) {
var0.setSpawnRoleIndex(var2);
var0.setActiveMotionControllerName(var3);
if (var4) {
var5.ensureComponent(var1, Frozen.getComponentType());
}
}
}
}