我的世的構(gòu)世界1.12版本中新增了函數(shù)系統(tǒng),那么我的界函世界1.12版本函數(shù)命令怎么用?下面99小編就給大家?guī)?lái)我的世界函數(shù)命令系統(tǒng)的構(gòu)成詳細(xì)介紹。

1.12中,函數(shù)與進(jìn)度系統(tǒng)的令用出現(xiàn),讓命令脫離命令方塊——這句曾經(jīng)說(shuō)過(guò)的函數(shù)玩笑般的預(yù)言,正式成為可能。系統(tǒng)
函數(shù)系統(tǒng)的成介構(gòu)成
函數(shù)系統(tǒng)的由來(lái)
函數(shù)(function)系統(tǒng),是世的構(gòu) MC 1.12 Pre-1 版本中新增的一個(gè)功能,它將原來(lái)進(jìn)度系統(tǒng)中返回指令的界函部分單獨(dú)提取出來(lái),做成了現(xiàn)在的數(shù)命紹函數(shù)系統(tǒng)。
函數(shù)系統(tǒng)的令用形式
函數(shù)系統(tǒng)由命名空間和函數(shù)文件組成,這些文件保存在存檔目錄/data/functions/下。函數(shù)functions目錄下的系統(tǒng)文件夾,稱為命名空間,成介上海外圍預(yù)約(外圍平臺(tái))外圍外圍上門外圍女(電話微信180-4582-8235)一二線城市外圍預(yù)約、空姐、模特、留學(xué)生、熟女、白領(lǐng)、老師、優(yōu)質(zhì)資源各個(gè)命名空間下存放不同的世的構(gòu)函數(shù)文件。實(shí)際上,命名空間就是方便我們編寫者分類并管理各種函數(shù)文件。
函數(shù)文件是以.mcfunction為后綴名的文本文件,建議采用utf-8無(wú)BOM編碼以防顯示錯(cuò)亂。簡(jiǎn)單來(lái)講,一個(gè)函數(shù)等價(jià)于一個(gè)多行命令方塊,函數(shù)文件里面每一行寫一條指令,當(dāng)執(zhí)行這個(gè)函數(shù)時(shí),里面的指令會(huì)按行依次執(zhí)行。如果在一個(gè)函數(shù)中調(diào)用其它函數(shù),那么在同一游戲刻,被調(diào)用的函數(shù)中所有指令先執(zhí)行完,再繼續(xù)當(dāng)前函數(shù)中后續(xù)的指令,就像插隊(duì)一樣,我們?cè)诤竺鎸?duì)比命令方塊時(shí)還會(huì)說(shuō)到這個(gè)。
請(qǐng)注意:在 1.12 Pre-3 版本中存在一個(gè)嚴(yán)重漏洞,即命令執(zhí)行體不能正確地通過(guò)execute傳遞到被調(diào)用的函數(shù)中去,這個(gè)漏洞有望在后續(xù)版本以及正式版修復(fù)。
以下是本文用到的一個(gè)函數(shù)系統(tǒng)的目錄,帶有"+"的表示為目錄
+ functions
+ say
hi.mcfunction
bye.mcfunction
Text1.mcfunction
text2.mcfunction
+ system
+ process
_process.mcfunction
_main.mcfunction
player_tick.mcfunction
如何調(diào)用函數(shù)
在 1.12 中,MOJANG新增了function指令和一條名為gameLoopFunction的游戲規(guī)則來(lái)輔助我們使用函數(shù)系統(tǒng)。function指令的格式如下:
function <命名空間:函數(shù)名>
function <命名空間:函數(shù)名>
這兩條都是可行的。其中,if|unless是在1.12 pre-4加入的功能,后面我會(huì)解釋到這個(gè)。我們先來(lái)說(shuō)說(shuō)第一種形式。例如上面的目錄中,要調(diào)用system這個(gè)命名空間下的_main文件,就是輸入這樣的指令:
function system:_main
現(xiàn)在,我們來(lái)看一個(gè)例子例如say命名空間下的Text1.mcfunction和text2.mcfunction,里面分別寫上這些內(nèi)容
Text1.mcfunction
#這是一個(gè)范例,在function文件中可以用#來(lái)注釋行。請(qǐng)注意,不能夠使用//來(lái)注釋!
say 1
function say:text2
say 2
text2.mcfunction
say 3
say 4
當(dāng)我在系統(tǒng)后臺(tái)輸入function say:text1時(shí),聊天框會(huì)出現(xiàn)這些內(nèi)容:
[server] 1
[server] 3
[server] 4
[server] 2
也就是說(shuō),執(zhí)行function指令的人,會(huì)把函數(shù)里面的指令依次執(zhí)行——我在系統(tǒng)后臺(tái)輸入function指令,就是系統(tǒng)在執(zhí)行,我自己輸入function指令,就是我本人在執(zhí)行。大家可能注意到了,函數(shù)中支持使用#進(jìn)行注釋(舊版本支持//注釋,當(dāng)前版本已經(jīng)不再支持),也就是說(shuō)被注釋行不會(huì)作為指令而執(zhí)行,這一點(diǎn)有多方便相比不比我再說(shuō)了。同時(shí)需要大家注意:函數(shù)中所有指令不能夠以/開(kāi)頭。例如,你可以這樣寫:
say @s
但是不能這樣寫:
/say @s
最后有一點(diǎn)需要注意的是,在function指令中調(diào)用函數(shù)時(shí),不區(qū)分大小寫。例如前面say命名空間下的Text1.mcfunction,我在調(diào)用的時(shí)候?qū)懙氖莝ay:text1
然后是第二種形式,也就是帶有if|unless的。我簡(jiǎn)單舉兩個(gè)例子,大家就知道是什么意思了。
say:tellraw.mcfunction
scoreboard objectives add timer dummy 計(jì)時(shí)器
scoreboard players add @s timer 1
function random:title if @s[score_timer_min=1200]
scoreboard players reset @s[score_timer_min=1200] timer random:title.mcfunction
summon area_effect_cloud ~ ~ ~ { Tags:["rnd_title","rnd_title1"]}
summon area_effect_cloud ~ ~ ~ { Tags:["rnd_title","rnd_title2"]}
summon area_effect_cloud ~ ~ ~ { Tags:["rnd_title","rnd_title3"]}
summon area_effect_cloud ~ ~ ~ { Tags:["rnd_title","rnd_title4"]}
summon area_effect_cloud ~ ~ ~ { Tags:["rnd_title","rnd_title5"]}
entitydata @r[r=0,type=area_effect_cloud,tag=rnd_title] { CustomName:"rnd_title"}
execute @e[name=rnd_title,tag=rnd_title1] ~ ~ ~ tellraw @a[r=0,c=1] ["1"]
execute @e[name=rnd_title,tag=rnd_title2] ~ ~ ~ tellraw @a[r=0,c=1] ["2"]
execute @e[name=rnd_title,tag=rnd_title3] ~ ~ ~ tellraw @a[r=0,c=1] ["3"]
execute @e[name=rnd_title,tag=rnd_title4] ~ ~ ~ tellraw @a[r=0,c=1] ["4"]
execute @e[name=rnd_title,tag=rnd_title5] ~ ~ ~ tellraw @a[r=0,c=1] ["5"]
將say:tellraw放到主進(jìn)程中
execute @a ~ ~ ~ function say:tellraw
則每位玩家每分鐘將會(huì)看到1~5中隨機(jī)一個(gè)數(shù)字出現(xiàn)在聊天框。也就是說(shuō),只有計(jì)時(shí)器分?jǐn)?shù)滿1200的人會(huì)執(zhí)行后面的隨機(jī)部分。那么很顯然,帶有if的意思就是,如果能找到后面的選擇器,就執(zhí)行這個(gè)函數(shù),否則不執(zhí)行。相當(dāng)于testfor。
那么unless的意思也就很明顯了:在找不到后面的選擇器的時(shí)候,執(zhí)行這個(gè)函數(shù),相當(dāng)于testfor+非門。
gameLoopFunction
講完調(diào)用,就該講講高頻了。玩命令方塊的人都知道高頻是實(shí)現(xiàn)許多功能的前提。在函數(shù)系統(tǒng)中,MOJANG 為我們提供了一條名為gameLoopFunction的游戲規(guī)則來(lái)實(shí)現(xiàn)高頻。它的格式是
gamerule gameLoopFunction <命名空間:函數(shù)>
也就是說(shuō),你可以指定一個(gè)函數(shù)來(lái)高頻執(zhí)行,這個(gè)高頻是20Hz的,也就是每一個(gè)游戲刻都會(huì)執(zhí)行一遍。新建的存檔如果沒(méi)有執(zhí)行過(guò)這條指令,而是用gamerule gameLoopFunction來(lái)查詢的話,得到的返回值是-
為了方便,我們將這個(gè)規(guī)則簡(jiǎn)稱為glf。在舊版本中,glf指定的函數(shù),由系統(tǒng)(server)作為執(zhí)行體;而在新的版本中,MOJANG 引入了虛擬執(zhí)行體,例如將 say:text2 指定為glf時(shí),每一個(gè)游戲刻得到的結(jié)果是這樣的
[say:text2] 3
[say:text2] 4
也就是說(shuō),系統(tǒng)不再作為執(zhí)行體,而是由虛擬的執(zhí)行體代為執(zhí)行。
關(guān)于 glf 多說(shuō)兩句。使用 glf 去高頻執(zhí)行一個(gè)函數(shù),和使用 RCB(循環(huán)型命令方塊,紫色那種)去執(zhí)行,是不一樣的。區(qū)別主要在于其更新順序先后。一般而言不會(huì)造成嚴(yán)重影響,但是在某些情況會(huì)不一樣。比如,使用 CB 能檢測(cè)到生物的{ HurtTime:10s}這個(gè) NBT,而使用 glf 執(zhí)行函數(shù)只能檢測(cè)到的是{ HurtTime:9s},檢測(cè)不到10,這是因?yàn)殛P(guān)于函數(shù)的更新,都放在了生物更新之后,而 CB 的更新則是在生物更新之前。詳情可以看這里。按照 Searge 的說(shuō)法,函數(shù)并不是命令方塊的完全替代。這個(gè)說(shuō)法,大家就見(jiàn)仁見(jiàn)智了。
以上是函數(shù)系統(tǒng)的相關(guān)構(gòu)成,以及如何調(diào)用函數(shù)。接下來(lái)我們來(lái)了解一下函數(shù)系統(tǒng)的模塊分類>>>。




.gif)
.gif)
.gif)
.gif)
.gif)
.gif)
.gif)
.gif)
.gif)
.gif)



