ModifyRulesEffect class

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

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

extends: VolumeStateEffect

Поля (23)

МодификаторыТипИмя
SET, APPEND, SET_FIELD, REMOVE, SET_RULES_ACTIVE
BsonValue var10
BsonArray var13
LinkedHashSet var14
String var2
String var2
String var2
String var2
String var2
BsonDocument var2
boolean var3
var3
List var3
List var3
List var3
BsonDocument var3
BsonDocument var3
BsonDocument var4
BsonValue var5
String var6
BsonValue var7
BsonValue var8
BsonValue var9

Методы (15)

МодификаторыВозвратСигнатура
Operation Operation()
private boolean applyAppendboolean applyAppend(@Nonnull VolumeEntry var1)
private boolean applyRemoveboolean applyRemove(@Nonnull VolumeEntry var1)
private boolean applySetboolean applySet(@Nonnull VolumeEntry var1)
private boolean applySetActiveboolean applySetActive(@Nonnull VolumeEntry var1)
private boolean applySetFieldboolean applySetField(@Nonnull VolumeEntry var1)
abstract for for(int var4 = 0; var4 < var3.size()
if if(this.rule == null)
if if(var2 == null)
if if(var2 == null)
if if(var2 == null)
if if(var0 instanceof BsonInt32 && var1 instanceof BsonInt32)
if if(var5 != null)
public void setRulevoid setRule(@Nullable TriggerRule var1)
return switchreturn switch(this.operation)

Исходный код

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