ActionCombatAbility class

Пакет: com.hypixel.hytale.builtin.npccombatactionevaluator.corecomponents

Файл: com/hypixel/hytale/builtin/npccombatactionevaluator/corecomponents/ActionCombatAbility.java

extends: ActionBase

Поля (28)

МодификаторыТипИмя
final ComponentType<EntityStore, CombatActionEvaluator> COMPONENT_TYPE
AimingData var10
boolean var11
String var12
TransformComponent var13
HeadRotation var14
Rotation3f var15
Ref var16
double var17
var17
TransformComponent var19
Vector3d var20
float var21
float var22
SingleCollector var23
BallisticData var24
double var25
boolean var26
InteractionType var28
InteractionContext var29
AimingData var3
AimingData var3
InteractionChain var30
ParameterProvider var7
CombatActionEvaluator var7
CombatActionEvaluator var8
InteractionManager var8
AimingData var9

Методы (16)

МодификаторыВозвратСигнатура
if if(!this.initialised)
if if(var3 != null)
if if(var7 instanceof DoubleParameterProvider)
if if(var11 && var10 != null)
if if(var24 != null)
if if(var25 > 0.0)
if if(this.cachedPositioningAngleProvider != null)
if if(var17 != Double.MAX_VALUE)
if if(var16 == null)
if if(var10 != null)
if if(var10 != null)
if if(var2 != null)
if if(var3 != null)
if if(var2 != null)
if if(var3 != null)
abstract super super(var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.npccombatactionevaluator.corecomponents;

class="kw">import com.hypixel.hytale.builtin.npccombatactionevaluator.corecomponents.builders.BuilderActionCombatAbility;
class="kw">import com.hypixel.hytale.builtin.npccombatactionevaluator.evaluator.CombatActionEvaluator;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
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.entity.component.HeadRotation;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.InteractionModule;
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.data.SingleCollector;
class="kw">import com.hypixel.hytale.server.core.modules.physics.util.PhysicsMath;
class="kw">import com.hypixel.hytale.server.core.modules.projectile.config.BallisticData;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.ActionBase;
class="kw">import com.hypixel.hytale.server.npc.corecomponents.combat.ActionAttack;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.interactions.NPCInteractionSimulationHandler;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.parameterproviders.DoubleParameterProvider;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.parameterproviders.ParameterProvider;
class="kw">import com.hypixel.hytale.server.npc.util.AimingData;
class="kw">import com.hypixel.hytale.server.npc.util.NPCPhysicsMath;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;

class="kw">public class ActionCombatAbility class="kw">extends ActionBase {
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, CombatActionEvaluator> COMPONENT_TYPE = CombatActionEvaluator.getComponentType();
   @Nonnull
   class="kw">protected class="kw">static class="kw">final ComponentType<EntityStore, TransformComponent> TRANSFORM_COMPONENT_TYPE = TransformComponent.getComponentType();
   class="kw">protected class="kw">static class="kw">final float POSITIONING_ANGLE_THRESHOLD = 0.08726646F;
   class="kw">protected class="kw">final int id;
   class="kw">protected class="kw">final int positioningAngleProviderSlot;
   class="kw">protected class="kw">final double meleeConeAngle = (float) (Math.PI / 12);
   @Nullable
   class="kw">protected String attack;
   class="kw">protected DoubleParameterProvider cachedPositioningAngleProvider;
   class="kw">protected boolean initialised;

   class="kw">public ActionCombatAbility(@Nonnull BuilderActionCombatAbility var1, @Nonnull BuilderSupport var2) {
      super(var1);
      this.id = var2.getNextAttackIndex();
      this.positioningAngleProviderSlot = var2.getParameterSlot("PositioningAngle");
   }

   @Override
   class="kw">public boolean canExecute(
      @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
   ) {
      if (!this.initialised) {
         if (var3 != null) {
            ParameterProvider var7 = var3.getParameterProvider(this.positioningAngleProviderSlot);
            if (var7 class="kw">instanceof DoubleParameterProvider) {
               this.cachedPositioningAngleProvider = (DoubleParameterProvider)var7;
            }
         }

         this.initialised = true;
      }

      if (!super.canExecute(var1, var2, var3, var4, var6)) {
         class="kw">return false;
      }

      CombatActionEvaluator var8 = var1.getStore().getComponent(var1, COMPONENT_TYPE);
      class="kw">return var8 == null ? false : var8.getCurrentAttack() != null;
   }

   @Override
   class="kw">public boolean execute(
      @Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
   ) {
      CombatActionEvaluator var7 = var6.getComponent(var1, COMPONENT_TYPE);
      assert var7 != null;
      InteractionManager var8 = var6.getComponent(var1, InteractionModule.get().getInteractionManagerComponent());
      assert var8 != null;
      AimingData var9 = var3 != null ? var3.getPassedExtraInfo(AimingData.class) : null;
      AimingData var10 = var9 != null && var9.isClaimedBy(this.id) ? var9 : null;
      boolean var11 = var7.requiresAiming();
      String var12 = var7.getCurrentAttack();
      if (!var12.equals(this.attack)) {
         this.attack = var12;
         if (var11 && var10 != null) {
            SingleCollector var23 = ActionAttack.THREAD_LOCAL_COLLECTOR.get();
            var8.walkChain(var1, var23, InteractionType.Primary, RootInteraction.getAssetMap().getAsset(this.attack), var6);
            BallisticData var24 = var23.getResult();
            if (var24 != null) {
               var10.requireBallistic(var24);
               var10.setUseFlatTrajectory(true);
            } else {
               double var25 = var7.getChargeDistance();
               if (var25 > 0.0) {
                  var10.setChargeDistance(var25);
                  var10.setDesiredHitAngle((float) (Math.PI / 12));
               }

               var10.requireCloseCombat();
            }

            class="kw">return false;
         }
      }

      TransformComponent var13 = var6.getComponent(var1, TRANSFORM_COMPONENT_TYPE);
      assert var13 != null;
      HeadRotation var14 = var6.getComponent(var1, HeadRotation.getComponentType());
      assert var14 != null;
      Rotation3f var15 = var10 != null && var10.getChargeDistance() > 0.0 ? var13.getRotation() : var14.getRotation();
      if (var10 != null && !var10.isOnTarget(var15.yaw(), var15.pitch(), (float) (Math.PI / 12))) {
         var10.clearSolution();
         class="kw">return false;
      }

      Ref var16 = var10 != null ? var10.getTarget() : null;
      if (!var11 || var16 != null && var2.getPositionCache().hasLineOfSight(var1, var16, var6)) {
         if (var7.shouldPositionFirst()) {
            double var17 = Double.MAX_VALUE;
            if (this.cachedPositioningAngleProvider != null) {
               var17 = this.cachedPositioningAngleProvider.getDoubleParameter();
            }

            if (var17 != Double.MAX_VALUE) {
               if (var16 == null) {
                  class="kw">return false;
               }

               TransformComponent var19 = var6.getComponent(var16, TRANSFORM_COMPONENT_TYPE);
               assert var19 != null;
               Vector3d var20 = var19.getPosition();
               float var21 = NPCPhysicsMath.lookatHeading(var13.getPosition(), var20, var13.getRotation().yaw());
               float var22 = PhysicsMath.normalizeTurnAngle(var19.getRotation().yaw() - var21 - (float)var17);
               if (Math.abs(var22) > 0.08726646F) {
                  class="kw">return false;
               }
            }
         }

         boolean var26 = var7.shouldDamageFriendlies();
         if (!var26 && var16 != null && var2.getPositionCache().isFriendlyBlockingLineOfSight(var1, var16, var6)) {
            var10.clearSolution();
            class="kw">return false;
         }

         if (var8.getInteractionSimulationHandler() class="kw">instanceof NPCInteractionSimulationHandler var27) {
            var27.requestChargeTime(var7.getChargeFor());
         }

         InteractionType var28 = var7.getCurrentInteractionType();
         InteractionContext var29 = InteractionContext.forInteraction(var8, var1, var28, var6);
         var29.setInteractionVarsGetter(var7.getCurrentInteractionVarsGetter());
         InteractionChain var30 = var8.initChain(var28, var29, RootInteraction.getRootInteractionOrUnknown(this.attack), false);
         var8.queueExecuteChain(var30);
         var2.getCombatSupport().setExecutingAttack(var30, var26, 0.0);
         if (var10 != null) {
            var10.setHaveAttacked(true);
         }

         var7.completeCurrentAction(false, true);
         this.attack = null;
         class="kw">return true;
      } else {
         if (var10 != null) {
            var10.clearSolution();
         }

         class="kw">return false;
      }
   }

   @Override
   class="kw">public void activate(ExecutionSupport var1, @Nullable InfoProvider var2) {
      super.activate(var1, var2);
      if (var2 != null) {
         AimingData var3 = var2.getPassedExtraInfo(AimingData.class);
         if (var3 != null) {
            var3.tryClaim(this.id);
         }
      }
   }

   @Override
   class="kw">public void deactivate(ExecutionSupport var1, @Nullable InfoProvider var2) {
      super.deactivate(var1, var2);
      if (var2 != null) {
         AimingData var3 = var2.getPassedExtraInfo(AimingData.class);
         if (var3 != null) {
            var3.release();
         }
      }
   }
}