MC的暴击,并不等于跳劈
“暴击”,或者“会心”,指的都是同一件事,用英文说就是Critical。之后我们统一用暴击来称呼。

https://minecraft.fandom.com/zh/wiki/%E8%BF%91%E6%88%98%E6%94%BB%E5%87%BB
中文的wiki不在伤害词条里,在单独的近战攻击词条里。如下:

我们截取一下1.12.2Forge版,EntityPlayer的相关源码:
其中,
也就是说,暴击是仅通过以下逻辑决定的,不含随机要素:
攻击蓄力90%以上。tick的计数按照+0.5tick计算;
下落距离>0;
不在地面上;
并非正在爬梯子;
并不在水体里(但下雨淋湿无所谓);
没有获得致盲效果;
并未处在骑乘状态;
目标必须是LivingBase,即对弹射物等的攻击不会暴击,但对船、盔甲架可以;
不能处于冲刺状态;
伤害必须大于0(在省略的代码部分里);
Forge所发布的事件未取消暴击。
“跳劈”是个很不精确的描述。在跳起来后,上升的过程中是不会暴击的,下落的过程中会——但某些模组通过持续清空下落距离来实现免疫摔落伤害,这样就会导致不会暴击,且《原神12》的下落攻击也无法触发。(正确的免疫摔落伤害应该在摔落事件里处理伤害系数,不应该处理下落高度)。
即使如此,上升过程中不暴击,下落过程中会。但,如果在下落的过程中,因为获得失重DEBUFF,或者因为二段跳等原因又开始上升,那么这时候它还是可以暴击的。因为,上升的过程并不会减少或清空下落高度,触地才会。
Forge知道玩家想改变这个逻辑,做什么暴击率之类的东西,所以给了个事件,CriticalHitEvent。你可以在这里手动覆盖暴击逻辑,自行判断决定是否需要暴击(通过修改Result),还可以修改暴击后的伤害系数。从前面可以看到,暴击伤害默认为1.5倍。
但既然这玩意都写在EntityPlayer了,各位也就明白了,怪物是不会走这套暴击逻辑的。跳起来也一样。
还有一件事容易忽略,那就是这个是attackTargetEntityWithCurrentItem,他只在普通近战攻击里才会调用。箭矢等弹射物暴击不吃这套。
箭矢确实有个Critical字段,但那主要决定是否有暴击粒子,并不会走这个事件。箭矢的那个critical数据为true的时候,伤害会如下方式进行增加:
也就是约莫会增加0~50%的伤害。这个过程不受CriticalEvent的控制,且怪物和玩家的箭矢都受到影响。
如果你想把暴击系统补全的完善一点,还是相当麻烦的。你得设法抵消原版的箭矢暴击,给玩家的非近战补上暴击,还要给怪物的全都来一遍。原神12基于CrticalEvent引入了暴击率、暴击伤害系统,但那没有正确地处理玩家箭矢的问题。
另一个尴尬的问题在于,假如你实现了“暴击率”系统,通过你的暴击率来重新进行随机判定是否暴击,那你只能覆盖原有的结果。如果其他mod也引入了一共暴击率系统,那你们就会各自为战,很可能干扰对方的“是否暴击”,然后还把暴击伤害倍率给搞的乱七八糟。这点没什么特别好的办法,只能随缘。毕竟,你写的再规范也架不住对方直接给覆盖了。