傷害跳躍

From Minecraft Parkour Wiki
This page is a translated version of the page Damage Boost and the translation is 100% complete.
Other languages:

傷害跳躍是一種機制,通過以某種方式受到傷害以提升跳躍高度。

本頁面仍需要一個清晰的解釋以及代碼分析,但主要的想法列在此處。

玩家可以由自然因素受到傷害:摔落,火焰,仙人掌,藥水等等……

有意思的是,溺水並不影響玩家的速度。在舊版本的遊戲中,溺水會不斷地將玩家向下壓而使他們困在水中。但是在 1.8 中受到其他種類的傷害,例如藥水,同樣會使你面對這樣的困境。

在跑酷服務器中通常會禁用傷害,但這個機制在其它地方有很大作用,例如速通跑酷地圖。



介紹:

當受傷時,信息會通過數據包傳遞給服務器,然後再返回給玩家。對於集成服務器(單人)和專用服務器(多人)都是如此。在這個過程中,玩家的運動被修改:

  • 當玩家的速度與服務器同步時,玩家在受到傷害時保持近似相同的速度。
  • 當玩家的速度與服務器不同步時,玩家似乎會在受到傷害時加速,因為它是以預期的速度更新的。


目前還不清楚玩家的速度何時和如何失去同步,但這裡有一些已知的情況:

  • 跑出一個方塊,並在最後一刻跳躍
  • 跳到黏液塊上
  • 從梯子上下來
  • 處於水中或岩漿中

我們懷疑,失去同步與 NetHandler 獨立於移動代碼調用 jump() 方法有關。


注意:

  • 近似這個詞特指由於雙精度值在數據包中的儲存方式,速度是以1/8000為單位向下取整的。
  • 自然原因造成的傷害與擊退不同,擊退是在玩家被實體擊中時應用的。


同步傷害跳躍

在與服務器同步的情況下受到傷害時可以保持玩家在下一刻的速度。

目的是利用這種速度守恆來保持儘可能多的向上速度,即跳躍最開始的速度(0.42m/t)。在最佳情況下,跳躍高度的最大值達到約 1.6685 米,使玩家能跳上 1.625 格高的方塊。


不同步時的傷害跳躍

不同步的傷害讓玩家原地加速(實際上僅僅是玩家的速度被更新)。通過在粘液塊(或 1.12+ 中的床)上反彈,可以將向下加速度轉為向上加速度。

需要注意的是,通過在方塊邊緣落地,玩家可以在粘液塊上受到摔落傷害的同時反彈。

在非同步狀態下受到傷害可能會產生尚未完全了解的其他影響。特別是,玩家可能會從跳躍中過早落地,甚至激活假跳躍


與跳躍提升的聯動

顯然,跳躍提升效果可以與傷害跳躍相結合,以實現更高的跳躍或反彈。跳躍提升等級 129 或更高時,雖然玩家無法跳得更高(由於服務器以字節而不是無符號字節發送藥水效果),但仍然受到傷害提升的影響,因為這是在服務器端計算的。

當玩家跳躍或從跳躍中降落並受到傷害時,他們將以 3.9 m/t 的初始速度向上運動(該上限被硬編碼到速度包中)。

具體來說,對於252 - 256級的跳躍提升,玩家會跳的更低。在這種情況下,可以很容易地激活該故障。


注意: 129 - 249 級的跳躍提升僅通過在黏液塊上跳躍就可起效,因為負速度會被轉換成正向的垂直速度。