ModifyTagsEffect class
Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin
Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/ModifyTagsEffect.java
extends: TriggerEffect
Поля (21)
| Модификаторы | Тип | Имя |
|---|---|---|
|
SET,
REMOVE,
INCREMENT,
TOGGLE,
REPLACE, |
APPEND |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
return |
|
TriggerVolumeManager |
var2 |
|
Ref |
var3 |
|
ModifyTagsEffect |
var4 |
|
UUID |
var4 |
|
|
var4 |
|
|
var4 |
|
UUIDComponent |
var5 |
|
String |
var5 |
|
String |
var5 |
|
String |
var5 |
|
String |
var6 |
|
BigDecimal |
var6 |
|
String |
var6 |
|
BigDecimal |
var7 |
|
String |
var8 |
Методы (19)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
Operation Operation() |
private |
void |
applyAppendvoid applyAppend(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) |
private |
void |
applyIncrementvoid applyIncrement(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) |
|
void |
applyToVolumevoid applyToVolume(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) |
private |
void |
applyTogglevoid applyToggle(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) |
abstract |
return |
createreturn create(var0, ModifyTagsEffect.Operation.SET, var1, var2) |
abstract |
return |
createreturn create(var0, ModifyTagsEffect.Operation.REMOVE, var1, var2) |
abstract |
return |
createreturn create(var0, ModifyTagsEffect.Operation.INCREMENT, var1, var2) |
abstract |
return |
createreturn create(var0, ModifyTagsEffect.Operation.TOGGLE, var1, null) |
abstract |
return |
createreturn create(var0, ModifyTagsEffect.Operation.REPLACE, var1, var2) |
abstract |
return |
createreturn create(var0, ModifyTagsEffect.Operation.APPEND, var1, var2) |
public |
double |
getRadiusdouble getRadius() |
|
|
if if(var3 != null) |
|
|
if if(var5 == null) |
|
|
if if(var6 == null) |
|
|
if if(var7 == null) |
|
|
if if(var5 == null) |
private |
void |
logInvalidNumbervoid logInvalidNumber(@Nonnull VolumeEntry var1, @Nullable String var2) |
|
|
switch switch(this.operation) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;
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.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.Ref;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.math.BigDecimal;
class="kw">import java.util.Locale;
class="kw">import java.util.UUID;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class ModifyTagsEffect class="kw">extends TriggerEffect {
@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<ModifyTagsEffect> CODEC = BuilderCodec.builder(ModifyTagsEffect.class, ModifyTagsEffect::new, BASE_CODEC)
.append(
new KeyedCodec<>("Operation", new EnumCodec<>(ModifyTagsEffect.Operation.class), false), (var0, var1) -> var0.operation = var1, var0 -> var0.operation
)
.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<>("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()
.build();
@Nonnull
class="kw">private ModifyTagsEffect.Operation operation = ModifyTagsEffect.Operation.SET;
@Nonnull
class="kw">private String tagKey = "";
@Nullable
class="kw">private String tagValue;
@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">public ModifyTagsEffect() {
}
@Nonnull
class="kw">public class="kw">static ModifyTagsEffect set(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
class="kw">return create(var0, ModifyTagsEffect.Operation.SET, var1, var2);
}
@Nonnull
class="kw">public class="kw">static ModifyTagsEffect remove(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
class="kw">return create(var0, ModifyTagsEffect.Operation.REMOVE, var1, var2);
}
@Nonnull
class="kw">public class="kw">static ModifyTagsEffect increment(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
class="kw">return create(var0, ModifyTagsEffect.Operation.INCREMENT, var1, var2);
}
@Nonnull
class="kw">public class="kw">static ModifyTagsEffect toggle(@Nonnull TriggerEventType var0, @Nonnull String var1) {
class="kw">return create(var0, ModifyTagsEffect.Operation.TOGGLE, var1, null);
}
@Nonnull
class="kw">public class="kw">static ModifyTagsEffect replace(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
class="kw">return create(var0, ModifyTagsEffect.Operation.REPLACE, var1, var2);
}
@Nonnull
class="kw">public class="kw">static ModifyTagsEffect append(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nullable String var2) {
class="kw">return create(var0, ModifyTagsEffect.Operation.APPEND, var1, var2);
}
@Nonnull
class="kw">private class="kw">static ModifyTagsEffect create(@Nonnull TriggerEventType var0, @Nonnull ModifyTagsEffect.Operation var1, @Nonnull String var2, @Nullable String var3) {
ModifyTagsEffect var4 = new ModifyTagsEffect();
var4.setEventType(var0);
var4.operation = var1;
var4.tagKey = var2;
var4.tagValue = var3;
class="kw">return var4;
}
@Nonnull
class="kw">public ModifyTagsEffect withMatchTag(@Nullable String var1, @Nullable String var2) {
this.matchKey = var1;
this.matchValue = var2;
class="kw">return this;
}
@Override
class="kw">public void execute(@Nonnull TriggerContext var1) {
TriggerVolumeManager var2 = TaggedVolumeEffectUtil.manager(var1);
if (var2 != null && !this.tagKey.isBlank()) {
Ref var3 = var1.getEntityRef();
UUID var4;
if (var3 != null) {
UUIDComponent var5 = var1.getStore().getComponent(var3, UUIDComponent.getComponentType());
if (var5 == null) {
class="kw">return;
}
var4 = var5.getUuid();
} else {
var4 = TriggerVolumeManager.ENVIRONMENT_ACTOR_UUID;
}
String var8 = TaggedVolumeEffectUtil.composeTagFilter(this.matchKey, this.matchValue);
for (VolumeEntry var7 : TaggedVolumeEffectUtil.collectTargets(var1, var8, this.radius, this.center)) {
this.applyToVolume(var2, var7, var3, var4);
}
}
}
void applyToVolume(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) {
if (!this.tagKey.isBlank()) {
class="kw">switch (this.operation) {
case SET:
case REPLACE:
var1.setTag(var2.getId(), this.tagKey, this.tagValue, var3, var4);
break;
case REMOVE:
var1.removeTag(var2.getId(), this.tagKey, this.tagValue, var3, var4);
break;
case INCREMENT:
this.applyIncrement(var1, var2, var3, var4);
break;
case TOGGLE:
this.applyToggle(var1, var2, var3, var4);
break;
case APPEND:
this.applyAppend(var1, var2, var3, var4);
}
}
}
class="kw">private void applyAppend(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) {
String var5 = var2.getRawTags().get(this.tagKey);
String var6 = this.tagValue != null ? this.tagValue : "";
var1.setTag(var2.getId(), this.tagKey, (var5 != null ? var5 : "") + var6, var3, var4);
}
class="kw">private void applyIncrement(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) {
String var5 = var2.getRawTags().get(this.tagKey);
BigDecimal var6 = var5 != null ? parseDecimal(var5) : BigDecimal.ZERO;
if (var6 == null) {
this.logInvalidNumber(var2, var5);
} else {
BigDecimal var7 = parseDecimal(this.tagValue);
if (var7 == null) {
this.logInvalidNumber(var2, this.tagValue);
} else {
var1.setTag(var2.getId(), this.tagKey, var6.add(var7).stripTrailingZeros().toPlainString(), var3, var4);
}
}
}
class="kw">private void applyToggle(@Nonnull TriggerVolumeManager var1, @Nonnull VolumeEntry var2, @Nullable Ref<EntityStore> var3, @Nonnull UUID var4) {
String var5 = var2.getRawTags().get(this.tagKey);
if (var5 == null) {
var1.setTag(var2.getId(), this.tagKey, "true", var3, var4);
} else {
String var6 = var5.toLowerCase(Locale.ROOT);
if ("true".equals(var6)) {
var1.setTag(var2.getId(), this.tagKey, "false", var3, var4);
} else if ("false".equals(var6)) {
var1.setTag(var2.getId(), this.tagKey, "true", var3, var4);
} else {
LOGGER.at(Level.WARNING)
.log("Cannot toggle trigger volume tag '%s' on volume '%s': current value '%s' is not boolean", this.tagKey, var2.getId(), var5);
}
}
}
class="kw">private void logInvalidNumber(@Nonnull VolumeEntry var1, @Nullable String var2) {
LOGGER.at(Level.WARNING).log("Cannot increment trigger volume tag '%s' on volume '%s': value '%s' is not numeric", this.tagKey, var1.getId(), var2);
}
@Nullable
class="kw">private class="kw">static BigDecimal parseDecimal(@Nullable String var0) {
if (var0 != null && !var0.isBlank()) {
try {
class="kw">return new BigDecimal(var0.trim());
} catch (NumberFormatException var2) {
class="kw">return null;
}
} else {
class="kw">return null;
}
}
class="kw">public double getRadius() {
class="kw">return this.radius;
}
class="kw">public enum Operation {
SET,
REMOVE,
INCREMENT,
TOGGLE,
REPLACE,
APPEND;
Operation() {
}
}
}