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