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() {
}
}
}