SpawnTriggerVolumeInteraction class

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

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

extends: SimpleInstantInteraction

Поля (27)

МодификаторыТипИмя
return
return
return
TransformComponent var10
TriggerVolumeManager var11
String var12
VolumeEntry var13
TriggerEffectAsset.VolumeSettings var14
TimeResource var15
Ref var16
Ref var17
var17
UUID var18
var18
UUIDComponent var19
AssetStore var20
TriggerEffectAsset var21
World var22
Ref var23
CommandBuffer var4
Store var5
Vector4d 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(var21 == null)
if if(var14 != null)
if if(this.lifetimeS > 0.0F)
if if(var19 != null)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
class="kw">import com.hypixel.hytale.assetstore.AssetStore;
class="kw">import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.TriggerVolumesPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.asset.TriggerEffectAsset;
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.builtin.triggervolumes.shape.TriggerVolumeShape;
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.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
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.modules.time.TimeResource;
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 it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.time.Duration;
class="kw">import java.util.Arrays;
class="kw">import java.util.EnumSet;
class="kw">import java.util.Locale;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector4d;

class="kw">public class SpawnTriggerVolumeInteraction class="kw">extends SimpleInstantInteraction {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<SpawnTriggerVolumeInteraction> CODEC = BuilderCodec.builder(
         SpawnTriggerVolumeInteraction.class, SpawnTriggerVolumeInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("Spawns a trigger volume at the hit location, falling back to the instigator's position when there is no hit.")
      .<String>appendInherited(
         new KeyedCodec<>("EffectAsset", Codec.STRING),
         (var0, var1) -> var0.effectAsset = var1,
         var0 -> var0.effectAsset,
         (var0, var1) -> var0.effectAsset = var1.effectAsset
      )
      .documentation("The TriggerVolumes/Effects asset id whose conditions and effects the spawned volume runs.")
      .addValidator(Validators.nonNull())
      .add()
      .<TriggerVolumeShape>appendInherited(
         new KeyedCodec<>("Shape", TriggerVolumeShape.CODEC), (var0, var1) -> var0.shape = var1, var0 -> var0.shape, (var0, var1) -> var0.shape = var1.shape
      )
      .documentation("The shape of the spawned volume, relative to the hit location.")
      .addValidator(Validators.nonNull())
      .add()
      .<Float>appendInherited(
         new KeyedCodec<>("LifetimeS", Codec.FLOAT, false),
         (var0, var1) -> var0.lifetimeS = var1,
         var0 -> var0.lifetimeS,
         (var0, var1) -> var0.lifetimeS = var1.lifetimeS
      )
      .documentation("Seconds before the spawned volume auto-expires. 0 or less means it persists until destroyed by an effect.")
      .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 effectAsset;
   class="kw">private TriggerVolumeShape shape;
   class="kw">private float lifetimeS;
   class="kw">private boolean requireHitLocation;

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

   @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());
         }

         AssetStore var20 = AssetRegistry.getAssetStore(TriggerEffectAsset.class);
         TriggerEffectAsset var21 = var20 != null ? (TriggerEffectAsset)((DefaultAssetMap)var20.getAssetMap()).getAsset(this.effectAsset) : null;
         if (var21 == null) {
            ((HytaleLogger.Api)LOGGER.at(Level.WARNING).atMostEvery(5, TimeUnit.MINUTES))
               .log("SpawnTriggerVolume references missing effect asset '%s'", this.effectAsset);
         } else {
            World var22 = var4.getExternalData().getWorld();
            TriggerVolumeManager var11 = var5.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
            String var12 = var11.generateUniqueVolumeId();
            VolumeEntry var13 = new VolumeEntry(
               var12,
               var22.getName().toLowerCase(Locale.ROOT),
               var7,
               this.shape.copy(),
               new ObjectArrayList(Arrays.asList(var21.getEffects())),
               EnumSet.copyOf(var21.getTargetTypes()),
               true
            );
            var13.setEffectAssetRef(this.effectAsset);
            var13.setConditionTiming(var21.getConditionTiming());
            var13.getConditions().addAll(Arrays.asList(var21.getConditions()));
            var13.getRejectionEffects().addAll(Arrays.asList(var21.getRejectionEffects()));
            TriggerEffectAsset.VolumeSettings var14 = var21.getVolumeSettings();
            if (var14 != null) {
               var13.setProjectileSource(var14.projectileSource());
               var13.setRejectionDelayMode(var14.rejectionDelayMode());
               var13.setCooldown(var14.cooldown());
               var13.setCooldownMode(var14.cooldownMode());
               var13.setActivationDelay(var14.activationDelay());
               var13.setKeepLoaded(var14.keepLoaded());
               var13.setRotateEffectsOnPaste(var14.rotateEffectsOnPaste());
               var13.setCancelDelayedEffectsOnExit(var14.cancelDelayedOnExit());
               var13.setTags(var14.tags());
            }

            if (this.lifetimeS > 0.0F) {
               TimeResource var15 = var5.getResource(TimeResource.getResourceType());
               var13.setExpiresAt(var15.getNow().plus(Duration.ofMillis((long)(this.lifetimeS * 1000.0F))));
            }

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

            var11.enqueueVolumeCreateEvent(var13, var17, var18);
         }
      }
   }

   @Override
   class="kw">protected void simulateFirstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "SpawnTriggerVolumeInteraction{effectAsset="
         + this.effectAsset
         + ", lifetime="
         + this.lifetimeS
         + ", requireHitLocation="
         + this.requireHitLocation
         + "} "
         + super.toString();
   }
}