Template:Desktop
函數(Function)是一個允許玩家利用擴展名為.mcfunction的文字文件編寫和執行多行命令的功能。
用法
要使用函數,首先必須把文字文件放置在.minecraft/世界名称/data/functions資料夾中。隨後可使用後文所述的幾種方法執行。
函數檔案必須繼續分類到多個子資料夾中,然後使用命名空间:指向函数文件的路径的格式執行,其中命名空间是functions資料夾下第一層子資料夾的名稱。
例如,custom:example/test會引用檔案世界名称/data/functions/custom/example/test.mcfunction。如果調用函數時未指定命名空間,則預設為minecraft:。
在文字文件裡,要每行放置一個有效的命令(不輸入斜槓/)。玩家可以在函數文字文件中使用#加入注釋。如果新增或修改了函數檔案,可使用/reload命令從硬盤中重新載入函數檔案,讓Minecraft識別出函數檔案的變更。在函數裏執行的命令會遵守/gamerule maxCommandChainLength。
函數中的命令可超越命令方塊中32,500的字元限制。同時,函數中的所有內容會在1遊戲刻內同幸運行。函數中調用的其它函數也會在同一刻內執行。在一個執行週期內,函數中命令順序的改變不會影響本函數、函數內調用的其它函數的命令中相對座標的參考點。/execute命令可以繞過這個特性。例如:
tp @a ~ ~5 ~ setblock ~ ~-1 ~ emerald_block execute @a ~ ~ ~ setblock ~ ~-1 ~ diamond_block
這3個命令會將所有玩家向上載送5方格、將綠寶石方塊放置在玩家傳送前位置的腳下,並將鑽石方塊放置在玩家傳送後位置的腳下。/execute命令的這種行為不會影響目標選擇器中的座標參數,但會在每次執行命令前先檢查目標的目前位置。
函數檔案是簡單的文字文件,因此函數容易修改,且比起命令方塊而言,函數在大量執行時不易產生卡頓。然而,函數的成功輸出不能被紅石中繼器檢測(在不使用複雜的計分板命令的情況下)。
遊戲中目前有以下幾種方式執行函數:
命令
- 允許玩家執行一個函數一次。
- 函數中命令的執行身份為實體或執行
/function命令的命令方塊。 - 具有可選參數
if和unless,可僅在目标选择器選中或未選中對象幸運行函數。 - 語法:
function <函数名> [if|unless] [目标选择器]
/gamerule gameLoopFunction
- 函數每一刻均執行一次。
- 函數中命令的執行身份為伺服器本身。
- 若需要執行多個函數,可在主函數內調用其它函數。
- 語法:
/gamerule gameLoopFunction <命名空间:指向函数文件的路径>
進度
達成一個進度時,可以執行一個函數作為獎勵。函數中命令的執行身份是達成進度的玩家。
獎勵函數在進度JSON檔案中透過以下方式調用:
{
"rewards": {
"function": "命名空间:指向函数文件的路径"
}
}
歷史
| release | |||||
|---|---|---|---|---|---|
| 1.12 | pre1 | 函數功能加入遊戲。 | |||
| pre3 | 函數中的命令不再允許以反斜槓「/」開頭。 | ||||
現在僅能使用#來注釋,不再允許使用先前的//。 | |||||
| pre4 | 加入了新的參數:[if|unless] [选择器]。 | ||||
| pre6 | 在命令中使用函數時,函數執行被跳過(執行條件不符)的情況現在被視為命令失敗。 | ||||
錯誤
Template:Issue list