PlayAnimationEffect class

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

Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/PlayAnimationEffect.java

extends: TriggerEffect

Поля (27)

МодификаторыТипИмя
final String APPLY_ON_PLAYER
TRIGGERING_ENTITY, NPCS_IN_VOLUME
return
Store var2
Store var2
List var3
UUIDComponent var3
NPCEntity var3
boolean var3
NPCEntity var3
Store var3
Ref var4
String var4
NPCEntity var4
UUIDComponent var4
NPCEntity var4
boolean var5
ArrayList var5
ActiveAnimationComponent var5
TriggerVolumeManager var5
ActiveAnimationComponent var5
Ref var6
UUIDComponent var6
AnimationSlot var6
String var7
String var8
DelayedEffectScheduler var9

Методы (21)

МодификаторыВозвратСигнатура
Target Target()
static boolean containsEntityboolean containsEntity(@Nonnull Store<EntityStore> var0, @Nonnull List<Ref<EntityStore>> var1, @Nonnull Ref<EntityStore> var2)
for for(Ref var5 : var1)
if if(this.stop)
if if(this.target == PlayAnimationEffect.Target.TRIGGERING_ENTITY)
if if(var3 == null)
if if(var3 == null)
if if(var4 != null)
if if(var3)
if if(var3 != null)
if if(var4 != null)
if if(var5 != null)
if if(var4 != null)
private boolean includesNpcsboolean includesNpcs()
private boolean includesPlayersboolean includesPlayers()
private boolean isEligibleTriggerTargetboolean isEligibleTriggerTarget(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2)
private boolean matchesApplyOnboolean matchesApplyOn(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2)
private boolean playOnboolean playOn(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2)
private void scheduleStopvoid scheduleStop(@Nonnull TriggerContext var1, @Nonnull Ref<EntityStore> var2)
static void stopAnimationIfMatchingvoid stopAnimationIfMatching(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull AnimationSlot var2, @Nullable String var3)
private void stopOnvoid stopOn(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.triggervolumes.TriggerVolumesPlugin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEffect;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerVolumeEntityQuery;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.manager.TriggerVolumeManager;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.system.DelayedEffectScheduler;
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.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.protocol.AnimationSlot;
class="kw">import com.hypixel.hytale.server.core.entity.AnimationUtils;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.ActiveAnimationComponent;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class PlayAnimationEffect class="kw">extends TriggerEffect {
   class="kw">public class="kw">static class="kw">final String APPLY_ON_PLAYER = "Player";
   class="kw">public class="kw">static class="kw">final String APPLY_ON_EVERYONE = "Everyone";
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<PlayAnimationEffect> CODEC = BuilderCodec.builder(PlayAnimationEffect.class, PlayAnimationEffect::new, BASE_CODEC)
      .append(new KeyedCodec<>("NpcType", Codec.STRING, false), (var0, var1) -> var0.npcType = var1 == null ? "" : var1, var0 -> var0.npcType)
      .add()
      .append(new KeyedCodec<>("Animation", Codec.STRING, false), (var0, var1) -> var0.animation = var1, var0 -> var0.animation)
      .add()
      .append(new KeyedCodec<>("Target", new EnumCodec<>(PlayAnimationEffect.Target.class), false), (var0, var1) -> var0.target = var1, var0 -> var0.target)
      .add()
      .append(new KeyedCodec<>("Duration", Codec.FLOAT, false), (var0, var1) -> var0.duration = var1, var0 -> var0.duration)
      .add()
      .append(new KeyedCodec<>("Stop", Codec.BOOLEAN, false), (var0, var1) -> var0.stop = var1, var0 -> var0.stop)
      .add()
      .build();
   @Nullable
   class="kw">private String animation;
   @Nonnull
   class="kw">private class="kw">static class="kw">final AnimationSlot SLOT = AnimationSlot.ServerAction;
   @Nonnull
   class="kw">private PlayAnimationEffect.Target target = PlayAnimationEffect.Target.NPCS_IN_VOLUME;
   @Nonnull
   class="kw">private String npcType = "";
   class="kw">private float duration;
   class="kw">private boolean stop;

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

   @Override
   class="kw">public void execute(@Nonnull TriggerContext var1) {
      Store var2 = var1.getStore();
      if (this.stop || this.animation != null && !this.animation.isBlank()) {
         for (Ref var4 : this.resolveTargets(var1)) {
            if (this.stop) {
               this.stopOn(var2, var4);
            } else {
               boolean var5 = this.playOn(var2, var4);
               if (var5 && this.duration > 0.0F && Float.isFinite(this.duration)) {
                  this.scheduleStop(var1, var4);
               }
            }
         }
      }
   }

   @Nonnull
   class="kw">public String getNpcType() {
      class="kw">return this.npcType;
   }

   @Nullable
   class="kw">public String getAnimation() {
      class="kw">return this.animation;
   }

   @Nonnull
   class="kw">private List<Ref<EntityStore>> resolveTargets(@Nonnull TriggerContext var1) {
      Store var2 = var1.getStore();
      if (this.target == PlayAnimationEffect.Target.TRIGGERING_ENTITY) {
         Ref var6 = var1.getEntityRef();
         class="kw">return this.matchesApplyOn(var2, var6) ? List.of(var6) : List.of();
      } else {
         List var3 = TriggerVolumeEntityQuery.collectTargets(var2, var1.getSpatialVolumes(), this.includesNpcs(), this.includesPlayers(), this.roleFilter());
         Ref var4 = var1.getEntityRef();
         if (this.isEligibleTriggerTarget(var2, var4) && !containsEntity(var2, var3, var4)) {
            ArrayList var5 = new ArrayList<>(var3.size() + 1);
            var5.addAll(var3);
            var5.add(var4);
            class="kw">return var5;
         } else {
            class="kw">return var3;
         }
      }
   }

   class="kw">private boolean isEligibleTriggerTarget(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      if (!this.matchesApplyOn(var1, var2)) {
         class="kw">return false;
      } else if (var1.getComponent(var2, NPCEntity.getComponentType()) != null) {
         class="kw">return this.includesNpcs();
      } else {
         class="kw">return var1.getComponent(var2, PlayerRef.getComponentType()) != null ? this.includesPlayers() : false;
      }
   }

   class="kw">private class="kw">static boolean containsEntity(@Nonnull Store<EntityStore> var0, @Nonnull List<Ref<EntityStore>> var1, @Nonnull Ref<EntityStore> var2) {
      UUIDComponent var3 = var0.getComponent(var2, UUIDComponent.getComponentType());
      if (var3 == null) {
         class="kw">return var1.contains(var2);
      }

      for (Ref var5 : var1) {
         UUIDComponent var6 = var0.getComponent(var5, UUIDComponent.getComponentType());
         if (var6 != null && var6.getUuid().equals(var3.getUuid())) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private boolean includesPlayers() {
      class="kw">return "Player".equals(this.npcType) || "Everyone".equals(this.npcType);
   }

   class="kw">private boolean includesNpcs() {
      class="kw">return !"Player".equals(this.npcType);
   }

   @Nonnull
   class="kw">private String roleFilter() {
      class="kw">return !this.npcType.isBlank() && !"Player".equals(this.npcType) && !"Everyone".equals(this.npcType) ? this.npcType : "";
   }

   class="kw">private boolean matchesApplyOn(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      if (!var2.isValid()) {
         class="kw">return false;
      }

      if (this.npcType.isBlank() || "Everyone".equals(this.npcType)) {
         class="kw">return true;
      }

      if ("Player".equals(this.npcType)) {
         class="kw">return var1.getComponent(var2, PlayerRef.getComponentType()) != null;
      }

      NPCEntity var3 = var1.getComponent(var2, NPCEntity.getComponentType());
      if (var3 == null) {
         class="kw">return false;
      }

      String var4 = var3.getRoleName();
      class="kw">return var4 != null && var4.equalsIgnoreCase(this.npcType);
   }

   class="kw">private boolean playOn(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      if (var2.isValid() && this.animation != null) {
         boolean var3 = this.getEventType() == TriggerEventType.TICK;
         NPCEntity var4 = var1.getComponent(var2, NPCEntity.getComponentType());
         if (var4 != null) {
            if (var3) {
               ActiveAnimationComponent var5 = var1.getComponent(var2, ActiveAnimationComponent.getComponentType());
               if (var5 != null && this.animation.equals(var5.getActiveAnimations()[SLOT.ordinal()])) {
                  class="kw">return false;
               }
            }

            var4.playAnimation(var2, SLOT, this.animation, !var3, var1);
         } else {
            AnimationUtils.playAnimation(var2, SLOT, this.animation, true, var1);
         }

         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   class="kw">private void stopOn(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
      if (var2.isValid()) {
         NPCEntity var3 = var1.getComponent(var2, NPCEntity.getComponentType());
         if (var3 != null) {
            var3.playAnimation(var2, SLOT, null, var1);
         } else {
            AnimationUtils.stopAnimation(var2, SLOT, true, var1);
         }
      }
   }

   class="kw">private void scheduleStop(@Nonnull TriggerContext var1, @Nonnull Ref<EntityStore> var2) {
      Store var3 = var1.getStore();
      UUIDComponent var4 = var3.getComponent(var2, UUIDComponent.getComponentType());
      if (var4 != null) {
         TriggerVolumeManager var5 = var3.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
         if (var5 != null) {
            AnimationSlot var6 = SLOT;
            String var7 = this.animation;
            String var8 = "PlayAnimation:" + SLOT.name();
            DelayedEffectScheduler var9 = var5.getDelayedEffectScheduler();
            var9.cancelGates(var4.getUuid(), var8);
            var9.scheduleGate(
               (var2x, var3x, var4x, var5x, var6x, var7x, var8x) -> stopAnimationIfMatching(var7x, var2x, var6, var7),
               var2,
               var4.getUuid(),
               TriggerEventType.EXIT,
               var1.getVolume(),
               System.nanoTime(),
               this.duration,
               var1.getSpatialVolumes(),
               var8
            );
         }
      }
   }

   class="kw">private class="kw">static void stopAnimationIfMatching(
      @Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull AnimationSlot var2, @Nullable String var3
   ) {
      if (var1.isValid()) {
         NPCEntity var4 = var0.getComponent(var1, NPCEntity.getComponentType());
         if (var4 != null) {
            ActiveAnimationComponent var5 = var0.getComponent(var1, ActiveAnimationComponent.getComponentType());
            if (var5 != null && !Objects.equals(var5.getActiveAnimations()[var2.ordinal()], var3)) {
               class="kw">return;
            }

            var4.playAnimation(var1, var2, null, var0);
         } else {
            AnimationUtils.stopAnimation(var1, var2, true, var0);
         }
      }
   }

   class="kw">public enum Target {
      TRIGGERING_ENTITY,
      NPCS_IN_VOLUME;

      Target() {
      }
   }
}