实例2:自定义命令——stats与记分板

在制作地图的时候,你想让玩家随时随地都可以触发一段预设好的命令——比如在玩家所处的位置放一簇烟花。但你总不能让玩家带着一个命令方块,也不能一直提示玩家打一条放置红石块的setblock命令吧?下面就介绍一下如何制作一条“自定义命令”,让玩家轻松地开烟火大会。

初次实现

有了实例1的经验,这一节就应该轻松一些了。

之前在介绍命令时我们提到过,普通玩家不能使用scoreboard命令,但可以通过trigger命令修改触发器,所以我们先用触发器实现自定义命令。

先新建一个触发器,名字叫Firework:

scoreboard objectives set Firework trigger

接着往一个单独的循环方块中放入让所有玩家能够操作触发器的enable命令:

scoreboard players enable @a Firework

然后把这个方块调成保持开启模式。一旦玩家用trigger操作了触发器,要想再次操作,就得重新使用enable命令。这就是把enable放入循环方块的原因。

到这里准备工作就结束了,提示玩家使用trigger吧。提示方式随你选择,木牌或是say都可以。

最后的实现就是检测玩家的分数以执行相关操作了,同循环电路中的那样,检测,检测成立时复位,召唤烟火。

方块的模式设置也很简单,检测命令放入保持开启的循环方块,剩下的命令全部放入连接循环方块的条件制约连锁方块。别忘了开启连锁方块!

具体操作相信你能自己完成,不懂的话可以再看看第一个实例。

如果你需要放烟花的命令,可以看看社区的教程。

再次实现

如果你曾经接触过自定义命令,你会发现它们大多是用Json文本中的点击事件(clickEvent)或者gamerule制作的。因为使用trigger需要两个持续执行命令的循环方块,会占用一定的游戏资源。而gamerule只用到一个循环方块——持续地检测而已。至于点击事件,更是不需要循环方块。
这里介绍与记分板相关的gamerule实现,如果你对点击事件的实现方法有兴趣,可以看看2.1 JSON文本的介绍。

关于stats

stats命令的功能是根据某个命令的执行情况,将有关数据推送到记分板上。你可以在1.5 命令执行统计以及4.4 记分板命令了解stats的更多信息。

/stats一共有五种模式,这次我们要用到的是QueryResult。这种模式将命令查询得到的返回值立即推送到记分板上。

举个例子,如果命令方块中的命令是time query daytime,使用/stats将记分板与命令方块绑定后,记分板上的分数会在命令执行时更改为当前的时间值。如果命令方块是循环型且开启中的,则相关分数在每一游戏刻都会改变。

关于gamerule

gamerule命令可以用以管理世界的规则,比如是否进行日夜交替,生物是否生成等。

规则是可以自定义的,这正是gamerule可以用来制作自定义命令的原因。

自定义规则很简单,它和假名一样不必声明,直接输入gamerule 自定义规则名 数值进行设置即可。输入后游戏会自动创建新规则且将对应数值存入其中。

gamerule如果只填规则名,不填写将要修改的数值,就会返回这个规则当前的值。如果用stats加以联系,这个值就会存到记分板。太好了,着手制作电路吧!

注意,游戏规则的数值需要为 数字/true/false 才能返回分数。true为1,false为0。

制作系统

  1. 首先新建一个虚拟型变量Firework。命令就由你自己去输入了。

    为了储存分数,还要新建一个假名,在这里设为Result。命令同样由你自己完成,不知道的话可以复习前一个实例。

  2. 然后新建自定义一个名为HaveFun的规则,值设为0:

    gamerule HaveFun 0

  3. 放置一个循环方块,输入查询HaveFun值的命令:

    gamerule HaveFun

  4. 离开命令方块界面,用stats将这个循环方块与刚才的Result连接,使接下来命令查询到的值能推送到ResultFirework上的分数。

    stats block <x> <y> <z> set QueryResult Result Firework

    坐标的值就是命令方块的值了,如果你的准心指向命令方块,还可以用Tab键对命令自动补全。

到这里核心内容就结束了,有了记分板的值,你就可以按 检测->执行命令->对分数复位 的流程继续构造你的电路。

复位不能像循环电路那样直接修改记分板,应该使用gamerule HaveFun 0修改规则值!

另外,如果你想实现不同的值对应不同的效果,可以设置多个检测线路,这就留给你自己去尝试了。


results matching ""

    No results matching ""