好大一坨翔哟
本帖最后由 好大一坨翔哟 于 2022-12-4 00:49 编辑

解决方法: 看二楼.....

A1MERCet
跳跃可以用moveevent的from和to判断 跳砍可以去damagecause里看看

2000000
本帖最后由 2000000 于 2022-11-30 16:33 编辑

您可以通过监听EntityDamageByEntityEvent 并判断onGround以及FallDistance
player.getFallDistance() > 0 && !player.isOnGround()

这只是判断玩家攻击时是否在空中或是否是跳起来的,并不能用于判断玩家此次的攻击是否为暴击
暴击需要更多的判断流程 (这可能在高版本拥有更简单的方法,我不太清楚),查阅Wiki以及Doc可以帮助到您。

我所使用的检查暴击的方法为:

    public boolean isCritical(Player player) {
        return player.getFallDistance() > 0 &&
                !player.isOnGround() &&
                !player.isInsideVehicle() &&
                !player.hasPotionEffect(PotionEffectType.BLINDNESS) &&
                player.getLocation().getBlock().getType() != Material.LADDER &&
                player.getLocation().getBlock().getType() != Material.WATER &&
                player.getLocation().getBlock().getType() != Material.VINE;
    }


具体为什么需要这么多的判断流程,请查看 Wiki -> https://minecraft.fandom.com/wiki/Damage#Critical_hit

近战暴击的要求是:

一个玩家必须正在坠落。
玩家不能在地上。
玩家不得站在梯子或任何类型的藤蔓上。
玩家不能在水中。
玩家不得受到失明的影响。
玩家不得受到缓降的影响。
玩家不得骑在实体上。
玩家的速度不得超过步行速度(如飞行或短跑。‌‌ [ 仅限Java 版])
基本攻击不得因冷却而降低至 84.8% 或更低。‌‌ [ 仅限Java 版]


我这里并没有写攻击冷却的检查以及缓降的检查,所以您还需要补充它

‮tcejorPoiK
如果你的跳砍指的是暴击的话
EntityDamageByEntityEvent#isCritical()

2000000
本帖最后由 2000000 于 2022-12-2 00:38 编辑

误发 请看我的前一条回复

好大一坨翔哟
A1MERCet 发表于 2022-11-30 05:02
跳跃可以用moveevent的from和to判断 跳砍可以去damagecause里看看

emm damagecause 没有跳砍 或者暴击的内容

好大一坨翔哟
‮tcejorPoiK 发表于 2022-11-30 07:59
如果你的跳砍指的是暴击的话
EntityDamageByEntityEvent#isCritical()

emmm 我并没有找到EntityDamageByEntityEvent#isCritical()此方法
近似的只有弓箭的 AbstractArrow#isCritical()
我是用的的api是spigot-1.12

好大一坨翔哟
2000000 发表于 2022-11-30 05:12
您可以通过监听EntityDamageByEntityEvent 并判断onGround以及FallDistance
player.getFallDistance() > 0  ...

感谢~ 暂时满足了需求