MC的暴擊,并不等于跳劈
“暴擊”,或者“會心”,指的都是同一件事,用英文說就是Critical。之后我們統(tǒng)一用暴擊來稱呼。

https://minecraft.fandom.com/zh/wiki/%E8%BF%91%E6%88%98%E6%94%BB%E5%87%BB
中文的wiki不在傷害詞條里,在單獨的近戰(zhàn)攻擊詞條里。如下:

我們截取一下1.12.2Forge版,EntityPlayer的相關(guān)源碼:
其中,
也就是說,暴擊是僅通過以下邏輯決定的,不含隨機要素:
攻擊蓄力90%以上。tick的計數(shù)按照+0.5tick計算;
下落距離>0;
不在地面上;
并非正在爬梯子;
并不在水體里(但下雨淋濕無所謂);
沒有獲得致盲效果;
并未處在騎乘狀態(tài);
目標必須是LivingBase,即對彈射物等的攻擊不會暴擊,但對船、盔甲架可以;
不能處于沖刺狀態(tài);
傷害必須大于0(在省略的代碼部分里);
Forge所發(fā)布的事件未取消暴擊。
“跳劈”是個很不精確的描述。在跳起來后,上升的過程中是不會暴擊的,下落的過程中會——但某些模組通過持續(xù)清空下落距離來實現(xiàn)免疫摔落傷害,這樣就會導(dǎo)致不會暴擊,且《原神12》的下落攻擊也無法觸發(fā)。(正確的免疫摔落傷害應(yīng)該在摔落事件里處理傷害系數(shù),不應(yīng)該處理下落高度)。
即使如此,上升過程中不暴擊,下落過程中會。但,如果在下落的過程中,因為獲得失重DEBUFF,或者因為二段跳等原因又開始上升,那么這時候它還是可以暴擊的。因為,上升的過程并不會減少或清空下落高度,觸地才會。
Forge知道玩家想改變這個邏輯,做什么暴擊率之類的東西,所以給了個事件,CriticalHitEvent。你可以在這里手動覆蓋暴擊邏輯,自行判斷決定是否需要暴擊(通過修改Result),還可以修改暴擊后的傷害系數(shù)。從前面可以看到,暴擊傷害默認為1.5倍。
但既然這玩意都寫在EntityPlayer了,各位也就明白了,怪物是不會走這套暴擊邏輯的。跳起來也一樣。
還有一件事容易忽略,那就是這個是attackTargetEntityWithCurrentItem,他只在普通近戰(zhàn)攻擊里才會調(diào)用。箭矢等彈射物暴擊不吃這套。
箭矢確實有個Critical字段,但那主要決定是否有暴擊粒子,并不會走這個事件。箭矢的那個critical數(shù)據(jù)為true的時候,傷害會如下方式進行增加:
也就是約莫會增加0~50%的傷害。這個過程不受CriticalEvent的控制,且怪物和玩家的箭矢都受到影響。
如果你想把暴擊系統(tǒng)補全的完善一點,還是相當麻煩的。你得設(shè)法抵消原版的箭矢暴擊,給玩家的非近戰(zhàn)補上暴擊,還要給怪物的全都來一遍。原神12基于CrticalEvent引入了暴擊率、暴擊傷害系統(tǒng),但那沒有正確地處理玩家箭矢的問題。
另一個尷尬的問題在于,假如你實現(xiàn)了“暴擊率”系統(tǒng),通過你的暴擊率來重新進行隨機判定是否暴擊,那你只能覆蓋原有的結(jié)果。如果其他mod也引入了一共暴擊率系統(tǒng),那你們就會各自為戰(zhàn),很可能干擾對方的“是否暴擊”,然后還把暴擊傷害倍率給搞的亂七八糟。這點沒什么特別好的辦法,只能隨緣。畢竟,你寫的再規(guī)范也架不住對方直接給覆蓋了。