SignalNearbyVolumesInteraction class

Пакет: com.hypixel.hytale.builtin.triggervolumes.interaction

Файл: com/hypixel/hytale/builtin/triggervolumes/interaction/SignalNearbyVolumesInteraction.java

extends: SimpleInstantInteraction

Поля (25)

МодификаторыТипИмя
final String[] EMPTY
return
return
return
TransformComponent var10
Ref var11
var11
UUID var12
var12
UUIDComponent var13
TriggerVolumeManager var16
Ref var17
Ref var18
List var19
String var3
CommandBuffer var4
double var4
Store var5
Vector4d var6
ArrayList var6
Vector3d var7
var7
var7
Ref var8
Ref var9

Методы (8)

МодификаторыВозвратСигнатура
if if(var4 != null)
if if(var6 != null)
if if(this.requireHitLocation)
if if(var10 == null)
if if(var16 != null)
if if(var13 != null)
if if(var3 != null)
if if(this.radius <= 0.0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.interaction;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.TriggerVolumesPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.SignalTag;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.TaggedVolumeEffectUtil;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.TriggerVolumeManager;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.VolumeEntry;
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.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
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.entity.UUIDComponent;
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.Interaction;
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 java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.UUID;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector4d;

class="kw">public class SignalNearbyVolumesInteraction class="kw">extends SimpleInstantInteraction {
   class="kw">private class="kw">static class="kw">final String[] EMPTY = new String[0];
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SignalNearbyVolumesInteraction> CODEC = BuilderCodec.builder(
         SignalNearbyVolumesInteraction.class, SignalNearbyVolumesInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("Sends a SignalReceived event to trigger volumes within a radius of the target point.")
      .<String>appendInherited(
         new KeyedCodec<>("MatchKey", Codec.STRING, false),
         (var0, var1) -> var0.matchKey = var1,
         var0 -> var0.matchKey,
         (var0, var1) -> var0.matchKey = var1.matchKey
      )
      .documentation("When set, only volumes carrying this tag are signalled. When absent, every volume in range is signalled.")
      .add()
      .appendInherited(
         new KeyedCodec<>("MatchValue", Codec.STRING, false),
         (var0, var1) -> var0.matchValue = var1,
         var0 -> var0.matchValue,
         (var0, var1) -> var0.matchValue = var1.matchValue
      )
      .add()
      .<Double>appendInherited(
         new KeyedCodec<>("Radius", Codec.DOUBLE, false), (var0, var1) -> var0.radius = var1, var0 -> var0.radius, (var0, var1) -> var0.radius = var1.radius
      )
      .documentation("Radius around the origin to search for volumes. 0 or less signals all volumes (matching the tag filter when set).")
      .add()
      .appendInherited(
         new KeyedCodec<>("SignalKeys", Codec.STRING_ARRAY, false),
         (var0, var1) -> var0.signalKeys = var1 != null ? var1 : EMPTY,
         var0 -> var0.signalKeys.length == 0 ? null : var0.signalKeys,
         (var0, var1) -> var0.signalKeys = var1.signalKeys
      )
      .add()
      .appendInherited(
         new KeyedCodec<>("SignalValues", Codec.STRING_ARRAY, false),
         (var0, var1) -> var0.signalValues = var1 != null ? var1 : EMPTY,
         var0 -> var0.signalValues.length == 0 ? null : var0.signalValues,
         (var0, var1) -> var0.signalValues = var1.signalValues
      )
      .add()
      .<Boolean>appendInherited(
         new KeyedCodec<>("RequireHitLocation", Codec.BOOLEAN, false),
         (var0, var1) -> var0.requireHitLocation = var1,
         var0 -> var0.requireHitLocation,
         (var0, var1) -> var0.requireHitLocation = var1.requireHitLocation
      )
      .documentation(
         "When true, the interaction does nothing if there is no hit location. When false (class="kw">default), it falls back to the instigating entity's position."
      )
      .add()
      .build();
   class="kw">private String matchKey;
   class="kw">private String matchValue;
   class="kw">private double radius = 50.0;
   @Nonnull
   class="kw">private String[] signalKeys = EMPTY;
   @Nonnull
   class="kw">private String[] signalValues = EMPTY;
   class="kw">private boolean requireHitLocation;

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

   @Override
   class="kw">public boolean needsRemoteSync() {
      class="kw">return false;
   }

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      CommandBuffer var4 = var2.getCommandBuffer();
      if (var4 != null) {
         Store var5 = var4.getStore();
         Vector4d var6 = var2.getMetaStore().getIfPresentMetaObject(Interaction.HIT_LOCATION);
         Vector3d var7;
         if (var6 != null) {
            var7 = new Vector3d(var6.x(), var6.y(), var6.z());
         } else {
            if (this.requireHitLocation) {
               class="kw">return;
            }

            Ref var8 = var2.getOwningEntity();
            Ref var9 = var8 != null ? var8 : var2.getEntity();
            if (!var9.isValid()) {
               class="kw">return;
            }

            TransformComponent var10 = var5.getComponent(var9, TransformComponent.getComponentType());
            if (var10 == null) {
               class="kw">return;
            }

            var7 = new Vector3d(var10.getPosition());
         }

         TriggerVolumeManager var16 = var5.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
         if (var16 != null) {
            Ref var17 = var2.getOwningEntity();
            Ref var18 = var17 != null && var17.isValid() ? var17 : var2.getEntity();
            Ref var11 = null;
            UUID var12 = TriggerVolumeManager.ENVIRONMENT_ACTOR_UUID;
            if (var18 != null && var18.isValid()) {
               UUIDComponent var13 = var5.getComponent(var18, UUIDComponent.getComponentType());
               if (var13 != null) {
                  var11 = var18;
                  var12 = var13.getUuid();
               }
            }

            List var19 = SignalTag.zip(this.signalKeys, this.signalValues);

            for (VolumeEntry var15 : this.collectTargets(var16, var7)) {
               var16.enqueueVolumeEvent(TriggerEventType.SIGNAL_RECEIVED, var11, var12, var15.getId(), var19, var7, null);
            }
         }
      }
   }

   @Nonnull
   class="kw">private List<VolumeEntry> collectTargets(@Nonnull TriggerVolumeManager var1, @Nonnull Vector3d var2) {
      String var3 = TaggedVolumeEffectUtil.composeTagFilter(this.matchKey, this.matchValue);
      if (var3 != null) {
         class="kw">return TaggedVolumeEffectUtil.collectTargets(var1, var3, this.radius, var2);
      }

      if (this.radius <= 0.0) {
         class="kw">return new ArrayList<>(var1.getVolumes());
      }

      double var4 = this.radius * this.radius;
      ArrayList var6 = new ArrayList<>();

      for (VolumeEntry var8 : var1.getVolumes()) {
         if (var8.getPosition().distanceSquared(var2) <= var4) {
            var6.add(var8);
         }
      }

      class="kw">return var6;
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "SignalNearbyVolumesInteraction{matchKey="
         + this.matchKey
         + ", matchValue="
         + this.matchValue
         + ", radius="
         + this.radius
         + "} "
         + super.toString();
   }
}