Ceiling Hover/zh: Difference between revisions

From Minecraft Parkour Wiki
Content added Content deleted
No edit summary
No edit summary
Line 56: Line 56:




让我们回顾一下 1.8125bc 天花板悬停设置的步骤:
让我们回顾一下 1.8125bc 天花板悬停摆放的步骤:


#在 1.8125bc 下跳跃会玩家下方 0.2 米的方块发生垂直碰撞地面)
#在 1.8125bc 下跳跃会将垂直碰撞应用于玩家下方 0.2 米的方块(地面)
#如果下方方块是黏液块,那么垂直速度不会设置为 0,玩家仍然悬停在天花板下。
#如果下方方块是黏液块,那么垂直速度不会设置为 0,玩家仍然悬停在天花板下。
#重复步骤(2),直到玩家的垂直速度由于重力而变为负值。
#重复步骤(2),直到玩家的垂直速度由于重力而变为负值。




'''注意:'''这个小故障只会发生几 Ticks,但通过跳跃提升持续时间会更长。天花板悬停可以随时通过潜行中断。
'''注意:'''这个小故障只会发生几 Ticks,但可以通过跳跃提升延长持续时间。天花板悬停可以随时通过潜行中断。




Line 70: Line 70:
== 结论 ==
== 结论 ==


这个故障非常微不足道:它不会以任何方式破坏游戏,并且需要使用非常精准的设置
这个故障影响极小:它不会以任何方式破坏游戏,并且需要非常精准的摆放才能利用。

Revision as of 12:37, 28 January 2022

Other languages:
在 1.8 中,這是唯一能觸發天花板懸停的擺放(1.8125bc 下方有史萊姆)

天花板懸停是一個能使玩家在天花板和有彈性的方塊(史萊姆,或者 1.12 以上的床)之間「懸停」的故障。 跳入天花板且下方 2.001b 的方塊具有彈性特性時便可以觸發。




解釋

每當玩家在垂直方向上與一個方塊(地面或天花板)垂直碰撞時,遊戲將應用碰撞物理。

對於幾乎所有的方塊來說,這代表將玩家的垂直速度設為 0。

/* 在 Block 类中 */
public void onVerticalCollision(Entity entityIn)
{
    entityIn.motionY = 0.0D;
}


但有一個例外:粘液塊(和 1.12+ 中的床)。

/* 在 BlockSlime 类中 */
public void onVerticalCollision(Entity entityIn)
{
    if (entityIn.isSneaking())
        super.onVerticalCollision(entityIn);
    else if (entityIn.motionY < 0.0D)
        entityIn.motionY = -entityIn.motionY;
}


  • 若玩家在潛行,則會被視為常規碰撞(垂直速度被設為 0)
  • 否則程序會檢查玩家的速度是否為負,然後將其反轉。


需要注意,如果玩家以某種方式以正速度移動(且沒有潛行),則什麼都不會發生。

實際上,正是這一點觸發了這個小故障。


當遊戲檢測到垂直碰撞時,它會考慮在玩家位置下 0.2 米的方塊上應用碰撞物理(甚至碰到天花板也會如此……)


讓我們回顧一下 1.8125bc 天花板懸停擺放的步驟:

  1. 在 1.8125bc 下跳躍會將垂直碰撞應用於玩家下方 0.2 米的方塊(地面)。
  2. 如果下方方塊是黏液塊,那麼垂直速度不會設置為 0,玩家仍然懸停在天花板下。
  3. 重複步驟(2),直到玩家的垂直速度由於重力而變為負值。


注意:這個小故障只會發生幾 Ticks,但可以通過跳躍提升延長持續時間。天花板懸停可以隨時通過潛行來中斷。



結論

這個故障影響極小:它不會以任何方式破壞遊戲,並且需要非常精準的擺放才能利用。