这里就需要用到一个小技巧了。
当一个方块发生变化的时候,它会更新周围6个方块(红石线、红石火把、中继器、比较器、斜放的铁轨会更新和它直角距离不超过2的方块,附着性电源会更新它和它附着的方块各自的周围6个方块),让它们看看自己是否处在“正确的状态”。如果不在“正确的状态”,那么这个方块就会发生变化,然后对它周围的方块进行更新;如果这个方块在“正确的状态”,那么它不会发生什么变化,也就不会对它周围的方块进行更新。
如果把像上图那样不在“正确的状态”的活塞紧密的排成一行,那么当其中一个活塞检测到方块更新以后,它自己就会意识到它处在“不正确的状态”,于是开始伸出,同时更新周围的方块;与此活塞相邻的活塞就要检测它自己的状态,发现处在“不正确的状态”,于是也开始伸出,同时更新周围的方块;……由此引起所有这些活塞检测自身并改变状态,这就是更新链。总的看来,有方块的“变化”才会有更新,更新链的建立需要一系列不在“正确的状态”的方块相邻排布。
如果我们把一大片更新链连接到一个总BUD上,那么只要这个更新链的任何一处发生方块更新,总BUD都会有响应,并且把更新链中的所有活塞都复位了。
总BUD的要求是,不仅能够对自己复位,而且能够对更新链中的所有活塞都复位。一般说来,当一个活塞上方的第二格是不透明方块,第三格是红石线的时候(如我前一楼的图所示),这个活塞可以成为更新链的一部分。这样,红石线的激活并不会更新活塞,这个活塞就会处在“不正确的状态”。
我采用的是下面这样一个总BUD。
首先,两个普通活塞相对,相隔2格。这里我用2个红石火把和一个不透明方块代替一个红石块。为了叙述简便,不妨把左边的活塞记作1号活塞,中间的是2号活塞(右边的活塞其实是更新链的一部分)。
然后,“红石块”能到达的两个位置都用中继器向外引出电路,而且,两边都引入了2游戏刻的延迟。【实验表明,这里两个中继器都必须是最小延迟;而且两条线路都必须有延迟,任何一条线路没有延迟都会导致BUD失效】
靠近2号活塞的线路,用红石线铺到更新链上面,让更新链的所有活塞和2号活塞都处在“不正确的状态”。因此,整个更新链的大小限制就是由红石线的传输距离限制所引起的。
靠近1号活塞的线路,用红石线直接激活1号活塞。
这样,检测收割部分就完成了!只要有瓜出现,紧靠瓜的活塞就会意识到自己处在“不正确的状态”,开始伸出,瓜破碎,并且这个更新沿着更新链传递到2号活塞,这时候2号活塞意识到自己处在“不正确的状态”,开始伸出(以上过程都在同一游戏刻内完成)。2游戏刻时,2号活塞和更新链上方的红石线熄灭,此时“红石块”仍然正在被推动,更新2号活塞,2号活塞发现自己处在“不正确的状态”,于是开始收回,更新链中的所有活塞也跟着收回。3游戏刻时,“红石块”到达1号活塞前面。4游戏刻时,2号活塞和更新链中的活塞都收回了。5游戏刻时,1号活塞激活,开始推出。7游戏刻时,“红石块”到达2号活塞面前,更新2号活塞,但是因为1号活塞是伸出的,所以2号活塞不能再伸出,因此它处在“正确的状态”,不会再更新更新链中的活塞;同时1号活塞失去激活,开始收回。9游戏刻时,1号活塞完全收回。
当一个方块发生变化的时候,它会更新周围6个方块(红石线、红石火把、中继器、比较器、斜放的铁轨会更新和它直角距离不超过2的方块,附着性电源会更新它和它附着的方块各自的周围6个方块),让它们看看自己是否处在“正确的状态”。如果不在“正确的状态”,那么这个方块就会发生变化,然后对它周围的方块进行更新;如果这个方块在“正确的状态”,那么它不会发生什么变化,也就不会对它周围的方块进行更新。
如果把像上图那样不在“正确的状态”的活塞紧密的排成一行,那么当其中一个活塞检测到方块更新以后,它自己就会意识到它处在“不正确的状态”,于是开始伸出,同时更新周围的方块;与此活塞相邻的活塞就要检测它自己的状态,发现处在“不正确的状态”,于是也开始伸出,同时更新周围的方块;……由此引起所有这些活塞检测自身并改变状态,这就是更新链。总的看来,有方块的“变化”才会有更新,更新链的建立需要一系列不在“正确的状态”的方块相邻排布。
如果我们把一大片更新链连接到一个总BUD上,那么只要这个更新链的任何一处发生方块更新,总BUD都会有响应,并且把更新链中的所有活塞都复位了。
总BUD的要求是,不仅能够对自己复位,而且能够对更新链中的所有活塞都复位。一般说来,当一个活塞上方的第二格是不透明方块,第三格是红石线的时候(如我前一楼的图所示),这个活塞可以成为更新链的一部分。这样,红石线的激活并不会更新活塞,这个活塞就会处在“不正确的状态”。
我采用的是下面这样一个总BUD。




