灵魂沙

From Minecraft Parkour Wiki
Jump to navigation Jump to search
This page is a translated version of the page Soulsand and the translation is 100% complete.
Other languages:
Soulsand.png

灵魂沙是一种特殊的方块,能减缓其上方生物的行走速度。


特性

  • 灵魂沙仅有 0.875b 高,意味着其受到冰与粘液块的滑度影响。
    在下方有冰或粘液块的灵魂沙上行走比在一般的灵魂沙上行走要更慢。

灵魂沙通过在每 Tick 结束时将实体的水平速度乘以 0.4 来减缓其速度。

  • 玩家在空中时也可能受到减速效果的影响,尤其是在跳跃的最后一 Tick。
    产生效果的唯一条件就是玩家的边界箱与灵魂沙所在的体素碰撞(每一面都进入 0.001m)。
  • 减速效果可以叠加:玩家所站的每一个灵魂沙都会使玩家的速度乘以 0.4。
    因此,在两个灵魂沙的方块间隙上行走比在单个灵魂沙上要稍慢一些。
  • 玩家可以站在灵魂沙的边缘(最多进入 0.001m)来避免被减速。
    大部分情况下,沿边缘跳跃可以使灵魂沙跳跃更简单。


解释

如下是一个稍微简化的代码片段,解释了灵魂沙的特性:
/* 位于 Entity.java, 在每刻结束时(从 Entity.moveEntity)被调用  */
protected void doBlockCollisions()
{
    BlockPos posMin = new BlockPos(this.minX+0.001, this.minY+0.001, this.minZ+0.001);
    BlockPos posMax = new BlockPos(this.maxX-0.001, this.maxY-0.001, this.maxZ-0.001);

    for (int i = posMin.getX(); i <= posMax.getX(); ++i)
    {
        for (int j = posMin.getY(); j <= posMax.getY(); ++j)
        {
            for (int k = posMin.getZ(); k <= posMax.getZ(); ++k)
            {
                BlockPos pos = new BlockPos(i, j, k);
                Block block = getBlockState(pos);
                block.onEntityCollidedWithBlock(this); //涉及到的方块可以查看附录。
            }
        }
    }
}


/* 位于 BlockSoulSand.java, 在上方代码中被调用 */
public void onEntityCollidedWithBlock(Entity entityIn)
{
    entityIn.motionX *= 0.4;
    entityIn.motionZ *= 0.4;

    //注意:每个灵魂沙应用的减速效果是各自独立的。
}
附录:

OnEntityCollidedWithBlock.png

(表中隐去的方块只涉及到特定实体与方块的互动,例如箭射中木按钮)


版本差异

1.13

灵魂沙在水下放置时,会产生向上的气泡柱,能够将玩家向上推动。


1.15

关于灵魂沙的主要移动变化:

  • 不再受到下方方块滑度的影响(所有高度大于 0.5b 的方块都是如此)。
  • 减速效果现在仅适用于顶面内部。最外圈的 0.3m 与普通方块相同。
  • 玩家站在其上方 0.5b 以内时也会受到减速影响(包括站在上方的台阶上)。
  • 如果玩家进入灵魂沙内部,可以发现其中有可以站立的“中间层”。中间层的高度分别为 0.125,0.25,0.375,0.5,0.625 与 0.75。前四层会受到滑度影响。