
无TNT复制通常指-无粘液球-无珊瑚扇-无矿车,本篇将举例水星嗷的两款三无TNT复制说明原理,位置性成因及修复方法.如果只想要知道修复方法的话请直接看最后位置性修复方法.
前置知识:阅读专栏Java版MC里的方向性.位置性从何而来? - 哔哩哔哩
第一种:

第二种:

首先我们需要知道所有TNT复制的核心原理-推动列表-.活塞工作依托于执行方块事件.在执行推出/拉回方块事件时首先会创建一个推动列表.利用推动列表进行TNT复制.分为活塞的工作(实现复制的理论)和复制的具体实现.
创建推动列表
摧毁方块(摧毁一推即掉推掉的方块,如树叶/甘蔗/花)
按推动列表创建B36方块(可以看做是为未来方块到位占位的方块)这个过程每创建一个B36会覆盖原位置的方块并且会逐个发出PP更新(状态更新)
删除方块,上一步会把一部分原方块替换为B36,但也还有剩余的原方块,这步是为了删除剩余的原方块.全部删除完成后按顺序发出PP更新(这步删除顺序是位置性随机的)
发出更新,原方块位置按推动顺序发出NC更新(方块更新)
活塞本体状态改变,发出NC更新和PP更新
注意某些特殊方块或特殊状态的方块被摧毁/覆盖/删除时会瞬时发出NC更新,这也是TNT复制的重点
这是活塞工作的过程,没看懂没关系.只有第二步是本篇TNT复制的重点.
TNT复制需要做的是在创建推动列表后激活原TNT,因为推动列表已经创建,所以TNT的B36仍会创建,到位时这个B36还会转化为新TNT.这两个TNT复制实现方法上是完全相同的.只是回推的信号源不同.下文将以开头第一个结构的TNT复制为例讲解.
0GT NU 敲击音符盒(侦测器添加计划)
2GT NTE 侦测器亮起(侦测器添加用于熄灭的计划)(活塞添加方块事件)
这里激活活塞是运用了QC激活(当活塞/粘性活塞/发射器/投掷器上方1格符合激活条件时,视作该元件可以激活.你可以模拟想象这些方块上面有个红石灯,红石灯可以亮则该元件可以被激活.)
2GT BE 活塞开始推出
4GT NTE 侦测器熄灭(活塞添加收回方块事件)
4GT BE 活塞开始收回
4GT TE TNT与侦测器(添加计划)到位(上方音符盒底部方块变化,乐器变化发出PP更新(侦测器侦测PP更新添加计划))红石粉指向侦测器

6GT NTE 两个侦测器分别亮起(分别添加用于熄灭的计划)(左边活塞添加推出方块事件),注意这时候粉是指向侦测器而非旁边混凝土的,激活TNT需要充能那个混凝土,所以这时候不会激活TNT
6GT BE(最重点的时候) 侦测器创建B36 TNT的B36覆盖原侦测器,因为这里侦测器是亮起状态,移除亮起状态的侦测器会瞬时发出NC更新,NC更新红石粉发现失去了侦测器15级能量源,发现旁边有14级的粉,于是红石粉变为13级(其实链粉卡顿的原因就是这个,粉还会判定旁边粉的能量,等到这个粉更新旁边的粉,旁边粉就会变成12级以此类推)变成13级后还要注意是先更新TNT还是先更新旁边的粉,这点很重要.直接导致了位置性的产生,后面会详细讲.更新到TNT(其实这时候红石粉还没有指向混凝土,但是激活的判定还是会判定为指向了混凝土可以被激活)TNT发现自己可以激活了于是变成实体.最后红石粉才会在状态上变成指向混凝土.
后面侦测器和TNT就正常到位,不再做时序分析(注意执行计划刻不包含是"亮起"还是"熄灭",我这里是用于熄灭,并非这个计划刻包含熄灭侦测器这个操作的信息.执行计划刻是会先检测方块状态根据情况进行状态改变的)
总结就是TNT的B36覆盖了亮起状态的侦测器,而这个行为会使侦测器输出位置发出NC更新(范围与正常工作亮起/熄灭相同)使红石粉更新并激活TNT.如果没有侦测器引粉,那么TNT会在6GT NTE时被激活,无法活到推动列表创建.如果没有覆盖亮起侦测器的NC更新,那么等到第四步发出NC更新时原TNT已经被删除了,插入NC更新是所有TNT复制最重要的一步.
前面已经谈到一点位置性的成因了(真的还有好多人认为是单纯方向性或跨区块问题,其实是位置性哇),完全知晓TNT复制的位置性的原因需要了解链粉的工作.
举个例子:
TNT复制中两个粉,15级A粉和14级B粉,A粉失去能量后:
A粉受到更新工作,周围B粉14级,于是工作变为13级发出更新
B粉受到更新工作,周围A粉13级,于是工作变为12级发出更新
A粉受到更新工作,周围B粉12级,于是工作变为11级发出更新
以此类推直到两个粉能量均为0级.结合栈的特性,如果A粉更新B粉先于更新TNT.那么A粉更新B粉工作,B粉工作更新A粉,A粉有新的更新任务,A粉更新顺序仍然是先更新B粉,B粉工作更新A粉,A粉新的更新任务还是先更新B粉.以此类推直到两粉均为0级.终于可以把之前没有发出的被插队的更新发出了.现在更新了TNT,但不妙的是A粉已经是0级了,无法激活TNT.这就是位置性的成因.
或者假设红石粉有1 2 3个位置的更新(讲解的模型,实际并不是这样).对于A粉,2更新B粉,3更新TNT.对于B粉,只有3更新A粉(这里随便假设哪个更新A粉都不影响结果)
A粉[变为13级]工作先后执行1 2(B粉[变成12级]先后执行1 2 3(A粉[变为11级]先后执行1 2(B粉[变为10级]先后执行1 2 3(以此循环)))))直到两粉变为0级,A粉终于将3发出,更新TNT.但无法激活TNT了.
通过上面的分析,我们知道了位置性的成因.位置性修复方法有两种思路.
1.使红石粉仍未熄灭时更新TNT.这个方法我称为增加更新源.
2.使红石粉工作完成时仍未完全熄灭.这个方法我称为引入能量源.
在第一款结构TNT复制中,仅有混凝土旁边的红石粉可以更新TNT.在第二款中,除了混凝土旁的红石粉可以更新到TNT,上方玻璃上的红石也可以更新到TNT.(老外验证是无位置性的,但是有因为红石粉实验性玩法和非原版环境不能用的例子,而且可以修复.所以还是放在这里讲了)
怎么增加更新源呢?答案就是直接将混凝土更换为音符盒.

