Source enum

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

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

Поля (1)

МодификаторыТипИмя
EVENT, SELF, GROUP, RADIUS

Исходный код

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

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.TriggerCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
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.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Collection;
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 TagCondition class="kw">extends TriggerCondition {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<TagCondition> CODEC = BuilderCodec.builder(TagCondition.class, TagCondition::new, BASE_CODEC)
      .append(new KeyedCodec<>("Source", new EnumCodec<>(TagCondition.Source.class), false), (var0, var1) -> var0.source = var1, var0 -> var0.source)
      .add()
      .append(new KeyedCodec<>("TagKey", Codec.STRING), (var0, var1) -> var0.tagKey = var1, var0 -> var0.tagKey)
      .add()
      .append(new KeyedCodec<>("TagValue", Codec.STRING, false), (var0, var1) -> var0.tagValue = var1, var0 -> var0.tagValue)
      .add()
      .append(
         new KeyedCodec<>("Comparison", new EnumCodec<>(PlayerCountCondition.Comparison.class), false),
         (var0, var1) -> var0.comparison = var1,
         var0 -> var0.comparison
      )
      .add()
      .append(new KeyedCodec<>("Inverted", Codec.BOOLEAN, false), (var0, var1) -> var0.inverted = var1, var0 -> var0.inverted)
      .add()
      .append(new KeyedCodec<>("MatchKey", Codec.STRING, false), (var0, var1) -> var0.matchKey = var1, var0 -> var0.matchKey)
      .add()
      .append(new KeyedCodec<>("MatchValue", Codec.STRING, false), (var0, var1) -> var0.matchValue = var1, var0 -> var0.matchValue)
      .add()
      .append(new KeyedCodec<>("Radius", Codec.DOUBLE, false), (var0, var1) -> var0.radius = var1, var0 -> var0.radius)
      .add()
      .append(new KeyedCodec<>("Center", new EnumCodec<>(TaggedVolumeEffectUtil.Center.class), false), (var0, var1) -> var0.center = var1, var0 -> var0.center)
      .add()
      .append(
         new KeyedCodec<>("MinimumCount", Codec.INTEGER, false),
         (var0, var1) -> var0.minimumCount = var1,
         var0 -> var0.minimumCount > 0 ? var0.minimumCount : null
      )
      .add()
      .build();
   @Nonnull
   class="kw">private TagCondition.Source source = TagCondition.Source.SELF;
   @Nonnull
   class="kw">private String tagKey = "";
   @Nullable
   class="kw">private String tagValue;
   @Nonnull
   class="kw">private PlayerCountCondition.Comparison comparison = PlayerCountCondition.Comparison.EXACTLY;
   class="kw">private boolean inverted;
   @Nullable
   class="kw">private String matchKey;
   @Nullable
   class="kw">private String matchValue;
   class="kw">private double radius = 50.0;
   @Nonnull
   class="kw">private TaggedVolumeEffectUtil.Center center = TaggedVolumeEffectUtil.Center.VOLUME;
   class="kw">private int minimumCount;

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

   @Nonnull
   class="kw">public class="kw">static TagCondition forEvent(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
      TagCondition var3 = new TagCondition();
      var3.setEventType(var0);
      var3.source = TagCondition.Source.EVENT;
      var3.tagKey = var1;
      var3.tagValue = var2;
      class="kw">return var3;
   }

   @Nonnull
   class="kw">public class="kw">static TagCondition forSelf(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
      TagCondition var3 = new TagCondition();
      var3.setEventType(var0);
      var3.source = TagCondition.Source.SELF;
      var3.tagKey = var1;
      var3.tagValue = var2;
      class="kw">return var3;
   }

   @Nonnull
   class="kw">public class="kw">static TagCondition forGroup(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2, int var3) {
      TagCondition var4 = new TagCondition();
      var4.setEventType(var0);
      var4.source = TagCondition.Source.GROUP;
      var4.tagKey = var1;
      var4.tagValue = var2;
      var4.minimumCount = var3;
      class="kw">return var4;
   }

   @Nonnull
   class="kw">public TagCondition.Source getSource() {
      class="kw">return this.source;
   }

   class="kw">public void setComparison(@Nonnull PlayerCountCondition.Comparison var1) {
      this.comparison = var1;
   }

   @Override
   class="kw">public boolean test(@Nonnull TriggerContext var1) {
      if (this.tagKey.isBlank()) {
         class="kw">return false;
      }

      boolean var2 = class="kw">switch (this.source) {
         case EVENT -> this.testEvent(var1);
         case SELF -> VolumeTagMatcher.hasTag(var1.getVolume(), this.tagKey, this.tagValue, this.comparison);
         case GROUP -> this.testVolumes(var1.getSpatialVolumes());
         case RADIUS -> this.testVolumes(this.collectRadiusTargets(var1));
      };
      class="kw">return this.inverted != var2;
   }

   class="kw">private boolean testEvent(@Nonnull TriggerContext var1) {
      boolean var2 = this.tagValue == null || this.tagValue.isBlank();

      for (SignalTag var4 : var1.getSignalTags()) {
         if (this.tagKey.equals(var4.key()) && (var2 || VolumeTagMatcher.matchesValue(var4.value(), this.tagValue, this.comparison))) {
            class="kw">return true;
         }
      }

      class="kw">return false;
   }

   class="kw">private boolean testVolumes(@Nonnull Collection<VolumeEntry> var1) {
      if (var1.isEmpty()) {
         class="kw">return false;
      }

      int var2 = 0;

      for (VolumeEntry var4 : var1) {
         if (VolumeTagMatcher.hasTag(var4, this.tagKey, this.tagValue, this.comparison)) {
            var2++;
         } else if (this.minimumCount <= 0) {
            class="kw">return false;
         }
      }

      class="kw">return this.minimumCount > 0 ? var2 >= this.minimumCount : var2 == var1.size();
   }

   @Nonnull
   class="kw">private List<VolumeEntry> collectRadiusTargets(@Nonnull TriggerContext var1) {
      Store var2 = var1.getStore();
      if (var2 == null) {
         class="kw">return List.of();
      }

      String var3 = TaggedVolumeEffectUtil.composeTagFilter(this.matchKey, this.matchValue);
      if (var3 != null) {
         class="kw">return TaggedVolumeEffectUtil.collectTargets(var1, var3, this.radius, this.center);
      }

      TriggerVolumeManager var4 = var2.getResource(TriggerVolumesPlugin.get().getManagerResourceType());
      if (var4 == null) {
         class="kw">return List.of();
      }

      if (this.radius <= 0.0) {
         class="kw">return List.copyOf(var4.getVolumes());
      }

      Vector3d var5 = this.resolveCenter(var1);
      double var6 = this.radius * this.radius;
      ArrayList var8 = new ArrayList<>();

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

      class="kw">return var8;
   }

   @Nonnull
   class="kw">private Vector3d resolveCenter(@Nonnull TriggerContext var1) {
      if (this.center == TaggedVolumeEffectUtil.Center.ENTITY) {
         Vector3d var2 = var1.getActorPosition();
         if (var2 != null) {
            class="kw">return var2;
         }
      }

      class="kw">return new Vector3d(var1.getVolume().getPosition());
   }

   class="kw">public enum Source {
      EVENT,
      SELF,
      GROUP,
      RADIUS;

      Source() {
      }
   }
}