大家好。今天来讲解一下一种可以自定义延迟CB脉冲的方法。大家知道,1.9的RCB(Repeating Command Block)开启后会以20Hz的速度激活。在一些电路中这个速度可能会太快,所以需要一些又不用中继器而又可以自定义延迟的CB脉冲。这个设计的核心电路来自lorgon111的这个u2b视频。
首先这种设计的原理是使用1.9最新的AEC实体。有些人可能会问什么是AEC,AEC就是1.9中lingering药水扔出去后在地面产生的一个药水覆盖区域。它时间一到后会自己删除自己,所以不需要任何清空系统。AEC含有一个{Age},它会以每tick +1的速度上升,所以这个机器的核心就是使用{Age}来记时。这个系统不需要任何积分板变量,只需要积分板的tag即可完成。
首先我们需要做准备工作,完成脉冲需要激活的系统。这里本人直接使用/say 1这条指令。将/say 1输入到一个普通CB中,然后在其后面放一个Chain Command Block,如下图:
注意,后面的Chain CB要被调成Always Active,这样子它就可以无需红石而自己激活。之后这个CCB内的指令是在它后面的CB位置内刷出一个AEC。这个很简单,指令格式是:
- /summon AreaEffectCloud <x> <y> <z>
- {CustomName:"Delay",Tags:["DelayStart"],Age:-3}
大家看见第一个CB成功执行了/say 1,然后后面的CCB成功的在第一个CB那里刷出了一个AEC(因为有黑色颗粒效果)。
在刷出AEC的指令中还有{Tags}这一项,这个是来将刷出的AEC自动加入到名叫“DelayStart”的这个积分板tag中。由于积分板的tag系统不需要像objective那样一开始就要定义,所以这个{Tags}不需要任何积分板的准备工作。
之后我们要做的就是,每次这个AEC的{Age}变成-1的时候,我们就要重新并且自动的激活一下第一个CB,之后第一个CB又会输出1,然后第二个CB又会刷出一个AEC,然后无限循环下去。所以我们需要另外一个系统来完成这个效果。首先我们需要一个Repeating CB,里面输入以下指令:
- /scoreboard players tag @e[tag=DelayStart,type=AreaEffectCloud,name=Delay] add DelayDone
- {Age:-1}
之后在中间的那个CCB中输入:
- /execute @e[tag=DelayDone,type=AreaEffectCloud,name=Delay] ~ ~ ~ /blockdata ~ ~ ~
- {auto:1b}
- /execute @e[tag=DelayDone,type=AreaEffectCloud,name=Delay] ~ ~ ~ /blockdata ~ ~ ~
- {auto:0b}
这样子这个自定义脉冲就完成了。之后如果大家要改变速度的话,就直接调节刷出AEC的那条指令中的{Age}。调成越小延迟就越大。有些玩家会问有什么要给开始的CB一个很短的的输入,而不能直接按按钮。这是因为如果脉冲速度很快的话,直接按按钮会导致那个CB强行卡在激活状态,从而导致那个CB失效。所以我们必须要给它一个很短tick的红石输入。之后要关闭这个脉冲的话直接停止激活那个RCB就行了。当然不光只是只能激活一个CB,可以同时激活好几个,比如这里本人同时激活了5个CB,执行从/say 1到/say 5:
要同时多个CB的话,只需要把刷出AEC的CCB放在最后面就可以了。然后把坐标改成第一个CB就行。
============END=============
Special thanks to lorgon111