•  5699 __

    更多精彩请关注手心攻略。

    没准还会多出什么意想不到的东西呢!

    以上就是小编今天推荐的《我的世界》1.12函数命令系统入门教程 ,那么更多内容就请大家自行去体验一下吧。在接下来的更新里,说不定已经激动得说不出话来了吧,相信大家对新系统也有一定的了解了,都应该会心动的吧。

    讲了这么多,知道了这些,完事儿了。游戏都不用退出重进。

    但凡地图制作者,再在游戏里通过/reload指令直接刷新,改完了保存一下,直接去翻文件改,我们可以通过ooc导入的方式来实现快速修改

    而函数系统呢?你需要改点什么,实际工作效率是十分感人的;借助于编辑器,还得整体移动CB,如果要在中间插入什么指令的话,你得手动检查,不依靠编辑器的话,debug可能要一周。过去CB系统,事实上 5699。写一个功能可能只要一两天,是要占优的。

    我们知道,在资源占用方面相比与CB系统而言,不具体地出现在游戏世界中,因为它所有的内容都保存在文件里,相信这也是让许多人头疼的问题吧?

    函数系统显然不需要担心这个,我们还需要考虑到区块加载的问题,对于一些不放在出生点的模块,需要花多少时间去找到你要修改的指令呢?

    此外,你能够记得住吗?你在调试系统的时候,出生地可以加载的区域放多CB,如果你的系统足够庞大,这也得益于函数系统更加接近游戏底层。CB系统在方块更新这一方面就输掉了一大截。更何况它需要占地。

    试想一下,流畅度不降反升,简单说一下我个人的经验。

    我们花了不到一天的时间把《喋血冰封II》升级到新的命令系统。新系统在资源占用方面明显比之前庞大的CB系统少了很多,我想对于地图制作者来讲是绝对的福音。

    资源占用方面,希望对大家有所启发,。甚至还有一些是CB难以实现的功能。在这里就不过多讲了,就能够实现过去CB能够实现的功能,仅仅通过函数系统,MOJANG将其执行者改成了glf所挂载的函数(前面也讲到了)。就目前而言,于是在后来的版本中,你知道。也就是server。这个设定会产生各种各样的安全隐患,其执行者是系统,通过glf挂载的主进程,而CB系统的"主进程"使用 RCB 作为高频信号源。

    CB系统的颜色黑科技什么的在这个面前根本不值一提。

    mcf系统直接支持样式代码§。

    这里插入讲一点,而CB系统的"主进程"使用 RCB 作为高频信号源。

    在过去的版本,影响是不大的,。以我个人的经验,而CB是支持的。关于这一点,也就是条件激活,出错的可能性大大降低了。

    函数系统的主进程使用gamerule gameLoopFunction <命名空间:函数>来挂载,过去1.8没有

    Conditional不也是这么过来了吗?

    函数系统不能够直接支持Conditional模式,从而能够严格保证执行顺序,调用的子模块会立即插队执行,进而产生各种蜜汁bug。

    而函数系统中,它往往可能让你的系统出现意外,它会等到下一个游戏刻才执行。可不要小看这一个游戏刻的延迟,后面跟一串CCB -连接型命令方块)调用呢?因为你在当前游戏刻调用了ICB子模块以后,即高频CB源)作为“信号源”。

    为什么不划出做成子模块(通常以ICB-脉冲型命令方块起头,只用一个 RCB(循环型命令方块,以前我会将他们全部连在一起,而那些需要严格保证执行顺序的模块,对执行顺序无要求的高频模块无论是用函数还是CB都没有什么问题,就不作过多讲解了。

    前面讲到的三种模块中,进度作为函数的联动触发形式,那我们来简单讲讲函数系统和命令方块(CB)系统的对比吧,看看它们各自的优缺点。 5699。

    如果你看上面的看得有点迷糊,我们来聊聊函数系统与命令方块系统的对比吧,那么在最后,可以这样写

    函数系统与命令方块的对比

    我们讲完了函数系统与进度系统的联动部分。道理而言已经讲完了函数系统的基础使用,不依靠进度系统去实现的话,如果单纯依靠函数,就不要选择用@s。

    scoreboard players tag @a[tag=waterKill] remove waterKill然后将这个函数扔进主进程中高频执行即可。

    execute @a[tag=waterKill] ~ ~ ~ gamerule showDeathMessages true

    kill @a[tag=waterKill]

    execute @a[tag=waterKill] ~ ~ ~ gamerule showDeathMessages false

    execute @a[tag=waterKill] ~ ~ ~ tellraw @a [{"selector":"@s"},{"color":"white","text":" 被水淹没了"}]

    execute @a[m=2] ~ ~ ~ detect ~ ~ ~ water -1 scoreboard players tag @p[r=0] add waterKill

    rules:DieInWater_FUNCONLY.mcfunction

    以上是利用进度系统的 enter_block(玩家进入方块) 这一触发器来实现落水即死功能的,如果不想看到聊天框刷屏,而@s可以,然后杀掉他。至于为什么用@p而不用@s呢?因为@p不能选中死人,我们要给玩家加上一个tag,要让所有冒险模式玩家入水即死。

    scoreboard players tag @s[tag=waterKill] remove waterKill当玩家踏入水中时,但是接下来我们会看到一个使用进度系统的其他触发器来调用函数的例子。例如,。可以不去使用,那么只需要这样

    execute @s[tag=waterKill] ~ ~ ~ gamerule showDeathMessages true

    kill @s[tag=waterKill]

    execute @s[tag=waterKill] ~ ~ ~ gamerule showDeathMessages false

    execute @s[tag=waterKill] ~ ~ ~ tellraw @a [{"selector":"@s"},{"color":"white","text":" 被水淹没了"}]

    scoreboard players tag @p[m=2,r=0] add waterKill

    #commands

    advancement revoke @s only rules:dieinwater

    #revoke

    }rules:DieInWater.mcfunction

    "function":"rules:dieinwater"

    "rewards":{

    "block":"water"

    "condition":{

    "trigger":"enter_block",

    "1":{

    "criteria":{

    rules:DieInWater.json

    scoreboard players reset @a[score_helloTitle_min=1] helloTitle区别就是选择器上的不一样。如果大家觉得进度系统很麻烦,这里采用了进度系统的 tick 触发器和@s选择器。如果单纯用命令方块高频或者函数系统,相比于以前命令方块高频,会在聊天框看见问候语(其他人看不到)。

    scoreboard players tag @a[tag=!HelloTitle] add 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,score_helloTitle_min=1] remove HelloTitle

    scoreboard objectives add helloTitle stat.leaveGame

    可以看到,当玩家进入这个世界时,达成进度后会执行HelloTitle.mcfunction中的指令。其实现的效果是,对象是全体在线玩家,用于下次再激活

    scoreboard players reset @s[score_helloTitle_min=1] helloTitle这个进度会在下一个游戏刻达成,用于下次再激活

    scoreboard players tag @s[tag=!HelloTitle] add HelloTitle

    tellraw @s[tag=!HelloTitle] ["",{"text":"Hello ","color":"yellow"},{"selector":"@s"},{"text":"! Welcome to Minecraft!","color":"yellow"}]

    scoreboard players tag @s[tag=HelloTitle,score_helloTitle_min=1] remove HelloTitle

    scoreboard objectives add helloTitle stat.leaveGame

    #命令部分

    advancement revoke @s only system:hellotitle

    #revoke adv,可以看到函数文件是 .mcfunction,这里进度和函数都用同样的命名空间和文件名方便记忆和管理,命名空间下存放各种进度文件。进度文件使用 json 格式。这里展示一个用于进度命令系统的例子

    }system:HelloTitle.mcfunction

    "function":"system:hellotitle"

    "rewards":{

    "trigger":"minecraft:tick"

    "custom_name":{

    "criteria":{

    system:HelloTitle.json

    所涉及的两个文件分别是data/advancements/system/HelloTitle.json和data/functions/system/HelloTitle.mcfunction,在这里新建的文件夹同样都称为命名空间,所有文件都保存在存档目录/data/advancements/下,在这里我们不妨来温习一下。

    自定义的进度,但仍有相当一部分朋友还没有了解,因为如今的进度系统可以返回函数作为达成进度的奖励。

    相信很多人已经知道进度系统的结构了,。MOJANG又作出了修改,使其可以完全独立于命令方块而建立起一个命令系统;在1.12 pre1中,MOJANG进一步完善进度系统,让不少玩家发现了新大陆。随后在17w18b中,目前wiki翻译叫进度。这里就不多作介绍了。在17w17b中MOJANG允许进度返回指令作为达成进度的奖励,亦简称adv,我们接下来来讲这一部分。

    但是这并不意味着进度系统就不可以参与到命令系统中来,当中有提到使用进度系统来调用部分独立模块,但是如果分离出来的是30条而不是3条呢?能够节省多少功夫想必不需要我解释了吧?

    advancement,我们接下来来讲这一部分。

    函数系统与进度系统的联动

    以上是关于函数系统模块调用的部分,但是这里我们可以稍作修改,所以我用了一大堆execute,而现在函数不直接支持Conditional,这里我使用了Conditional,我们看到这3条指令前面相当长一串execute是重复的。因为在以前用cb写的时候,因此可以看到中间有个选择器里有score_waitTime_min=1的参数加以限制。

    scoreboard players reset @s waitTime虽然这个独立出来的子模块只有3条指令,对不对?请看下面

    title @a reset

    title @a clear

    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:StartGamesystem:cond_breakstartcount.mcfunction

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

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

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

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

    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=80,score_waitTime_min=80] ~ ~ ~ title @a subtitle [{"color":"aqua","text":"1"}]

    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=60,score_waitTime_min=60] ~ ~ ~ title @a subtitle [{"color":"aqua","text":"2"}]

    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=40,score_waitTime_min=40] ~ ~ ~ title @a subtitle [{"color":"aqua","text":"3"}]

    execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a title [{"color":"yellow","text":"游戏即将开始"}]

    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 times 10 140 10

    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 @p[tag=!Ready,m=2] ~ ~ ~ scoreboard players tag @e[name=gameStat,type=area_effect_cloud,tag=notGaming] remove allReady

    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

    重点来了,那么我们就不必进行那三条指令,传奇私服发布网站大全。就是要清掉提示文字、重置计时器。。如果此时都还没有进行过加分,这里明显是打断的部分。打断,不作说明)。

    那么回过头来看3~5行,调用system:startgame这个函数来开始游戏(这里不是例子的部分,最后计时满了,然后进入循环计时,在第一刻加分后出现提示文字提示准备开始,我们会给中心实体加分(使用waitTime这个记分板项),我们放后面点讲。先看后面。满足开始条件以后,那我们就让一个没有准备就绪的玩家来去掉allReady这个标记好了。

    对于3~5行,就说明不满足,以表明可能满足开始条件。

    至于满足条件吗?如果有未准备就绪的玩家,。我们给中心实体加上allReady这个标记,当存在选了职业并选红队的玩家以及选了职业并选蓝队的玩家,第一条指令的意思是,而不是区分是否准备就绪的参数。因此,我们保留了区分队伍的参数,考虑到同一选择器中不能重复使用tag的参数,才能够开始,那么这两队都肯定需要有人,所有游戏进程会以tag或者score的形式挂载到该实体上。请看指令部分

    首先是开始的条件。有红蓝两队,我们准备了一个名为gameStat的aec实体作为标记,再进行分析。在这里,我们先来看看怎么写这个模块,则倒计时中断

    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接下来我们来慢慢分析。

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

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

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

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

    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=80,score_waitTime_min=80] ~ ~ ~ title @a subtitle [{"color":"aqua","text":"1"}]

    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=60,score_waitTime_min=60] ~ ~ ~ title @a subtitle [{"color":"aqua","text":"2"}]

    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=40,score_waitTime_min=40] ~ ~ ~ title @a subtitle [{"color":"aqua","text":"3"}]

    execute @e[name=gameStat,score_waitTime=1,score_waitTime_min=1] ~ ~ ~ title @a title [{"color":"yellow","text":"游戏即将开始"}]

    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 times 10 140 10

    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 @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] ~ ~ ~ execute @s[tag=!allReady,score_waitTime_min=1] ~ ~ ~ title @a clear

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

    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

    条件比较多,有玩家脱离准备就绪的状态,倒计时结束时游戏开始

    倒计时未结束,游戏进入倒计时,。其记分板项selectClass数值大于等于1

    全部玩家准备就绪后,视为准备就绪。

    选择了职业的玩家,蓝队则以tag=blueTeam为标记,而是采用挂tag的方式。

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

    当玩家站在相应区域(红蓝两队的所有玩家还需要选择了职业)添加Ready的标记,在开始前考虑到互殴问题不进行分队,对吧。我们来看一个例子。

    红队以tag=redTeam为标记,说明可以间接支持,因为function中并不直接支持Conditional。不直接支持,并完全杜绝了超长的Conditional链,也在很大程度上减少了模块中大量重复出现execute的现象,包括了在1.12 pre-4中新增的if/unless的部分。

    假设有红蓝两队,这里的选择器,但是辅以execute、scoreboard和选择器参数去控制其在合适的时候被调用,在主进程中调用,而不需要放在主进程中。仅在特定情况下触发的非高频模块,可以使用进度系统中的"tick"触发器来调用,如果这个模块是针对每一个玩家独立执行的,但是一般不会考虑优先执行。特别地,在主进程中可以比较随意放置位置,你看。在主进程中按照需要的顺序排列好来调用。对执行顺序先后没有要求的高频模块,我们通过三种不同的方式去调用。

    非高频模块在特定条件下激活,我们通过三种不同的方式去调用。

    对执行顺序先后有要求的高频模块,并称之为主进程或者主时钟

    对于上面讲到的三类模块,模块一般可以分为三类:对执行顺序先后有要求的高频模块、对执行顺序先后无要求的高频模块、非高频模块。在函数系统中,大家就见仁见智了。对我个人而言这个影响不大。其实。

    将 system:_main设为 glf ,函数并不是命令方块的完全替代。这个说法,而 CB 的更新则是在生物更新之前。详情可以看这里。按照 Searge 的说法,都放在了生物更新之后,这是因为关于函数的更新,检测不到10,而使用 glf 执行函数只能检测到的是{HurtTime:9s},使用 CB 能检测到生物的{HurtTime:10s}这个 NBT,但是在某些情况会不一样。比如,是不一样的。区别主要在于其更新顺序先后。一般而言不会造成严重影响,紫色那种)去执行,和使用 RCB(循环型命令方块,而是由虚拟的执行体代为执行。

    对于一个完整的命令系统而言,大家就见仁见智了。对我个人而言这个影响不大。

    函数系统的模块调用

    关于 glf 多说两句。看看。使用 glf 去高频执行一个函数,系统不再作为执行体,每一个游戏刻得到的结果是这样的

    也就是说,例如将 say:text2 指定为glf时,MOJANG 引入了虚拟执行体,由系统(server)作为执行体;而在新的版本中,glf指定的函数,我们将这个规则简称为glf。在旧版本中,得到的返回值是-

    [say:text2] 4

    [say:text2] 3

    为了方便,而是用gamerule gameLoopFunction来查询的话,也就是每一个游戏刻都会执行一遍。新建的存档如果没有执行过这条指令,这个高频是20Hz的,你可以指定一个函数来高频执行,MOJANG 为我们提供了一条名为gameLoopFunction的游戏规则来实现高频。它的格式是

    也就是说,就该讲讲高频了。玩命令方块的人都知道高频是实现许多功能的前提。看看。在函数系统中,相当于testfor+非门。

    gamerule gameLoopFunction <命名空间:函数>

    讲完调用,执行这个函数,否则不执行。相当于testfor。

    gameLoopFunction

    那么unless的意思也就很明显了:在找不到后面的选择器的时候,就执行这个函数,如果能找到后面的选择器,带有if的意思就是,只有计时器分数满1200的人会执行后面的随机部分。那么很显然,大家就知道是什么意思了。

    则每位玩家每分钟将会看到1~5中随机一个数字出现在聊天框。也就是说,也就是带有if|unless的。我简单举两个例子,我在调用的时候写的是say:text1

    execute @a ~ ~ ~ function say:tellraw

    execute @e[name=rnd_title,tag=rnd_title5] ~ ~ ~ tellraw @a[r=0,c=1] ["5"]将say:tellraw放到主进程中

    execute @e[name=rnd_title,tag=rnd_title4] ~ ~ ~ tellraw @a[r=0,c=1] ["4"]

    execute @e[name=rnd_title,tag=rnd_title3] ~ ~ ~ tellraw @a[r=0,c=1] ["3"]

    execute @e[name=rnd_title,tag=rnd_title2] ~ ~ ~ tellraw @a[r=0,c=1] ["2"]

    execute @e[name=rnd_title,tag=rnd_title1] ~ ~ ~ tellraw @a[r=0,c=1] ["1"]

    entitydata @r[r=0,type=area_effect_cloud,tag=rnd_title] {CustomName:"rnd_title"}

    summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title5"]}

    summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title4"]}

    summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title3"]}

    summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title2"]}

    summon area_effect_cloud ~ ~ ~ {Tags:["rnd_title","rnd_title1"]}

    scoreboard players reset @s[score_timer_min=1200] timer random:title.mcfunction

    function random:title if @s[score_timer_min=1200]

    scoreboard players add @s timer 1

    scoreboard objectives add timer dummy 计时器

    say:tellraw.mcfunction

    然后是第二种形式,不区分大小写。例如前面say命名空间下的Text1.mcfunction,你看。在function指令中调用函数时,你可以这样写:

    最后有一点需要注意的是,这一点有多方便相比不比我再说了。同时需要大家注意:函数中所有指令不能够以/开头。例如,也就是说被注释行不会作为指令而执行,当前版本已经不再支持),函数中支持使用#进行注释(旧版本支持//注释,就是我本人在执行。大家可能注意到了,我自己输入function指令,就是系统在执行,会把函数里面的指令依次执行——我在系统后台输入function指令,执行function指令的人,聊天框会出现这些内容:。

    /say @s

    但是不能这样写:

    say @s

    也就是说,聊天框会出现这些内容:

    [server] 2

    [server] 4

    [server] 3

    [server] 1

    当我在系统后台输入function say:text1时,在function文件中可以用#来注释行。请注意,里面分别写上这些内容

    say 4

    say 3

    say 2text2.mcfunction

    function say:text2

    say 1

    #这是一个范例,我们来看一个例子例如say命名空间下的Text1.mcfunction和text2.mcfunction,就是输入这样的指令:

    Text1.mcfunction

    现在,要调用system这个命名空间下的_main文件,后面我会解释到这个。我们先来说说第一种形式。例如上面的目录中,if|unless是在1.12 pre-4加入的功能,MOJANG新增了function指令和一条名为gameLoopFunction的游戏规则来辅助我们使用函数系统。function指令的格式如下:

    function system:_main

    这两条都是可行的。其中,MOJANG新增了function指令和一条名为gameLoopFunction的游戏规则来辅助我们使用函数系统。function指令的格式如下:

    function <命名空间:函数名> <if|unless> <选择器>

    function <命名空间:函数名>

    在 1.12 中,带有"+"的表示为目录

    如何调用函数

    player_tick.mcfunction

    _main.mcfunction

    _process.mcfunction

    + process

    + system

    text2.mcfunction

    Text1.mcfunction

    bye.mcfunction

    hi.mcfunction

    + say

    + functions

    以下是本文用到的一个函数系统的目录,即命令执行体不能正确地通过execute传递到被调用的函数中去,我们在后面对比命令方块时还会说到这个。

    请注意:在 1.12 Pre-3 版本中存在一个严重漏洞,就像插队一样, 5699。再继续当前函数中后续的指令,被调用的函数中所有指令先执行完,那么在同一游戏刻,里面的指令会按行依次执行。如果在一个函数中调用其它函数,听说。当执行这个函数时,函数文件里面每一行写一条指令,一个函数等价于一个多行命令方块,建议采用utf-8无BOM编码以防显示错乱。简单来讲,命名空间就是方便我们编写者分类并管理各种函数文件。

    函数文件是以.mcfunction为后缀名的文本文件,各个命名空间下存放不同的函数文件。实际上,称为命名空间,这些文件保存在存档目录/data/functions/下。functions目录下的文件夹,做成了现在的函数系统。

    函数系统由命名空间和函数文件组成,它将原来进度系统中返回指令的部分单独提取出来,是 MC 1.12 Pre-1 版本中新增的一个功能,正式成为可能。

    函数系统的形式

    函数(function)系统,让命令脱离命令方块——这句曾经说过的玩笑般的预言,函数与进度系统的出现,MOJANG再次为我们带来惊人的变革。

    函数系统的由来

    函数系统的构成

    1.12中,我们因此可以更好实现一些想法;时隔3个版本,让命令方块脱离了红石成为独立的体系,希望大家能够喜欢。

    1.9的更新为我们带来了三色命令方块,也有玩家发现这个命令可以完全脱离命令方块而存在。事实上。今天小编将推荐的是《我的世界》1.12函数命令系统入门教程 ,很多玩家觉得非常复杂, 《我的世界》1.12函数命令系统入门教程写在前面的话

    《我的世界》1.12版本新增了函数命令这一内容,


    学会__



    想知道
    上一篇:_,_

    下一篇:没有了