TagCondition class

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

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

extends: TriggerCondition

Поля (14)

МодификаторыТипИмя
EVENT, SELF, GROUP, RADIUS
boolean var2
boolean var2
int var2
Store var2
Vector3d var2
TagCondition var3
TagCondition var3
String var3
TagCondition var4
TriggerVolumeManager var4
Vector3d var5
double var6
ArrayList var8

Методы (11)

МодификаторыВозвратСигнатура
Source Source()
for for(VolumeEntry var4 : var1)
if if(var2 == null)
if if(var3 != null)
if if(var4 == null)
if if(this.radius <= 0.0)
if if(this.center == TaggedVolumeEffectUtil.Center.ENTITY)
if if(var2 != null)
public void setComparisonvoid setComparison(@Nonnull PlayerCountCondition.Comparison var1)
private boolean testEventboolean testEvent(@Nonnull TriggerContext var1)
private boolean testVolumesboolean testVolumes(@Nonnull Collection<VolumeEntry> var1)

Исходный код

Показать/скрыть
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() {
      }
   }
}