Ceiling Hover/zh: Difference between revisions

From Minecraft Parkour Wiki
Content added Content deleted
No edit summary
No edit summary
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>
[[File:Slime Hover Setup.png|thumb|在 1.8 中,这是唯一可用于执行天花板悬停的装置(1.8125bc并且下方有史莱姆)]]
[[File:Slime Hover Setup.png|thumb|在 1.8 中,这是唯一能触发天花板悬停的摆放(1.8125bc 下方有史莱姆]]


<youtube>bijMuKlme7k</youtube>
<youtube>bijMuKlme7k</youtube>


天花板悬停是一个能使玩家在天花板和有弹性的方块(史莱姆,或者1.12以上的床)之间空中“悬停”的故障。它可以通过跳入天花板执行(跳跃取消),使天花板下方2.001b的方块具有弹性
天花板悬停是一个能使玩家在天花板和有弹性的方块(史莱姆,或者 1.12以上的床)之间“悬停”的故障。
当跳跃,且天花板下方 2.001 格处的方块有弹性特性时会触发。




Line 11: Line 12:




<span id="Explanation"></span>
== 解释 ==
== 解释 ==


每当玩家与一个方块(地或天花板)垂直碰撞时,游戏将应用碰撞物理。
每当玩家在垂直方向上与一个方块(地或天花板)垂直碰撞时,游戏将应用碰撞物理。


对于几乎所有的方块来说,这意味着将垂直速度设为0。
对于几乎所有的方块来说,这代表玩家的垂直速度设为 0。


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
/* in class Block */
/* Block 类中 */
public void onVerticalCollision(Entity entityIn)
public void onVerticalCollision(Entity entityIn)
{
{
Line 30: Line 32:


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
/* in class BlockSlime */
/* BlockSlime 类中 */
public void onVerticalCollision(Entity entityIn)
public void onVerticalCollision(Entity entityIn)
{
{
Line 41: Line 43:




* 若玩家在潜行,则会被视为常规碰撞(垂直移动0)
* 若玩家在潜行,则会被视为常规碰撞垂直速度被设为 0)
* 否则会检查玩家的速度是否为负,然后将其反转。
* 否则程序会检查玩家的速度是否为负,然后将其反转。






注意,如果玩家以某种方式以正速度移动(且没有潜行),则什么都不会发生。
需要注意,如果玩家以某种方式以正速度移动(且没有潜行),则什么都不会发生。


实际上,这就是这个小故障的原因。
这就是导致此错误的原因。






当游戏检测到垂直碰撞时,它会考虑在玩家位置下0.2米的方块应用碰撞物理(就算是天花板碰撞……)
当游戏检测到垂直碰撞时,它会考虑在玩家位置下 0.2 米的方块应用碰撞物理(甚至碰到天花板也会如此……)




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


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




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








<span id="Consequences"></span>
== 结论 ==
== 结论 ==


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

Latest revision as of 04:58, 16 August 2023

Other languages:
在 1.8 中,这是唯一能触发天花板悬停的摆放(1.8125bc 下方有史莱姆)

天花板悬停是一个能使玩家在天花板和有弹性的方块(史莱姆,或者 1.12 及以上的床)之间“悬停”的故障。 当跳跃,且天花板下方 2.001 格处的方块有弹性特性时会触发。




解释

每当玩家在垂直方向上与一个方块(地面或天花板)垂直碰撞时,游戏将应用碰撞物理。

对于几乎所有的方块来说,这代表将玩家的垂直速度设为 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,但可以通过跳跃提升延长持续时间。天花板悬停可以随时通过潜行来中断。



结论

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