【{$randkws}】我的世界函数系统的模块调用攻略 1.12版本函数命令系统教程 - {$web_name} 我的全球1.12版次中

来源:豺狼之吻网 | 栏目:综合 | 2026-06-19 09:19:52

  我的全球1.12版次中,函数与进度操控系统的呈现,让命令脱离命令方块——这句曾经说过的玩笑般的预言,官方变成或许。下面99小编就给大家带来我的全球函数操控系统的模块调用攻略。

我的全面华为Mate精选全球函数操控系统的模块调用攻略 1.12版次函数命令操控系统教程

  函数操控系统的模块调用

  针对一个完整的命令操控系统而言,模块普通可以分为三类:对执行顺序先后有请求的高频模块、对执行顺序先后无请求的高频模块、非高频模块。在函数操控系统中,我们同样可以将模块分成这三类。以便便捷后续讲解。快速话题讨论专题我们作这样的设定:

  将 system:_main设为 glf ,并称之为主进程或者主时钟

  针对上面讲到的三类模块,我们经由三种各异的方式去调用。

  对执行顺序先后有请求的高频模块,在主进程中按照需要的顺序排列好来调用。对执行顺序先后没有请求的高频模块,在主进程中可以较为随意放置位置,但是普通不会考虑优先执行。尤其地,假如这个模块是针对每一个玩家独立执行的,可以使用进度操控系统中的最新跑分成绩盘点"tick"触发器来调用,而不需要放在主进程中。仅在特定状况下触发的非高频模块,在主进程中调用,但是辅以execute、scoreboard和挑选器参数去控制其在合适的时候被调用,这里的挑选器,含有了在1.12 pre-4中新增的if/unless的若干。

  非高频模块在特定条件下激活,也在很大程度上缩减了模块中众多重复呈现execute的现象,并完全杜绝了超长的Conditional链,由于function中并不直接扶持Conditional。聚焦平板电脑观察不直接扶持,说明可以间接扶持,对吧。我们来看一个例子。

  假设有红蓝两队,在着手前考虑到互殴难题不开展分队,而是使用挂tag的方式。

  红队以tag=redTeam为标记,蓝队则以tag=blueTeam为标记,筹备观战的玩家以tag=specTeam为标记

  当玩家站在相应区域(红蓝两队的所有玩家还需要挑选了职业)添加Ready的标记,视为筹备就绪。

  假如玩家不在相应区域时就移除Ready的标记。

  挑选了职业的玩家,其记分板项selectClass数值大于等于1

  整体玩家筹备就绪后,游戏进入倒计时,倒计时落幕时游戏着手

  倒计时未落幕,有玩家脱离筹备就绪的状态,则倒计时中断

  条件较为多,我们先来看看怎么写这个模块,再开展确认。在这里,我们筹备了一个名为gameStat的aec实体身为标记,所有游戏进程会以tag或者score的形式挂载到该实体上。请看指令若干

  execute @p[tag=redTeam,score_selectClass_min=1] ~ ~ ~ execute @p[tag=blueTeam,score_selectClass_min=1] ~ ~ ~ scoreboard players tag @e[type=area_effect_cloud,name=gameStat,tag=notGaming] add allReady

  execute @p[tag=!Ready,m=2] ~ ~ ~ scoreboard players tag @e[name=gameStat,type=area_effect_cloud,tag=notGaming] remove allReady

  execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ title @a clear

  execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ title @a reset

  execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ scoreboard players reset @s[tag=!allReady] waitTime

  scoreboard players add @e[name=gameStat,tag=allReady] waitTime 1

  execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a times 10 140 10

  execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"请玩家站在筹备区域不要离开"}]

  execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a title [{ "color":"yellow","text":"游戏快要着手"}]

  execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"3"}]

  execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0

  execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"2"}]

  execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0

  execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"1"}]

  execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0

  execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a times 10 30 10

  execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a title [{ "color":"gold","text":"游戏着手"}]

  scoreboard players set @e[name=gameStat,type=area_effect_cloud,score_waitTime_min=100] gameStat 1

  scoreboard players reset @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] waitTime

  scoreboard players tag @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] remove allReady

  execute @e[type=area_effect_cloud,name=gameStat,score_gameStat_min=1,score_gameStat=1] ~ ~ ~ function system:StartGame

  接下来我们来慢慢确认。

  先是是着手的条件。有红蓝两队,那么这两队都肯定需要有人,才能够着手,考虑到同一挑选器中不能重复使用tag的参数,我们保留了确认队伍的参数,而不是确认是否筹备就绪的参数。所以,第一条指令的意思是,当存在选了职业并选红队的玩家以及选了职业并选蓝队的玩家,我们给中心实体加上allReady这个标记,以表明或许满足着手条件。

  至于满足条件吗?假如有未筹备就绪的玩家,就说明不满足,那我们就让一个没有筹备就绪的玩家来去掉allReady这个标记好了。

  针对3~5行,我们放后面点讲。先看后面。满足着手条件以后,我们会给中心实体加分(使用waitTime这个记分板项),在第一刻加分后呈现提示文字提示筹备着手,然后进入循环计时,最后计时满了,调用system:startgame这个函数来着手游戏(这里不是例子的若干,不作说明)。

  那么回过头来看3~5行,这里显著是打断的若干。打断,就是要清掉提示文字、重置计时器。假如此时都还没有开展过加分,那么我们就不必开展那三条指令,所以可以目睹中间有个挑选器里有score_waitTime_min=1的参数加以限制。

  重点来了,我们目睹这3条指令前面相当长一串execute是重复的。由于在过去用cb写的时候,这里使用了Conditional,而如今函数不直接扶持Conditional,所以用了一大堆execute,但是这里我们可以稍作更改,对不对?请看下面

  execute @p[tag=redTeam,score_selectClass_min=1] ~ ~ ~ execute @p[tag=blueTeam,score_selectClass_min=1] ~ ~ ~ scoreboard players tag @e[type=area_effect_cloud,name=gameStat,tag=notGaming] add allReady

  execute @p[tag=!Ready,m=2] ~ ~ ~ scoreboard players tag @e[name=gameStat,type=area_effect_cloud,tag=notGaming] remove allReady

  execute @p[tag=!Ready,m=2] ~ ~ ~ execute @e[name=gameStat,type=area_effect_cloud,tag=notGaming] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ function system:cond_breakstartcount

  scoreboard players add @e[name=gameStat,tag=allReady] waitTime 1

  execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a times 10 140 10

  execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"请玩家站在筹备区域不要离开"}]

  execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a title [{ "color":"yellow","text":"游戏快要着手"}]

  execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"3"}]

  execute @e[name=gameStat,score_waitTime=40,score_waitTime_min=40] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0

  execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"2"}]

  execute @e[name=gameStat,score_waitTime=60,score_waitTime_min=60] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0

  execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ title @a subtitle [{ "color":"aqua","text":"1"}]

  execute @e[name=gameStat,score_waitTime=80,score_waitTime_min=80] ~ ~ ~ execute @a ~ ~ ~ playsound block.note.pling voice @p ~ ~ ~ 1 0

  execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a times 10 30 10

  execute @e[name=gameStat,score_waitTime_min=100] ~ ~ ~ title @a title [{ "color":"gold","text":"游戏着手"}]

  scoreboard players set @e[name=gameStat,type=area_effect_cloud,score_waitTime_min=100] gameStat 1

  scoreboard players reset @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] waitTime

  scoreboard players tag @e[name=gameStat,score_gameStat_min=1,score_gameStat=1] remove allReady

  execute @e[type=area_effect_cloud,name=gameStat,score_gameStat_min=1,score_gameStat=1] ~ ~ ~ function system:StartGame

  system:cond_breakstartcount.mcfunction

  title @a clear

  title @a reset

  scoreboard players reset @s waitTime

  尽管这个独立出来的子模块只有3条指令,但是假如分离出来的是30条而不是3条呢?能够节省多少功夫想必不需要阐释了吧?

  以上是有关函数操控系统模块调用的若干,当中有谈及使用进度操控系统来调用若干独立模块,我们接下来来可以看看函数操控系统与进度操控系统联动>>>。

上一篇:《剑侠世界3》x茶之旅人联动官宣!邀您共赴江湖茶旅

下一篇:《血污:夜之仪式》夏季上线 游戏流程大约10小时

相关文章