鐵砧/箱子漏洞

From Minecraft Parkour Wiki
This page is a translated version of the page Anvil/Chest Manipulation and the translation is 100% complete.
Other languages:

鐵砧沒有固定的碰撞箱。相反,所有變體(北、東、南、西)都有一個單獨的碰撞框,每當玩家看向其中一個時(或通過執行後面列出的其他操作),碰撞箱都會更新。正常鐵砧、輕微損壞的鐵砧和嚴重損壞的鐵砧是相同的。

這對箱子也有同樣的的效果,但僅有大箱子(中的一半)擁有不同的碰撞箱變體。箱子和陷阱箱是相互獨立的。


通過站在鐵砧/箱子旁邊,看向另一種鐵砧/箱子,玩家就能更新碰撞箱從而「卡進方塊內」。同樣技巧還可以用來人為延長鐵砧/箱子的長度,並比預期多站一到兩個像素。


注意,如果看向原來的方塊,則碰撞箱將恢復正常。


嗶哩嗶哩上搬運自 cyn 對箱子/鐵砧漏洞的演示


碰撞箱俯視圖比較


鐵砧是 1×0.75 邊界箱(16×12 像素),可以沿 X 軸或 Z 軸定向。

單個箱子是 0.875×0.875 邊界框(14×14 像素)。「大箱子」的一側會延伸 1 個像素。


在圖中,較深的顏色表示所有變體共有的碰撞區域:操作時應該站在那裏以免在操作過程中掉落。

較淺的顏色表示特定於一種變體的碰撞區域:操作時應該站在那裏以便在操作過程中卡進方塊內。



說明

BlockAnvil 和 BlockChest 類規定了 setBlockBoundsBasedOnState 方法,如下所示:

 
/* 简化代码 */

/* 位于 BlockAnvil.java */
public void setBlockBoundsBasedOnState(BlockPos pos)
{
    EnumFacing enumfacing = getBlockState(pos).getValue(FACING);

    if (enumfacing.getAxis() == EnumFacing.Axis.X)
    {
        this.setBlockBounds(0.0, 0.0, 0.125, 1.0, 1.0, 0.875);
    }
    else
    {
        this.setBlockBounds(0.125, 0.0, 0.0, 0.875, 1.0, 1.0);
    }
}


/* 位于 BlockChest.java */
public void setBlockBoundsBasedOnState(BlockPos pos)
{
    if (getBlockState(pos.north()).getBlock() == this)
    {
        this.setBlockBounds(0.0625, 0.0, 0.0, 0.9375, 0.875, 0.9375);
    }
    else if (getBlockState(pos.south()).getBlock() == this)
    {
        this.setBlockBounds(0.0625, 0.0, 0.0625, 0.9375, 0.875, 1.0);
    }
    else if (getBlockState(pos.west()).getBlock() == this)
    {
        this.setBlockBounds(0.0, 0.0, 0.0625, 0.9375, 0.875, 0.9375);
    }
    else if (getBlockState(pos.east()).getBlock() == this)
    {
        this.setBlockBounds(0.0625, 0.0, 0.0625, 1.0, 0.875, 0.9375);
    }
    else //single chest
    {
        this.setBlockBounds(0.0625, 0.0, 0.0625, 0.9375, 0.875, 0.9375);
    }
}


這個方法是從這些地方調用的(與 BlockChest 相同):


有以下操作可以觸發碰撞箱改變:

  • 看向該方塊(不一定需要使選擇框顯示)
  • 向該方塊射箭(持續有效)。
  • 通過對周圍環境的更新,使方塊重新渲染。
  • 利用下雨(隨機)更新方塊。


限制

在單人遊戲中,玩家通常可以穿過鐵砧或箱子。

在多人遊戲中,反作弊通常會阻止玩家完全穿過鐵砧或箱子。


此機制已在 1.9 中被修復(每個變體現在都有自己的碰撞箱)。