Ceiling Hover/ja
Ceiling Hoverは、バウンドする特性のあるブロック(スライムブロック、1.12以降はベッドも)と天井の間で「浮遊」できるバグである。
2.001b下にバウンド特性のブロックがある天井の下でジャンプすると発動する。
解説
プレイヤーがブロックと垂直方向に(床か天井に)接触すると、衝突判定が適用される。
ほぼ全てのブロックにおいて、これはプレイヤーの垂直方向の速度を0に設定するだけである。
/* Blockクラス内 */
public void onVerticalCollision(Entity entityIn)
{
entityIn.motionY = 0.0D;
}
ただし1つだけ例外がある: スライムブロック(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.2m下にあるブロックのものになる(天井の判定も…)。
1.8125bcでのCeiling Hoverの手順の再確認:
- 1.8125bcの下でジャンプすると、プレイヤーの0.2m下のブロック(地面)の判定が適用される。
- そのブロックがスライムブロックの場合、垂直方向の速度は0に設定されず、プレイヤーは天井の真下に浮かんだままになる。
- 手順(2)を、プレイヤーの垂直方向の速度が重力によって負になるまで繰り返す。
注: このバグの持続時間は数tickだが、跳躍力上昇を使用することで延長できる。スニークすることでいつでも中断できる。
結論
このバグは重大なものではない: ゲームに与える影響は小さく、特定の配置でのみしか活用できない。