CombatInteractionValidator class

Пакет: com.hypixel.hytale.server.npc.asset.builder.validators.asset

Файл: com/hypixel/hytale/server/npc/asset/builder/validators/asset/CombatInteractionValidator.java

extends: AssetValidator

Поля (9)

МодификаторыТипИмя
IndexedLookupTableAssetMap var1
RootInteraction var2
boolean var2
Set var3
StringBuilder var3
boolean var3
Set var4
boolean var4
ListCollector var5

Методы (9)

МодификаторыВозвратСигнатура
if if(!this.assetExists)
if if(!this.assetExists)
if if(!this.attackTag)
if if(!this.onlyOneAttackType)
if if(!this.onlyOneAimingReference)
if if(!var2)
abstract super super(var1)
static boolean testAttackTagboolean testAttackTag(@Nonnull RootInteraction var0)
static boolean testOnlyOneAttackTypeboolean testOnlyOneAttackType(@Nonnull RootInteraction var0)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.asset.builder.validators.asset;

class="kw">import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
class="kw">import com.hypixel.hytale.protocol.InteractionType;
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.interaction.config.Interaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.RootInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.BreakBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.ChangeBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.MovementConditionInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.client.PlaceBlockInteraction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.interaction.config.data.ListCollector;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.validators.AssetValidator;
class="kw">import com.hypixel.hytale.server.npc.role.support.CombatSupport;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.util.EnumSet;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Set;
class="kw">import javax.annotation.Nonnull;

class="kw">public class CombatInteractionValidator class="kw">extends AssetValidator {
   class="kw">private class="kw">static class="kw">final Set<Class<? class="kw">extends Interaction>> DISALLOWED_INTERACTION_TYPES = Set.of(
      BreakBlockInteraction.class, PlaceBlockInteraction.class, ChangeBlockInteraction.class, MovementConditionInteraction.class
   );
   class="kw">private class="kw">final List<String> disallowedInteractions = new ObjectArrayList();
   class="kw">private boolean assetExists;
   class="kw">private boolean attackTag;
   class="kw">private boolean onlyOneAttackType;
   class="kw">private boolean onlyOneAimingReference;

   class="kw">private CombatInteractionValidator() {
   }

   class="kw">private CombatInteractionValidator(EnumSet<AssetValidator.Config> var1) {
      super(var1);
   }

   @Nonnull
   @Override
   class="kw">public String getDomain() {
      class="kw">return "Interaction";
   }

   @Override
   class="kw">public boolean test(String var1) {
      RootInteraction var2 = RootInteraction.getAssetMap().getAsset(var1);
      this.assetExists = var2 != null;
      if (!this.assetExists) {
         class="kw">return false;
      }

      this.attackTag = testAttackTag(var2);
      this.onlyOneAttackType = testOnlyOneAttackType(var2);
      Set var3 = new HashSet<>();
      this.disallowedInteractions.clear();
      Set var4 = Interaction.getAssetMap().getKeysForTag(CombatSupport.AIMING_REFERENCE_TAG_INDEX);
      ListCollector var5 = new ListCollector<>((var3x, var4x, var5x) -> {
         if (var4.contains(var5x.getId())) {
            var3.add(var5x.getId());
         }

         if (DISALLOWED_INTERACTION_TYPES.contains(var5x.getClass())) {
            this.disallowedInteractions.add(var5x.getClass().getSimpleName());
         }

         class="kw">return null;
      });
      InteractionManager.walkChain(var5, InteractionType.Primary, InteractionContext.withoutEntity(), var2);
      this.onlyOneAimingReference = var3.size() <= 1;
      class="kw">return this.attackTag && this.onlyOneAttackType && this.onlyOneAimingReference && this.disallowedInteractions.isEmpty();
   }

   @Nonnull
   @Override
   class="kw">public String errorMessage(String var1, String var2) {
      if (!this.assetExists) {
         class="kw">return "Interaction \"" + var1 + "\" does not exist for attribute \"" + var2 + "\"";
      }

      StringBuilder var3 = new StringBuilder("Attribute \"").append(var2).append("\" uses interaction with name \"").append(var1).append("\" which:");
      if (!this.attackTag) {
         var3.append("\n  - Is not marked with the \"").append("Attack").append("\" tag");
      }

      if (!this.onlyOneAttackType) {
         var3.append("\n  - Has too many attack types (only one may be defined)");
      }

      if (!this.onlyOneAimingReference) {
         var3.append("\n  - Has too many ").append("AimingReference").append(" tags");
      }

      if (!this.disallowedInteractions.isEmpty()) {
         var3.append("\n  - Contains the following disallowed interaction types: ").append(String.join(", ", this.disallowedInteractions));
      }

      class="kw">return var3.toString();
   }

   @Nonnull
   @Override
   class="kw">public String getAssetName() {
      class="kw">return RootInteraction.class.getSimpleName();
   }

   class="kw">public class="kw">static boolean testAttackTag(@Nonnull RootInteraction var0) {
      class="kw">return RootInteraction.getAssetMap().getKeysForTag(CombatSupport.ATTACK_TAG_INDEX).contains(var0.getId());
   }

   class="kw">public class="kw">static boolean testOnlyOneAttackType(@Nonnull RootInteraction var0) {
      IndexedLookupTableAssetMap var1 = RootInteraction.getAssetMap();
      boolean var2 = var1.getKeysForTag(CombatSupport.MELEE_TAG_INDEX).contains(var0.getId());
      boolean var3 = var1.getKeysForTag(CombatSupport.RANGED_TAG_INDEX).contains(var0.getId());
      boolean var4 = var1.getKeysForTag(CombatSupport.BLOCK_TAG_INDEX).contains(var0.getId());
      if (!var2) {
         class="kw">return var3 ? !var4 : true;
      } else {
         class="kw">return !var3 && !var4;
      }
   }

   @Nonnull
   class="kw">public class="kw">static CombatInteractionValidator required() {
      class="kw">return new CombatInteractionValidator();
   }

   @Nonnull
   class="kw">public class="kw">static CombatInteractionValidator withConfig(EnumSet<AssetValidator.Config> var0) {
      class="kw">return new CombatInteractionValidator(var0);
   }
}