Operation enum

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

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

Поля (1)

МодификаторыТипИмя
SET, REMOVE, INCREMENT, TOGGLE, REPLACE, APPEND

Исходный код

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