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;
   }
}