Operation enum

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

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

Поля (1)

МодификаторыТипИмя
SET, APPEND, SET_FIELD, REMOVE, SET_RULES_ACTIVE

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;

class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerRule;
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.EmptyExtraInfo;
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 java.util.LinkedHashSet;
class="kw">import java.util.List;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonArray;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonDouble;
class="kw">import org.bson.BsonInt32;
class="kw">import org.bson.BsonInt64;
class="kw">import org.bson.BsonNumber;
class="kw">import org.bson.BsonValue;

class="kw">public class ModifyRulesEffect class="kw">extends VolumeStateEffect {
   @Nonnull
   class="kw">private class="kw">static class="kw">final String TYPE_KEY = "Type";
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<ModifyRulesEffect> CODEC = BuilderCodec.builder(
         ModifyRulesEffect.class, ModifyRulesEffect::new, createCodec(ModifyRulesEffect.class, ModifyRulesEffect::new)
      )
      .append(
         new KeyedCodec<>("Operation", new EnumCodec<>(ModifyRulesEffect.Operation.class), false),
         (var0, var1) -> var0.operation = var1,
         var0 -> var0.operation
      )
      .add()
      .append(new KeyedCodec<>("Rule", TriggerRule.CODEC, false), (var0, var1) -> var0.rule = var1, var0 -> var0.rule)
      .add()
      .append(new KeyedCodec<>("FieldKey", Codec.STRING, false), (var0, var1) -> var0.fieldKey = var1, var0 -> var0.fieldKey)
      .add()
      .append(new KeyedCodec<>("Active", Codec.BOOLEAN, false), (var0, var1) -> var0.active = var1, var0 -> var0.active)
      .add()
      .build();
   @Nonnull
   class="kw">private ModifyRulesEffect.Operation operation = ModifyRulesEffect.Operation.SET_RULES_ACTIVE;
   @Nullable
   class="kw">private TriggerRule rule;
   @Nullable
   class="kw">private String fieldKey;
   class="kw">private boolean active = true;

   class="kw">public ModifyRulesEffect() {
   }

   @Nonnull
   class="kw">public ModifyRulesEffect.Operation getOperation() {
      class="kw">return this.operation;
   }

   @Nullable
   class="kw">public TriggerRule getRule() {
      class="kw">return this.rule;
   }

   class="kw">public void setRule(@Nullable TriggerRule var1) {
      this.rule = var1;
   }

   @Nullable
   class="kw">public String getFieldKey() {
      class="kw">return this.fieldKey;
   }

   @Override
   class="kw">protected boolean applyTo(@Nonnull VolumeEntry var1) {
      class="kw">return class="kw">switch (this.operation) {
         case SET -> this.applySet(var1);
         case APPEND -> this.applyAppend(var1);
         case SET_FIELD -> this.applySetField(var1);
         case REMOVE -> this.applyRemove(var1);
         case SET_RULES_ACTIVE -> this.applySetActive(var1);
      };
   }

   @Override
   class="kw">protected boolean shouldNotifyViewers() {
      class="kw">return true;
   }

   class="kw">private boolean applySetActive(@Nonnull VolumeEntry var1) {
      if (this.rule == null) {
         if (var1.isRulesActive() == this.active) {
            class="kw">return false;
         }

         var1.setRulesActive(this.active);
         class="kw">return true;
      } else {
         String var2 = this.ruleTypeId();
         if (var2 == null) {
            class="kw">return false;
         }

         boolean var3 = false;

         for (TriggerRule var5 : var1.getRules()) {
            if (var2.equals(TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)var5.getClass())) && var5.isEnabled() != this.active) {
               var5.setEnabled(this.active);
               var3 = true;
            }
         }

