ActionTriggerSpawners class
Пакет: com.hypixel.hytale.server.npc.corecomponents.world
Файл: com/hypixel/hytale/server/npc/corecomponents/world/ActionTriggerSpawners.java
extends: ActionBase
Поля (12)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
ComponentType<EntityStore, SpawnMarkerEntity> |
SPAWN_MARKER_ENTITY_COMPONENT_TYPE |
|
SpawnMarkerEntity |
var10 |
|
Ref |
var12 |
|
SpawnMarkerEntity |
var13 |
|
TransformComponent |
var3 |
|
Vector3d |
var4 |
|
TransformComponent |
var5 |
|
Vector3d |
var6 |
|
List |
var7 |
|
SpawnMarkerEntity |
var7 |
|
boolean |
var8 |
|
Ref |
var9 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
|
for for(int var11 = 0; var11 < var7.size() |
abstract |
|
for for(int var8 = 0; var8 < this.triggerList.size() |
abstract |
|
for for(int var3 = 0; var3 < this.spawnedList.size() |
|
|
if if(this.count <= 0) |
|
|
if if(var12 != null) |
private |
void |
stampLineageAndTrackvoid stampLineageAndTrack(@Nonnull ExecutionSupport var1, @Nonnull Store<EntityStore> var2) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.corecomponents.world;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.ActionBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.world.builders.BuilderActionTriggerSpawners;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.spawning.SpawnLineage;
class="kw">import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class ActionTriggerSpawners class="kw">extends ActionBase {
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, SpawnMarkerEntity> SPAWN_MARKER_ENTITY_COMPONENT_TYPE = SpawnMarkerEntity.getComponentType();
class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
class="kw">protected class="kw">final String spawner;
class="kw">protected class="kw">final double range;
class="kw">protected class="kw">final double rangeSquared;
class="kw">protected class="kw">final int count;
class="kw">protected class="kw">final int markedTargetSlot;
class="kw">protected class="kw">final boolean rebindTarget;
@Nullable
class="kw">protected class="kw">final List<Ref<EntityStore>> triggerList;
class="kw">protected class="kw">final List<Ref<EntityStore>> spawnedList;
class="kw">protected Ref<EntityStore> parentRef;
class="kw">public ActionTriggerSpawners(@Nonnull BuilderActionTriggerSpawners var1, @Nonnull BuilderSupport var2) {
super(var1);
this.spawner = var1.getSpawner(var2);
this.range = var1.getRange(var2);
this.rangeSquared = this.range * this.range;
this.count = var1.getCount(var2);
this.triggerList = this.count > 0 ? new ReferenceArrayList(this.count) : null;
this.markedTargetSlot = var1.getMarkedTargetSlot(var2);
this.rebindTarget = var1.isRebindTarget(var2);
this.spawnedList = new ReferenceArrayList();
}
@Override
class="kw">public void registerWithSupport(@Nonnull ExecutionSupport var1) {
var1.getPositionCache().requireSpawnMarkerDistance(this.range);
}
@Override
class="kw">public boolean execute(
@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
) {
super.execute(var1, var2, var3, var4, var6);
this.parentRef = var1;
List var7 = var2.getPositionCache().getSpawnMarkerList();
if (this.count <= 0) {
for (int var11 = 0; var11 < var7.size(); var11++) {
Ref var12 = this.filterMarker(var7.get(var11), var6);
if (var12 != null) {
SpawnMarkerEntity var13 = var6.getComponent(var12, SPAWN_MARKER_ENTITY_COMPONENT_TYPE);
assert var13 != null;
var13.trigger(var12, this.spawnedList, var6);
}
}
this.stampLineageAndTrack(var2, var6);
class="kw">return true;
} else {
RandomExtra.reservoirSample(var7, (var0, var1x, var2x) -> var1x.filterMarker(var0, var2x), this.count, this.triggerList, this, var6);
for (int var8 = 0; var8 < this.triggerList.size(); var8++) {
Ref var9 = this.triggerList.get(var8);
SpawnMarkerEntity var10 = var6.getComponent(var9, SPAWN_MARKER_ENTITY_COMPONENT_TYPE);
assert var10 != null;
var10.trigger(var9, this.spawnedList, var6);
}
this.stampLineageAndTrack(var2, var6);
this.triggerList.clear();
class="kw">return true;
}
}
class="kw">private void stampLineageAndTrack(@Nonnull ExecutionSupport var1, @Nonnull Store<EntityStore> var2) {
for (int var3 = 0; var3 < this.spawnedList.size(); var3++) {
SpawnLineage.inherit(this.parentRef, this.spawnedList.get(var3), var2);
}
if (this.markedTargetSlot >= 0 && !this.spawnedList.isEmpty()) {
var1.getMarkedEntitySupport().setMarkedEntity(this.markedTargetSlot, this.spawnedList.getFirst(), this.rebindTarget, var2);
}
this.spawnedList.clear();
}
@Nullable
class="kw">protected Ref<EntityStore> filterMarker(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2) {
if (!var1.isValid()) {
class="kw">return null;
}
TransformComponent var3 = var2.getComponent(this.parentRef, TRANSFORM_COMPONENT_TYPE);
assert var3 != null;
Vector3d var4 = var3.getPosition();
TransformComponent var5 = var2.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
assert var5 != null;
Vector3d var6 = var5.getPosition();
SpawnMarkerEntity var7 = var2.getComponent(var1, SPAWN_MARKER_ENTITY_COMPONENT_TYPE);
boolean var8 = var7 != null
&& var7.isManualTrigger()
&& var7.getSpawnCount() <= 0
&& var4.distanceSquared(var6) <= this.rangeSquared
&& (this.spawner == null || this.spawner.equals(var7.getSpawnMarkerId()));
class="kw">return var8 ? var1 : null;
}
}