如何实现类似 `跳斩` 的人物攻击动作

Guy_Z


版本信息
你使用的系统: Windows10 64位系统
你用的JDK是: jdk-1.8.0_181
你使用的IDE: IntelliJ IDEA
你使用的IDE版本: 2019.3.3 x64
Forge版本: 1.16.3-34.1.0
Minecraft版本: 1.16.3
Mapping 文件版本: 20200916-1.16.2

问题描述

如题,如何实现类似 ‘跳斩’ 的人物攻击动作:

我想了想在原版mc中, “激流” 附魔 的三叉戟在水中长按右键时有个向前突进的动作,便去翻来看看:

TridentItem 中相关突进动作的代码:

float f7 = playerentity.rotationYaw;
float f = playerentity.rotationPitch;
float f1 = -MathHelper.sin(f7 * (float)Math.PI / 180F)) * MathHelper.cos(f * ((float)Math.PI / 180F));
float f2 = -MathHelper.sin(f * ((float)Math.PI / 180F));
float f3 = MathHelper.cos(f7 * ((float)Math.PI / 180F)) * MathHelper.cos(f * ((float)Math.PI / 180F));
float f4 = MathHelper.sqrt(f1 * f1 + f2 * f2 + f3 * f3);
float f5 = 3.0F * ((1.0F + (float)j) / 4.0F);
f1 = f1 * (f5 / f4);
f2 = f2 * (f5 / f4);
f3 = f3 * (f5 / f4);
playerentity.addVelocity((double)f1, (double)f2, (double)f3);
playerentity.startSpinAttack(20);
if (playerentity.isOnGround()) {
    float f6 = 1.1999999F;
    playerentity.move(MoverType.SELF, new Vector3d(0.0D, (double)1.1999999F, 0.0D));
}

SoundEvent soundevent;
if (j >= 3) {
    soundevent = SoundEvents.ITEM_TRIDENT_RIPTIDE_3;
} else if (j == 2) {
    soundevent = SoundEvents.ITEM_TRIDENT_RIPTIDE_2;
} else {
    soundevent = SoundEvents.ITEM_TRIDENT_RIPTIDE_1;
}

worldIn.playMovingSound((PlayerEntity)null, playerentity, soundevent, SoundCategory.PLAYERS, 1.0F, 1.0F);rEntity)null, playerentity, soundevent, SoundCategory.PLAYERS, 1.0F, 1.0F);

发现这一动作只是短时间向一方向增速,并不是预想中的动作。
有没有可以参考的mod


FledgeXu


你可以给玩家一个斜向上的速度,玩家在下落的时候,自然就是有落地暴击感觉了。


Guy_Z


有这样做过,效果不太好,这样的动作更像是被抛上天的感觉


FledgeXu


想不出什么更好的办法。



能不能斜上加速,几秒后再给一个向下的速度,就有一种劈的感觉了


Snownee


自己订阅TickEvent,实现一个计划刻列表。或者使用EffectInstance,在里面写逻辑。


第一种的参考。

system


该主题在最后一个回复创建后7天后自动关闭。不再允许新的回复。