         class="kw">return var3;
      }
   }

   class="kw">private boolean applySet(@Nonnull VolumeEntry var1) {
      String var2 = this.ruleTypeId();
      if (var2 == null) {
         class="kw">return false;
      }

      List var3 = var1.getRules();
      var3.removeIf(var1x -> var2.equals(TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)var1x.getClass())));
      var3.add(TriggerRule.deepCopy(this.rule));
      class="kw">return true;
   }

   class="kw">private boolean applyRemove(@Nonnull VolumeEntry var1) {
      String var2 = this.ruleTypeId();
      class="kw">return var2 == null ? false : var1.getRules().removeIf(var1x -> var2.equals(TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)var1x.getClass())));
   }

   class="kw">private boolean applyAppend(@Nonnull VolumeEntry var1) {
      String var2 = this.ruleTypeId();
      if (var2 == null) {
         class="kw">return false;
      }

      List var3 = var1.getRules();

      for (int var4 = 0; var4 < var3.size(); var4++) {
         if (var2.equals(TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)var3.get(var4).getClass()))) {
            var3.set(var4, mergeListFields(var3.get(var4), this.rule));
            class="kw">return true;
         }
      }

      var3.add(TriggerRule.deepCopy(this.rule));
      class="kw">return true;
   }

   class="kw">private boolean applySetField(@Nonnull VolumeEntry var1) {
      String var2 = this.ruleTypeId();
      if (var2 != null && this.fieldKey != null && !this.fieldKey.isBlank()) {
         List var3 = var1.getRules();

         for (int var4 = 0; var4 < var3.size(); var4++) {
            if (var2.equals(TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)var3.get(var4).getClass()))) {
               var3.set(var4, setSingleField(var3.get(var4), this.rule, this.fieldKey));
               class="kw">return true;
            }
         }

         var3.add(TriggerRule.deepCopy(this.rule));
         class="kw">return true;
      } else {
         class="kw">return false;
      }
   }

   @Nullable
   class="kw">private String ruleTypeId() {
      class="kw">return this.rule != null ? TriggerRule.CODEC.getIdFor((Class<? class="kw">extends TriggerRule>)this.rule.getClass()) : null;
   }

   @Nonnull
   class="kw">private class="kw">static TriggerRule mergeListFields(@Nonnull TriggerRule var0, @Nonnull TriggerRule var1) {
      BsonDocument var2 = TriggerRule.CODEC.encode(var0, EmptyExtraInfo.EMPTY).asDocument();
      BsonDocument var3 = TriggerRule.CODEC.encode(var1, EmptyExtraInfo.EMPTY).asDocument();

      for (Entry var5 : var3.entrySet()) {
         String var6 = var5.getKey();
         if (!"Type".equals(var6)) {
            BsonValue var7 = var5.getValue();
            if (var7.isArray()) {
               BsonArray var13 = new BsonArray();
               LinkedHashSet var14 = new LinkedHashSet<>();
               BsonValue var10 = var2.get(var6);
               if (var10 != null && var10.isArray()) {
                  for (BsonValue var12 : var10.asArray()) {
                     if (var14.add(var12)) {
                        var13.add(var12);
                     }
                  }
               }

               for (BsonValue var16 : var7.asArray()) {
                  if (var14.add(var16)) {
                     var13.add(var16);
                  }
               }

               var2.put(var6, var13);
            } else if (var7.isNumber()) {
               BsonValue var8 = var2.get(var6);
               BsonValue var9 = var8 != null && var8.isNumber() ? addNumbers(var8.asNumber(), var7.asNumber()) : var7;
               var2.put(var6, var9);
            }
         }
      }

      class="kw">return TriggerRule.CODEC.decode(var2, EmptyExtraInfo.EMPTY);
   }

   @Nonnull
   class="kw">private class="kw">static BsonValue addNumbers(@Nonnull BsonNumber var0, @Nonnull BsonNumber var1) {
      if (var0 class="kw">instanceof BsonInt32 && var1 class="kw">instanceof BsonInt32) {
         class="kw">return new BsonInt32(var0.intValue() + var1.intValue());
      } else {
         class="kw">return (BsonValue)(!(var0 class="kw">instanceof BsonDouble) && !(var1 class="kw">instanceof BsonDouble)
            ? new BsonInt64(var0.longValue() + var1.longValue())
            : new BsonDouble(var0.doubleValue() + var1.doubleValue()));
      }
   }

   @Nonnull
   class="kw">private class="kw">static TriggerRule setSingleField(@Nonnull TriggerRule var0, @Nonnull TriggerRule var1, @Nonnull String var2) {
      BsonDocument var3 = TriggerRule.CODEC.encode(var0, EmptyExtraInfo.EMPTY).asDocument();
      BsonDocument var4 = TriggerRule.CODEC.encode(var1, EmptyExtraInfo.EMPTY).asDocument();
      BsonValue var5 = var4.get(var2);
      if (var5 != null) {
         var3.put(var2, var5);
      } else {
         var3.remove(var2);
      }

      class="kw">return TriggerRule.CODEC.decode(var3, EmptyExtraInfo.EMPTY);
   }

   class="kw">public enum Operation {
      SET,
      APPEND,
      SET_FIELD,
      REMOVE,
      SET_RULES_ACTIVE;

      Operation() {
      }
   }
}