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