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