InterruptInteraction class

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

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

extends: SimpleInstantInteraction

Поля (8)

МодификаторыТипИмя
final BuilderCodec<InterruptInteraction> CODEC
IntSet var10
Ref var4
Ref var5
CommandBuffer var6
InteractionManager var7
ObjectIterator var8
InteractionChain var9

Методы (4)

МодификаторыВозвратСигнатура
if if(var0.requiredTag != null)
if if(var0.excludedTag != null)
if if(var5 != null)
if if(var7 != null)

Исходный код

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

class="kw">import com.hypixel.hytale.assetstore.AssetRegistry;
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.validation.Validators;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionChain;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionContext;
class="kw">import com.hypixel.hytale.server.core.entity.InteractionManager;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
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.IntSet;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class InterruptInteraction class="kw">extends SimpleInstantInteraction {
   class="kw">public class="kw">static class="kw">final BuilderCodec<InterruptInteraction> CODEC = BuilderCodec.builder(
         InterruptInteraction.class, InterruptInteraction::new, SimpleInstantInteraction.CODEC
      )
      .documentation("Interrupts interactions on the target entity.")
      .<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()
      .<Set<InteractionType>>appendInherited(
         new KeyedCodec<>("InterruptTypes", InteractionModule.INTERACTION_TYPE_SET_CODEC),
         (var0, var1) -> var0.interruptTypes = var1,
         var0 -> var0.interruptTypes,
         (var0, var1) -> var0.interruptTypes = var1.interruptTypes
      )
      .documentation("A set of interaction types that this interrupt will cancel")
      .add()
      .<String>appendInherited(
         new KeyedCodec<>("RequiredTag", Codec.STRING),
         (var0, var1) -> var0.requiredTag = var1,
         var0 -> var0.requiredTag,
         (var0, var1) -> var0.requiredTag = var1.requiredTag
      )
      .documentation("The tag that the root interaction of an active interaction chain must have to be interrupted.\nIf not set then no tag is required.")
      .add()
      .<String>appendInherited(
         new KeyedCodec<>("ExcludedTag", Codec.STRING),
         (var0, var1) -> var0.excludedTag = var1,
         var0 -> var0.excludedTag,
         (var0, var1) -> var0.excludedTag = var1.excludedTag
      )
      .documentation("The tag that if the root interaction of an active interaction chain has then it will not be interrupted.")
      .add()
      .afterDecode(var0 -> {
         if (var0.requiredTag != null) {
            var0.requiredTagIndex = AssetRegistry.getOrCreateTagIndex(var0.requiredTag);
         }

         if (var0.excludedTag != null) {
            var0.excludedTagIndex = AssetRegistry.getOrCreateTagIndex(var0.excludedTag);
         }
      })
      .build();
   class="kw">private InteractionTarget entityTarget = InteractionTarget.USER;
   @Nullable
   class="kw">private Set<InteractionType> interruptTypes;
   @Nullable
   class="kw">private String requiredTag;
   class="kw">private int requiredTagIndex = Integer.MIN_VALUE;
   @Nullable
   class="kw">private String excludedTag;
   class="kw">private int excludedTagIndex = Integer.MIN_VALUE;

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

   @Override
   class="kw">protected void firstRun(@Nonnull InteractionType var1, @Nonnull InteractionContext var2, @Nonnull CooldownHandler var3) {
      Ref var4 = var2.getEntity();
      Ref var5 = this.entityTarget.getEntity(var2, var4);
      if (var5 != null) {
         CommandBuffer var6 = var2.getCommandBuffer();
         InteractionManager var7 = var6.getComponent(var5, InteractionModule.get().getInteractionManagerComponent());
         if (var7 != null) {
            ObjectIterator var8 = var7.getChains().values().iterator();

            while (var8.hasNext()) {
               InteractionChain var9 = (InteractionChain)var8.next();
               if (this.interruptTypes == null || this.interruptTypes.contains(var9.getType())) {
                  IntSet var10 = var9.getInitialRootInteraction().getData().getExpandedTagIndexes();
                  if ((this.requiredTag == null || var10.contains(this.requiredTagIndex))
                     && (this.excludedTag == null || !var10.contains(this.excludedTagIndex))) {
                     var7.cancelChains(var9);
                  }
               }
            }
         }
      }
   }
}