本帖最后由 好大一坨翔哟 于 2022-12-4 00:49 编辑
解决方法: 看二楼.....
解决方法: 看二楼.....
跳跃可以用moveevent的from和to判断 跳砍可以去damagecause里看看
本帖最后由 2000000 于 2022-11-30 16:33 编辑
您可以通过监听EntityDamageByEntityEvent 并判断onGround以及FallDistance
player.getFallDistance() > 0 && !player.isOnGround()
这只是判断玩家攻击时是否在空中或是否是跳起来的,并不能用于判断玩家此次的攻击是否为暴击
暴击需要更多的判断流程 (这可能在高版本拥有更简单的方法,我不太清楚),查阅Wiki以及Doc可以帮助到您。
我所使用的检查暴击的方法为:
具体为什么需要这么多的判断流程,请查看 Wiki -> https://minecraft.fandom.com/wiki/Damage#Critical_hit
我这里并没有写攻击冷却的检查以及缓降的检查,所以您还需要补充它
您可以通过监听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 版]
我这里并没有写攻击冷却的检查以及缓降的检查,所以您还需要补充它
如果你的跳砍指的是暴击的话
EntityDamageByEntityEvent#isCritical()
EntityDamageByEntityEvent#isCritical()
本帖最后由 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 ...
感谢~ 暂时满足了需求