scoreboard players tag @s[tag=!HelloTitle] add HelloTitle
scoreboard players reset @s[score_helloTitle_min=1] helloTitle
这个进度会在下一个游戏刻达成,对象是全体在线玩家,达成进度后会执行HelloTitle.mcfunction中的指令 。其实现的效果是,当玩家进入这个世界时,会在聊天框看见问候语(其他人看不到) 。
可以看到,相比于以前命令方块高频,这里采用了进度系统的 tick 触发器和@s选择器 。如果单纯用命令方块高频或者函数系统,那么只需要这样
scoreboard objectives add helloTitle stat.leaveGame
scoreboard players tag @a[tag=HelloTitle,score_helloTitle_min=1] remove HelloTitle
execute @a[tag=!HelloTitle] ~ ~ ~ tellraw @s ["",{"text":"Hello ","color":"yellow"},{"selector":"@s"},{"text":"! Welcome to Minecraft!","color":"yellow"}]
scoreboard players tag @a[tag=!HelloTitle] add HelloTitle
scoreboard players reset @a[score_helloTitle_min=1] helloTitle
区别就是选择器上的不一样 。如果大家觉得进度系统很麻烦,可以不去使用,但是接下来我们会看到一个使用进度系统的其他触发器来调用函数的例子 。例如,要让所有冒险模式玩家入水即死 。
rules:DieInWater.json
{
"criteria":{
"1":{
"trigger":"enter_block",
"condition":{
"block":"water"
}
}
},
"rewards":{
"function":"rules:dieinwater"
}
}
rules:DieInWater.mcfunction
#revoke
advancement revoke @s only rules:dieinwater
#commands
scoreboard players tag @p[m=2,r=0] add waterKill
execute @s[tag=waterKill] ~ ~ ~ tellraw @a [{"selector":"@s"},{"color":"white","text":" 被水淹没了"}]
execute @s[tag=waterKill] ~ ~ ~ gamerule showDeathMessages false
kill @s[tag=waterKill]
execute @s[tag=waterKill] ~ ~ ~ gamerule showDeathMessages true
scoreboard players tag @s[tag=waterKill] remove waterKill
当玩家踏入水中时,我们要给玩家加上一个tag,然后杀掉他 。至于为什么用@p而不用@s呢?因为@p不能选中死人,而@s可以,如果不想看到聊天框刷屏,就不要选择用@s 。
以上是利用进度系统的 enter_block(玩家进入方块) 这一触发器来实现落水即死功能的,如果单纯依靠函数,不依靠进度系统去实现的话,可以这样写
rules:DieInWater_FUNCONLY.mcfunction
execute @a[m=2] ~ ~ ~ detect ~ ~ ~ water -1 scoreboard players tag @p[r=0] add waterKill
execute @a[tag=waterKill] ~ ~ ~ tellraw @a [{"selector":"@s"},{"color":"white","text":" 被水淹没了"}]
execute @a[tag=waterKill] ~ ~ ~ gamerule showDeathMessages false
kill @a[tag=waterKill]
execute @a[tag=waterKill] ~ ~ ~ gamerule showDeathMessages true
scoreboard players tag @a[tag=waterKill] remove waterKill
然后将这个函数扔进主进程中高频执行即可 。
我们讲完了函数系统与进度系统的联动部分 。道理而言已经讲完了函数系统的基础使用,那么在最后,我们来聊聊函数系统与命令方块系统的对比吧,看看它们各自的优缺点 。
函数系统与命令方块的对比
如果你看上面的看得有点迷糊,那我们来简单讲讲函数系统和命令方块(CB)系统的对比吧,进度作为函数的联动触发形式,就不作过多讲解了 。
前面讲到的三种模块中,对执行顺序无要求的高频模块无论是用函数还是CB都没有什么问题,而那些需要严格保证执行顺序的模块,以前我会将他们全部连在一起,只用一个 RCB(循环型命令方块,即高频CB源)作为“信号源” 。
推荐阅读
- 我的世界僵尸实力详解 我的世界僵尸实力为多少
- 我的世界1.12版新增方块详解 我的世界1.12版新增了什么
- 我的世界命令方块指令一览 我的世界命令方块指令是什么
- 我的世界粘液科技图文教程 我的世界粘液科技怎么玩
- 我的世界圆石和草方块演化详解 圆石详细介绍 草方块解析
- 迷你世界刷怪塔教程 迷你世界建造刷怪塔
- 我的世界11号唱片大揭秘 我的世界11号唱片有什么背景含义
- 我的世界末日传送门搭建方法图文详解 如何建造末日传送门
- 我的世界全自动烤鸡机建造教程 全自动烤鸡机怎么造
- 我的世界中国建筑怎么造 五开间悬山中国建筑图文教程