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