Skip to content

Latest commit

 

History

History
74 lines (53 loc) · 3.88 KB

File metadata and controls

74 lines (53 loc) · 3.88 KB

第 4 节

本节最后修改于 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

[+,X,-,20] scoreboard players set 重工业玉米 playTime 999999

上面这个例子中,监听器1中的响应指令同时被老玩家提示功能和重工业玉米的大喇叭功能通过事件触发的方式使用。这个时候我们可以把监听器1单独叫做一个MP模块,比如可以叫提示老玩家模块,那么激活监听器1来执行响应指令就可以称作调用MP模块。

如果想再提高模块的内聚性,可以像这样。

# 例子
# 每秒给玩家在名叫playTime的计分板上加1积分
# 当玩家到达999999积分时聊天栏提示为老玩家
# 重工业玉米想不停告诉每个人他是老玩家

[+,X,-,20] scoreboard players add @a playTime 1
[+,L,-,0] tag @a[scores={playTime=999999}] add 提示老玩家

# 提示老玩家模块 入口标签:“提示老玩家”
[+,X,-,20] execute @a[tag=提示老玩家] ~~~ say @s 是老玩家
[+,L,-,0] tag @a[tag=提示老玩家] remove 提示老玩家

[+,X,-,20] tag 重工业玉米 add 提示老玩家

于是不仅playTime=999999可以触发事件,只要想的话,任何条件都可以作为触发事件的方式。因为我们将监听器1作为MP过程的第一步——打标签——的那个命令方块从监听器1移动到了其他触发这个事件的命令方块串上,相当于由其他命令方块串来激活监听器1这个MP过程。所打的这个标签可以被称作MP模块的入口标签。

带参数调用MP模块

调用MP模块一般来说就是给实体加标签或者设置积分什么的来激活MP事件,这就是说我们调用MP模块实际上是给出了一个实体,MP模块能够通过选择器获取到这个实体。所以我们如果想给MP模块传递参数,我们可以在这个实体上增加标签、计分板分数等。

# 例子
# 当有人抬头时给他一句话“生活就像巧克力”。
# 如果是第二次抬头就给他下一句“下一句我忘了”
# 之后再抬头就“忘了”

# 事件:抬头
[+,X,-,~] tag @a[rx=-89] add 抬头-ing
[+,L,-,0] scoreboard players add @a[tag=抬头-ing] 抬头次数 1
[+,L,-,0] execute @a[tag=抬头-ing] ~~~ scoreboard players operation @s 话编号 = @s 抬头次数
[+,L,-,0] scoreboard players set @a[scores={抬头次数=4..}] 话编号 3
[+,L,-,0] tag @a[tag=抬头-ing] ~~~ add 给一句话
[+,L,-,0] tag @a[tag=抬头-ing] remove 抬头-ing

# 给一句话模块 入口标签:“给一句话”
[+,X,-,~] title @a[tag=给一句话,scores={话编号=1}] title 生活就像巧克力
[+,L,-,0] title @a[tag=给一句话,scores={话编号=2}] title 下一句我忘了
[+,L,-,0] title @a[tag=给一句话,scores={话编号=3}] title 忘了
[+,L,-,0] tag @a[tag=给一句话] remove 给一句话

上面的例子中话编号计分项目是给一句话模块的参数入口。改变实体的话编号项目,调用给一句话模块后得到的结果也不一样。但是和真正的函数与参数的关系不同,这里的所谓“参数”类似于“绑定在全局作用域”;而模块也不像真的在接受参数,更像是在访问特定的“全局变量”来获得执行信息。我们可以管MP模块的参数叫MP模块参数。

下一节