Skip to content

Latest commit

 

History

History
57 lines (41 loc) · 3.03 KB

File metadata and controls

57 lines (41 loc) · 3.03 KB

第 3 节

本节最后修改于 2022 / 11 / 12

MP事件的主动触发

我们上一节说了MP事件。事件不止有玩家扔雪球或者抬头这一类,我们还可以用指令主动触发MP事件来执行响应。

# 例子
# 每秒给玩家在名叫playTime的计分板上加1积分
# 当玩家到达999999积分时提示玩家为老玩家

[+,X,-,20] scoreboard players add @a playTime 1

# 监听器1
[+,X,-,20] tag @a[scores={playTime=999999}] add 提示老玩家-ing
[+,L,-,0] execute @a[tag=提示老玩家-ing] ~~~ say @s 是老玩家
[+,L,-,0] tag @a[tag=提示老玩家-ing] remove 提示老玩家-ing

上面这个例子我们可以发现,监听器1所监听的事件是“有人的playTime积分为999999”,于是我们可以通过指令设定玩家的积分项目来触发此事件——上面例子中就是一个每秒加分的指令会触发此事件。

MP事件实现的异步

我们讲可以用指令来主动触发MP事件,那么MP事件能不能在响应指令里触发MP事件呢?当然也是可以的。于是我们可以借此搞出异步指令。

# 例子
# 如果有人身上有了“帅比”标签,那就给他提示“你真帅!”
# 提示完了之后如果他抬头,就提示“你把老天帅死了!”,然后给他把“帅比”标签扔了。
# 我们管这一套叫做“夸”系统,标签前面加上“K_”来和其他命令进行区分。

# 事件:出现“帅比”标签
[+,X,-,~] tag @a[tag=帅比] add K_夸奖-ing
[+,L,-,0] title @a[tag=K_夸奖-ing] title 你真帅!
[+,L,-,0] tag @a[tag=K_夸奖-ing] add K_夸完了
[+,L,-,0] tag @a[tag=K_夸奖-ing] remove K_夸奖-ing

# 事件:抬头
[+,X,-,~] tag @a[rx=-89] add 抬头-ing
[+,L,-,0] execute @a[tag=抬头-ing] ~~~ tag @s[tag=K_夸完了] add K_抬头了
[+,L,-,0] tag @a[tag=抬头-ing] remove 抬头-ing

# 事件:抬头完了就再夸
[+,X,-,~] tag @a[tag=K_抬头了] add K_再夸-ing
[+,L,-,0] tag @a[tag=K_再夸-ing] remove K_抬头了
[+,L,-,0] title @a[tag=K_再夸-ing] title 你把老天帅死了!
[+,L,-,0] tag @a[tag=K_再夸-ing] remove 帅比
[+,L,-,0] tag @a[tag=K_再夸-ing] remove K_再夸-ing

上面的例子中,对于一个夸奖完了的帅比,我们是不知道他什么时候会抬头的,所以抬头之后的动作算作抬头这个“异步操作”的“回调指令”。通过MP事件之间的相互触发,我们能够把回调指令放到MP事件里,可以叫做“回调事件”,当异步操作完成后触发回调事件完成回调指令。

有些眼尖的读者可能会发现例子中的回调指令不需要放到回调事件的命令方块串中,直接放进抬头事件的命令方块串里也可以。这是没错的。不过异步操作不止玩家抬头,还可以是某时刻的红石信号、某个不知名指令操作后的结果等。这里是出于演示目的,将回调指令单独放到回调事件里。虽然是这么说,但是建议实际编写指令时也把回调指令单独放到回调事件里,方便指令的维护。

下一节