您的當前位置:首頁 > 探索 > 我的世界函數系統的模塊調用攻略 1.12版本函數命令系統教程 正文
時間:2025-11-23 22:08:27 來源:網絡整理 編輯:探索
我的世界1.12版本中,函數與進度系統的出現,讓命令脫離命令方塊——這句曾經說過的玩笑般的預言,正式成為可能。下面99小編就給大家帶來我的世界函數系統的模塊調用攻略。函數系統的模塊調用對于一個完整的命 湛頭美女約炮(微信181-8279-1445)大保健可上門安排外圍外圍上門外圍女桑拿全套按摩
我的世調用世界1.12版本中,函數與進度系統的界函教程出現,讓命令脫離命令方塊——這句曾經說過的數系湛頭美女約炮(微信181-8279-1445)大保健可上門安排外圍外圍上門外圍女桑拿全套按摩玩笑般的預言,正式成為可能。模塊命令下面99小編就給大家帶來我的攻略世界函數系統的模塊調用攻略。

函數系統的模塊調用
對于一個完整的命令系統而言,模塊一般可以分為三類:對執行順序先后有要求的函數高頻模塊、對執行順序先后無要求的系統高頻模塊、非高頻模塊。世調用在函數系統中,界函教程我們同樣可以將模塊分成這三類。數系為了方便后續講解。模塊命令湛頭美女約炮(微信181-8279-1445)大保健可上門安排外圍外圍上門外圍女桑拿全套按摩我們作這樣的攻略設定:
將 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條呢?能夠節省多少功夫想必不需要解釋了吧?
以上是關于函數系統模塊調用的部分,當中有提到使用進度系統來調用部分獨立模塊,我們接下來來可以看看函數系統與進度系統聯動>>>。
《嚴陣以待》宣布發售新DLC“Home Invation”Steam已上架2025-11-23 22:07
小米14 Ultra要漲價了!堆料最猛的小米足機2025-11-23 21:53
2020銅民窯古鎮夜場開放戰門票劣惠 銅民窯古鎮夜場皆雅嗎2025-11-23 21:52
2023年好玩的橫版過閉戚閑足游保舉 肉鴿隨機房間冒險2025-11-23 21:10
H1Z1玩家人數急速下跌,是什么原因?2025-11-23 21:03
特斯拉情人節推出家充樁面板 售價1000元2025-11-23 21:03
今日開啟預售 江鈴福特領睿部分配置曝光2025-11-23 20:11
2023年好玩的三國爭霸游戲保舉 帶收三國豪杰攻鄉2025-11-23 19:57
《神界:原罪2》增強包8月上線 可獲得免費升級2025-11-23 19:56
下度自正在的塔防戰略足游保舉 自正在安排塔防布局2025-11-23 19:22
嘉獎再再再進級!正在魔域心袋版相遇女神2025-11-23 21:42
FC典范游戲絕做《熱血物語2》正式肯定2012年登錄PC2025-11-23 21:41
2021年,小米Ov三星能從高端市場搶食多少?2025-11-23 21:24
奔馳新款C260L上市 售34.942025-11-23 21:01
《莎木3》最新游戲截圖公布 主角比前作更加漂亮2025-11-23 20:59
配件企業登陸GIHE,GMCC硬核產品將曝光2025-11-23 20:41
《ROCKSMITH》為音樂游戲帶去新反動2025-11-23 20:13
《滅亡島》最新游戲截圖 目標天燈塔表態2025-11-23 20:11
沒有請柬的小個子客人的故事2025-11-23 19:56
霸氣側漏!《本初傳奇》放出狠話再燃烽水制霸齊服!2025-11-23 19:33