发现版上鲜少这类的文章就来分享一下
一开始是跟朋友自己开服务器玩,他说想要盖全境封锁的暗区,我就设计了一个能「倒数计时完毕将玩家发送出去」的撤离指令。
右边一条直的就是本文重点
原理
主要是运用了计分板(Scoredboard)跟指令方块的交互,记分板因为较为复杂就不在这里赘述,自己也只有查跟计时有关的数据而已
实际运作
首先,必须先创建一个记分板,让我们命名他为「timer」
指令:/scoreboard objectives add timer dummy,其中「/」在指令方块中可以省略
add:添加一个计分项目
timer:项目名称
dummy:计分准则,「dummy」只能使用指令做运算,其他任何变因无法改变其数值
接着在聊天室输入 /scoreboard objectives setdisplay list timer
让数值显示在玩家列表(Tab)中,方便追踪
接着创建一颗如下图的指令方块:
指令:scoreboard players add @a timer 1
功能为:对所有玩家(@a)的timer项目加一分
「重复」模式的指令方块运行一次指令的时间为1/20秒,重复20次后就是一秒,如此一来就可以进行简单的计时功能
而因为「需要红石」,所以将其与可以保持信号的控制杆连接,让方块可以重复运行指令,如下图
(按钮因为作用时间过短而不使用)
直到这里,当启动控制杆,在聊天室里就会疯狂洗频就是成功加分了
如果不想要他洗频,输入/gamerule commandBlockOutput false 即可关掉消息
在后面连接一颗方块,摆放方式为蹲下+右键点击前一颗,之后的每颗方块都是如此
测试时间订为5秒,也就是分数要达到100,设置如下
指令:execute if score @p timer matches 100
功能为:如果最接近的玩家(@p)的timer分数达到(matches)100分时,输出(execute)信号给下一方块
接着要让计时器数到了5秒后归零,我用了两颗方块来解决
首先,为了让记分板归零,用同样的方式再连接一颗方块
指令:scoreboard players reset @a timer
功能为:将所有玩家的timer记分板重置为零(reset)
紧接着再连一颗
指令:fill 86 72 -9 86 72 -9 minecraft:lever
fill,要填平地面时很常见的指令,可是为什么要用到fill呢?
因为当控制杆拨下后不会自动弹回,可是fill产生的控制杆是「非导通」状态,如此便可以切断一开始「加分」用的方块,从而停止计时
注意:如果不加这颗的话,记分板会「加到100分>重置>加到100分>重置」无限轮回
直到这里,倒数计时的功能已经完成,剩下就是简单的发送指令
指令:tp @p X Y Z
如果你想要他倒数完时说些话
指令:say <你想说的话>
以上所有功能都设置完毕了,来测试看看吧!
成功!
实在是用了好久也发生了不少错误,很多指令的运用方法都是东拼西凑出来的
在下是指令新手、红石白痴,如果各位有更好的想法欢迎留言分享
最后感谢我们的叛变特工协助测试
注意:记分板的指令每一个版本间会有差异,本文为1.15.2,其他版本不一定适用喔