EffectConditionInteraction class

Пакет: com.hypixel.hytale.server.core.modules.interaction.interaction.config.none

Файл: com/hypixel/hytale/server/core/modules/interaction/interaction/config/none/EffectConditionInteraction.java

extends: SimpleInstantInteraction

Поля (11)

МодификаторыТипИмя
break
return
return
IndexedLookupTableAssetMap var1
int[] var2
com.hypixel.hytale.protocol.EffectConditionInteraction var2
CommandBuffer var4
Ref var5
Ref var6
EffectControllerComponent var7
Int2ObjectMap var8

Методы (6)

МодификаторыВозвратСигнатура
for for(int var9 = 0; var9 < this.entityEffectIndexes.length; var9++)
for for(int var3 = 0; var3 < var0.length; var3++)
if if(var7 != null)
if if(var0 == null)
static int[] resolveEntityEffectsint[] resolveEntityEffects(@Nullable String[] var0)
switch switch(this.match)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.interaction.interaction.config.none;

class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
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.codec.validation.Validators;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.protocol.Interaction;
class="kw">import com.hypixel.hytale.protocol.InteractionState;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.protocol.Match;
class="kw">import com.hypixel.hytale.server.core.asset.type.entityeffect.config.EntityEffect;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.effect.ActiveEntityEffect;
class="kw">import com.hypixel.hytale.server.core.entity.effect.EffectControllerComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.CooldownHandler;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.SimpleInstantInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.util.InteractionTarget;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
class="kw">import java.util.Arrays;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class EffectConditionInteraction class="kw">extends SimpleInstantInteraction {
   @Nonnull
   class="kw">public class="kw">static class="kw">final BuilderCodec<EffectConditionInteraction> CODEC = BuilderCodec.builder(
         EffectConditionInteraction.class, EffectConditionInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("An interaction that is successful if the given effects exist (or don't) on the target entity.")
      .<String[]>append(new KeyedCodec<>("EntityEffectIds", Codec.STRING_ARRAY), (var0, var1) -> var0.entityEffectIds = var1, var0 -> var0.entityEffectIds)
      .addValidator(Validators.nonNull())
      .addValidator(Validators.nonEmptyArray())
      .addValidatorLate(() -> EntityEffect.VALIDATOR_CACHE.getArrayValidator().late())
      .add()
      .<Match>append(new KeyedCodec<>("Match", new EnumCodec<>(Match.class)), (var0, var1) -> var0.match = var1, var0 -> var0.match)
      .documentation(
         "Field to specify whether the entity must have the specified effects (All), or must not have the specified effects (None). Default value is: All."
      )
      .add()
      .<InteractionTarget>appendInherited(
         new KeyedCodec<>("Entity", InteractionTarget.CODEC),
         (var0, var1) -> var0.entityTarget = var1,
         var0 -> var0.entityTarget,
         (var0, var1) -> var0.entityTarget = var1.entityTarget
      )
      .documentation("The entity to target for this interaction.")
      .addValidator(Validators.nonNull())
      .add()
      .afterDecode(var0 -> var0.entityEffectIndexes = resolveEntityEffects(var0.entityEffectIds))
      .build();
   class="kw">protected String[] entityEffectIds;
   class="kw">protected int[] entityEffectIndexes;
   @Nonnull
   class="kw">protected Match match = Match.All;
   @Nonnull
   class="kw">private InteractionTarget entityTarget = InteractionTarget.USER;

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

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      CommandBuffer var4 = var2.getCommandBuffer();
      assert var4 != null;
      Ref var5 = var2.getEntity();
      Ref var6 = this.entityTarget.getEntity(var2, var5);
      if (var6 != null && var6.isValid()) {
         EffectControllerComponent var7 = var4.getComponent(var6, EffectControllerComponent.getComponentType());
         if (var7 != null) {
            Int2ObjectMap var8 = var7.getActiveEffects();

            for (int var9 = 0; var9 < this.entityEffectIndexes.length; var9++) {
               class="kw">switch (this.match) {
                  case All:
                     if (!var8.containsKey(this.entityEffectIndexes[var9])) {
                        var2.getState().state = InteractionState.Failed;
                        class="kw">return;
                     }
                     break;
                  case None:
                     if (var8.containsKey(this.entityEffectIndexes[var9])) {
                        var2.getState().state = InteractionState.Failed;
                        class="kw">return;
                     }
               }
            }
         }
      }
   }

   class="kw">private class="kw">static int[] resolveEntityEffects(@Nullable String[] var0) {
      if (var0 == null) {
         class="kw">return ArrayUtil.EMPTY_INT_ARRAY;
      }

      IndexedLookupTableAssetMap var1 = EntityEffect.getAssetMap();
      int[] var2 = new int[var0.length];

      for (int var3 = 0; var3 < var0.length; var3++) {
         var2[var3] = var1.getIndex(var0[var3]);
      }

      class="kw">return var2;
   }

   @Nonnull
   @Override
   class="kw">protected Interaction generatePacket() {
      class="kw">return new com.hypixel.hytale.protocol.EffectConditionInteraction();
   }

   @Override
   class="kw">protected void configurePacket(Interaction var1) {
      super.configurePacket(var1);
      com.hypixel.hytale.protocol.EffectConditionInteraction var2 = (com.hypixel.hytale.protocol.EffectConditionInteraction)var1;
      var2.entityEffects = this.entityEffectIndexes;
      var2.match = this.match;
      var2.entityTarget = this.entityTarget.toProtocol();
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "EffectConditionInteraction{entityEffectIds="
         + Arrays.toString(this.entityEffectIds)
         + ", entityEffectIndexes="
         + Arrays.toString(this.entityEffectIndexes)
         + ", match="
         + this.match
         + ", entityTarget="
         + this.entityTarget
         + "} "
         + super.toString();
   }
}