TriggerSpawnMarkersInteraction class

Пакет: com.hypixel.hytale.server.spawning.interactions

Файл: com/hypixel/hytale/server/spawning/interactions/TriggerSpawnMarkersInteraction.java

extends: SimpleInstantInteraction

Поля (15)

МодификаторыТипИмя
final BuilderCodec<TriggerSpawnMarkersInteraction> CODEC
Ref var11
SpawnMarkerEntity var12
Ref var14
SpawnMarkerEntity var15
CommandBuffer var4
TransformComponent var4
Ref var5
Vector3d var5
Vector3d var6
SpawnMarkerEntity var6
SpatialResource var7
boolean var7
ReferenceArrayList var8
ReferenceArrayList var9

Методы (5)

МодификаторыВозвратСигнатура
protected Ref<EntityStore> filterMarkerRef<EntityStore> filterMarker(@Nonnull Ref<EntityStore> var1, @Nonnull Vector3d var2, @Nonnull CommandBuffer<EntityStore> var3)
abstract for for(int var13 = 0; var13 < var8.size()
abstract for for(int var10 = 0; var10 < var9.size()
if if(this.count == 0)
if if(var14 != null)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.math.random.RandomExtra;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
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.spawnmarkers.SpawnMarkerEntity;
class="kw">import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;

class="kw">public class TriggerSpawnMarkersInteraction class="kw">extends SimpleInstantInteraction {
   class="kw">public class="kw">static class="kw">final BuilderCodec<TriggerSpawnMarkersInteraction> CODEC = BuilderCodec.builder(
         TriggerSpawnMarkersInteraction.class, TriggerSpawnMarkersInteraction::new, SimpleInstantInteraction.CODEC
      )
      .appendInherited(
         new KeyedCodec<>("MarkerType", Codec.STRING),
         (var0, var1) -> var0.markerType = var1,
         var0 -> var0.markerType,
         (var0, var1) -> var0.markerType = var1.markerType
      )
      .addValidator(SpawnMarker.VALIDATOR_CACHE.getValidator())
      .documentation("The manual spawn marker type to trigger. If omitted, will trigger all manual spawners.")
      .add()
      .<Double>appendInherited(
         new KeyedCodec<>("Range", Codec.DOUBLE), (var0, var1) -> var0.range = var1, var0 -> var0.range, (var0, var1) -> var0.range = var1.range
      )
      .addValidator(Validators.greaterThan(0.0))
      .documentation("Range within which to trigger spawn markers.")
      .add()
      .<Integer>appendInherited(
         new KeyedCodec<>("Count", Codec.INTEGER), (var0, var1) -> var0.count = var1, var0 -> var0.count, (var0, var1) -> var0.count = var1.count
      )
      .addValidator(Validators.greaterThanOrEqual(0))
      .documentation("Max number of spawn markers to activate. Set to 0 to activate all spawn markers.")
      .add()
      .afterDecode(var0 -> var0.rangeSquared = var0.range * var0.range)
      .build();
   class="kw">private String markerType;
   class="kw">private double range = 10.0;
   class="kw">private double rangeSquared;
   class="kw">private int count;

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

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      CommandBuffer var4 = var2.getCommandBuffer();
      Ref var5 = var2.getEntity();
      Vector3d var6 = var4.getComponent(var5, TransformComponent.getComponentType()).getPosition();
      SpatialResource var7 = var4.getResource(SpawningPlugin.get().getSpawnMarkerSpatialResource());
      ReferenceArrayList var8 = new ReferenceArrayList();
      var7.getSpatialStructure().collect(var6, (int)this.range + 1, var8);
      if (this.count == 0) {
         for (int var13 = 0; var13 < var8.size(); var13++) {
            Ref var14 = this.filterMarker((Ref<EntityStore>)var8.get(var13), var6, var4);
            if (var14 != null) {
               SpawnMarkerEntity var15 = var4.getComponent(var14, SpawnMarkerEntity.getComponentType());
               assert var15 != null;
               var4.run(var2x -> var15.trigger(var14, null, var2x));
            }
         }
      } else {
         ReferenceArrayList var9 = new ReferenceArrayList();
         RandomExtra.reservoirSample(var8, (var1x, var2x, var3x) -> var2x.filterMarker(var1x, var6, var3x), this.count, var9, this, var4);

         for (int var10 = 0; var10 < var9.size(); var10++) {
            Ref var11 = (Ref<EntityStore>)var9.get(var10);
            SpawnMarkerEntity var12 = var4.getComponent(var11, SpawnMarkerEntity.getComponentType());
            assert var12 != null;
            var4.run(var2x -> var12.trigger(var11, null, var2x));
         }
      }
   }

   class="kw">protected Ref<EntityStore> filterMarker(@Nonnull Ref<EntityStore> var1, @Nonnull Vector3d var2, @Nonnull CommandBuffer<EntityStore> var3) {
      if (!var1.isValid()) {
         class="kw">return null;
      }

      TransformComponent var4 = var3.getComponent(var1, TransformComponent.getComponentType());
      assert var4 != null;
      Vector3d var5 = var4.getPosition();
      SpawnMarkerEntity var6 = var3.getComponent(var1, SpawnMarkerEntity.getComponentType());
      boolean var7 = var6 != null
         && var6.isManualTrigger()
         && var2.distanceSquared(var5) <= this.rangeSquared
         && (this.markerType == null || this.markerType.equals(var6.getSpawnMarkerId()));
      class="kw">return var7 ? var1 : null;
   }
}