将混凝土更换为音符盒有何不同呢?前面说过,位置性的原因是红石粉更新旁粉先于更新TNT.将混凝土更换为音符盒,那么如果红石粉更新音符盒先于旁粉.因为栈的特点,音符盒会先工作更新(音符盒被激活会发出NC更新和PP更新)TNT,TNT被激活.也就是说,如果红石粉更新TNT晚于旁粉,但更新音符盒先于更新旁粉,音符盒会直接更新TNT使激活(这里右边的粉也可以通过二阶毗邻更新音符盒).不过这个方法如果更新旁粉既先于TNT又先于音符盒就无效了(而且右边的粉更新左边粉先于更新音符盒),音符盒陷入了和TNT一样的境地.(なんちゃって在评论区指出,更改过后由位置性变为了方向性,其实是因为红石粉的每个更新核更新顺序仍然按照更新方向性执行.侦测器移除的nc更新触发红石粉工作,此时可以令周围原件工作的更新核只有中央更新核.按照更新方向性分为先更新音符盒或是右侧红石粉,如果先更新音符盒即正常复制,如果先更新右侧红石粉需要看右侧红石粉先更新音符盒还是左侧红石粉.如果先更新音符盒也是正常复制,如果先更新左侧红石粉那么左侧红石粉又是先更新右侧,陷入循环,最后红石粉降为0级才更新TNT,无法复制.可以看出替换音符盒后由位置性转为方向性+位置性)
前面说了,位置性情况下红石粉工作结束(完全降级为0)才会更新到TNT,但这时候红石粉已经无法激活TNT了.我们需要做的就是让红石粉工作结束的时候能量并不为0.不仅仅依靠那一个侦测器的能量,即引入能量源.
对于第一种结构,有完全固定的解法:

在上方添加一个侦测器,根据最开始的时序分析,新添加的侦测器会在6GT NTE亮起,在6GT BE移除下面侦测器时他仍然在亮起,最后这一条链粉因为他的能量支撑所以不会完全熄灭.工作结束后更新TNT总会是可以激活的.
对于第二种结构,因为侦测活塞的不可靠性(会乱时序/高频)除此之外我们也没有可以侦测的部件.所以我们需要视情况添加侦测器,直接给出解法就是,为激活TNT复制的侦测器,再接两个侦测器输入到链粉中(也就是延时4GT时间),例如:

最右上方激活右侧活塞的侦测器便是激活TNT复制的侦测器(不同机器设计中这个侦测器的位置可能不同,所以需要灵活发挥).侦测他再加两个侦测器输出能量到链粉中.这样等到6GT时刚好开始输出,粉最后不会降级为0.更新TNT时总会是可以激活的.如果路径不够可以灵活运用激活音符盒(就如图中,但是注意音符盒不要可以被其他能量影响)也可以直接拉粉连接到原链粉之中(不要拉太长,传递不到TNT那边.也不要连接在下面那个玻璃上的粉,影响这个TNT复制的工作)
这两种修复方法适用于所有三无TNT复制,如果出问题的TNT复制并不属于如上任何一种,那么你就要发挥自己的思考能力了.如何将上文的解决思路套用在自己的问题TNT复制上.
如果你完全阅读理解了这篇专栏,那么你其实不仅仅是了解了TNT复制的位置性,你也可以尝试解释几乎所有因为粉的位置性问题了.如果发现错误/歧义,欢迎在评论区指出.有任何疑问也欢迎提问.