方块的碰撞区域BUG存在已久了,但是比较鲜为人知
于是我来科普讲解一下
这个BUG主要较明显地作用在于这3组方块中
第一组:任何材质做成的阶梯
第二组:铁栅栏,玻璃片
第三组:普通箱子,铁砧
什么是碰撞区域呢?
碰撞区域就是代码用于检测entity与方块碰撞的区域界限
例如左边的铁栅栏,它的碰撞区域就是一个十字型的柱体
当entity尝试穿过这个碰撞区域的界面时,就会被阻挡
再例如右边的栅栏,都成一字形片状(长度不等)
这个BUG就存在于碰撞区域的处理上
由于这4个都是铁栅栏,有同样的方块ID
但是MC代码并没有把每一个不同铁栅栏的碰撞区域给记录下来
而是把当前“活动”的铁栅栏的碰撞区域作为所有铁栅栏的碰撞区域
我们现在玩家指针指向于这一个铁栅栏,成短一字形
于是所有其他的铁栅栏,包括本应有十字形碰撞区域的左边的铁栅栏
也只有了这一字形的碰撞区域
所有方块的碰撞区域都是如此
例如阶梯
玩家指向其中一个阶梯,所有阶梯的碰撞区域都会被这个阶梯的碰撞区域代替
例如指向右边的阶梯,那么左边的阶梯就会只有L型的碰撞区域了
箱子也不例外,不过比较难注意
箱子实际上并不占整个方块的大小,而实际上是边长0.875的立方体
当鼠标指向铁块上的箱子时,注意,这个箱子是和右边的箱子相连的
因此这个箱子右侧的碰撞区域实际上延伸到最右侧
因此所有箱子的右侧的碰撞区域都被延伸了
如此,利用这个BUG,我们可以设计出特别的装置
这个装置是信号接收器,媒介为铁栅栏
建造方法很简单,如图建就可以了
中继器档位为4tick(满档)
右下方的拉杆为接收器的开关
右上方的红石火把表示是否接受到信号