本教程将会教你如何在生存模式中利用游戏漏洞来复制点燃的TNT实体(下文简称为复制TNT)。
此漏洞未必对所有版本有效。该漏洞被修复后,下文所述的信息将不再适用。
请慎重对待。
为什么这么做?
复制TNT看似毫无意义,但实际上相当有用。通过将复制TNT与史莱姆飞行器所结合,你可以快速的清理大片的地形来建造空置域,以提高一些机器的效率或是减少卡顿。还可以方便的去清除大片的山脉或是丘陵。
原理
TNT复制的原理与活塞机制有关。在活塞被激活时,活塞会用深度的方法检测其前方需要被推动的所有方块,将其坐标加入到一个列表中(搜索顺序靠后的先存储在列表)。之后,活塞会触发推动方块,这些方块将均变为36号方块,并产生一个Block Event事件。此时,若你在活塞推出的2游戏刻过程中给TNT方块一个NeighborChanged更新(一般使用失活的珊瑚扇来达成这一效果),那么就会使TNT触发,生成一个点燃的TNT实体。2游戏刻后,活塞的推出方块时间结束,活塞会检测原来位置上的方块,在活塞前方一格处生成新的结构,而TNT就重新作为方块被推出,以达成复制。[1]
content=
活塞的更新规律
活塞在激活时会进入启动延迟,在Block Event事件(下文简称BE事件)启动,此时活塞需要检测自身的状态,在允许推出时开始推出。活塞的推出过程实际是一个将方块依次变为36号方块的过程,这一过程依赖一个列表,而列表是有序的,所以我们可以对其的顺序进行研究。按照顺序,要被移动的方块首先被移除,这一过程给予毗邻方块更新。随后每一个36号方块将会被放置在所有要被移动的方块的运动趋势位上,这一过程产生方块变化。活塞在最后产生活塞臂。36号方块表现为移动中的方块,但这是游戏渲染产生的效果,在理论分析中我们忽略这一过程。在2游戏刻后的Tile Entity事件(下文简称为TE事件),36号方块将自身变为对应的方块,这一过程产生方块更新和方块变化。而活塞收回的过程和推出的过程是类似的,但活塞臂必须先收回,否则其他方块无法在活塞臂的位置创建36号方块。
当活塞在激活过程中遇到信号下降沿(例如只被激活了1游戏刻),此时活塞必须收回,但前方方块全为36号方块,活塞一个也不会将其拉回。比较特殊的是活塞面前的方块,活塞会将它在BE事件到位,但也不会收回。
在以上运动过程中,并没有提到活塞自检,事实上活塞不会单独地对自己进行检查,自检发生在活塞接收到方块更新信号时,而活塞本身的推出,周围方块的变化都会产生方块更新。例如活塞伸出收回往复持续的过程,就是活塞面前的方块从36号方块变为普通方块时给予方块更新,使得活塞再次推出的。
活塞推动方块和红石线的更新不同,活塞推动方块有一个客观存在的列表,因此这一过程有着严格的规律性,我们因此可以得出活塞推动次序的规律,换言之:活塞推动方块的次序不仅具有时间平移对称性,也具有空间平移对称性。换句话说,活塞的行为随时间稳定,也随空间稳定,只要活塞的装置不被旋转。此外,即使对于不同的活塞朝向,活塞的规律也是类似的,可以分类讨论。 除了中继器等NTE元件和活塞外,36号方块也遵循“先被更新先激活”的规律,在这里是指:先被推动的36号方块先到位。
活塞更新的次序规律
有关活塞在运动前后更新规律已经叙述详尽了,下面针对研究活塞推动的列表进行分析,这主要包括活塞推方块的更新规律和粘液块粘动方块的更新规律。关于前者,其必须遵循一条基本原则,那就是不能在已有方块的位置创建36号方块。因此,当活塞推动一列方块时,总是最远端的方块先更新。并且,如要使一列方块发生移动,每个方块移动前,总是先移动其趋势位的方块。这一点对于粘液块粘动后方的方块也是一样的,就好像方块不是被粘液块从后方粘动的,而是被活塞从反方向推出的。换句话说,活塞推动一列方块和粘液块从后方粘动一列方块个次序规律是相同的。
将完全相同的装置旋转,在不同朝向下进行实验,便可以得到在完全对等的位置下,各方向的优先级顺序:
东>西>南>北>上>下
这一规律可以被归入东南法则。方法
以下的所有建造方法理论上在Java版1.13及其后所有版本均可行。