1. Wiki
  2. /命令
  3. /函数和命令方块

函数和命令方块

把 Minecraft Bedrock 命令打包进 .mcfunction 文件,用 /function 或每刻自动运行它们,并学会使用脉冲、连锁和循环命令方块。

一遍又一遍地输入同样的十条命令,很快就会让人厌烦。函数是一个装满命令的文本文件,只需一条 /function 就能一次性运行其中所有命令。函数还能在每个游戏刻自动运行,很多附加包就是靠这个让效果持续生效的。

如果你还不熟悉命令,请先阅读命令基础。

快捷方式:GodCraft

GodCraft 有一个函数对象,会帮你写好文件和每刻运行列表。

  1. 打开工坊,在你的附加包中添加一个函数。
  2. 每行输入一条命令。输入时会有命令和参数的提示。
  3. 选择运行方式:每刻运行、世界加载时运行一次,或只通过 /function 运行。
  4. 导出。.mcfunction 文件、tick.json、清单文件和 UUID 都会自动写好。

手动制作

第 1 步:创建函数文件

函数放在**行为包(BP)**中名为 functions 的文件夹里。文件以 .mcfunction 结尾,是纯文本:任何文本编辑器都能写。

BP/functions/myname/starter_kit.mcfunction
# Gives whoever runs this function a starter kit
give @s minecraft:stone_sword
give @s minecraft:bread 8
give @s minecraft:torch 16
effect @s minecraft:speed 60 0
say Your starter kit is ready!

规则很简单:

  • 每行一条命令。 一条命令不能拆成两行。
  • 不加斜杠。 写 give,不要写 /give。
  • 以 # 开头的行是注释。 游戏会跳过它们。用注释来说明函数的作用。
  • 空行没有问题,还能让长文件更易读。

用你自己名字命名的文件夹

把文件放在 functions/myname/ 这样的文件夹里,可以避免和其他也有 starter_kit 函数的附加包冲突。

第 2 步:运行它

在启用了你的行为包并开启作弊的世界中输入:

聊天栏
/function myname/starter_kit

名称就是 functions 文件夹内的路径,文件夹之间用 / 分隔,不带 .mcfunction 后缀。参见 /function。

在函数内部,@s 和 ~ ~ ~ 指的是运行 /function 的人和他所站的位置。所以你运行新手礼包函数时,拿到物品的是你。

嵌套文件夹

你可以把函数分到任意多层文件夹中:

文件夹结构
BP/functions/
  tick.json
  myname/
    starter_kit.mcfunction
    tick.mcfunction
    arena/
      start.mcfunction
      reset.mcfunction

用 /function myname/arena/start 运行嵌套的函数。

函数还可以调用其他函数。这很适合把一个大任务拆成几个小部分:

BP/functions/myname/arena/start.mcfunction
# Clean up, then teleport everyone in
function myname/arena/reset
tp @a 0 80 0
title @a title Fight!

不要调用自己

函数直接或通过其他函数调用自己,会形成无限循环。游戏会在运行太多命令后强行中止,所以结果不会是你想要的。

第 3 步:用 tick.json 每刻运行

Minecraft 每秒更新世界 20 次,每次更新叫作一刻。要让函数每刻运行,就把它列在 functions 文件夹下的 tick.json 中:

BP/functions/tick.json
{
  "values": [
    "myname/tick"
  ]
}

values 中的每一项是一个函数路径,写法和 /function 中的一样。接着编写每刻函数:

BP/functions/myname/tick.mcfunction
# Players standing on a gold block get Speed
execute as @a at @s if block ~ ~-1 ~ minecraft:gold_block run effect @s minecraft:speed 1 1 true

它每秒检查每个玩家 20 次。站在金块上的玩家会获得短暂的速度效果,只要一直站着就会不断刷新。末尾的 true 用来隐藏效果粒子。

每刻函数里的 @s 是谁?

每刻函数由游戏本身运行,不是由玩家运行,所以 @s 不指向任何人。像上面的例子那样,用带 as @a 或 as @e[...] 的 /execute 为每个玩家或生物运行命令。

每刻函数要尽量轻量。每秒对每个玩家运行 20 次的东西,开销很快就会累积起来。用 type、r 或 tag 等参数缩小选择器的范围。

重新加载修改

编辑函数文件后不需要重启游戏。运行 /reload 即可加载函数和脚本的新版本。如果某个函数里有一条错误的命令,整个文件可能都无法加载,所以请查看内容日志中的错误。参见故障排查。

命令方块

命令方块在收到红石信号时运行一条命令,直接在你的世界中工作。它们非常适合地图、小游戏和测试。附加包则更适合用函数,因为函数跟着你的包走,而不是只存在于某一个世界里。

获取命令方块

创造模式物品栏里找不到命令方块。请使用:

聊天栏
/give @s minecraft:command_block

放下后,点击或右键打开它的设置。在输入框中输入命令,不用加斜杠。

三种类型

类型颜色作用
脉冲橙色每次被激活时运行一次
连锁绿色在指向它的方块运行后立即运行
循环紫色被激活期间每刻运行

主要设置

  • 方块类型:脉冲、连锁或循环。
  • 条件:无条件总是运行。有条件只在它后面的方块执行成功时才运行。
  • 红石:需要红石会等待按钮、拉杆或红石的信号。保持开启不需要信号就会运行。
  • 延迟刻数:运行前等待这么多刻。

示例:传送按钮

  1. 放一个设为需要红石的脉冲命令方块,命令为: tp @p 0 100 0
  2. 在上面放一个石头按钮。
  3. 按下按钮:最近的玩家会飞到 0 100 0。

示例:连锁

命令方块的侧面有箭头,显示它朝向哪边。放在箭头所指位置的连锁方块会接着运行。

  1. 循环,保持开启:testfor @a[r=5]
  2. 在它前面放一个连锁方块,有条件,保持开启:effect @a[r=5] minecraft:regeneration 2 0 true

现在 5 格内的玩家都会被治疗,但只在附近有人时才生效。/testfor 找到人就算成功,而有条件的连锁方块只在成功时运行。

用函数还是命令方块?

命令方块也可以运行整个函数:在里面写 function myname/arena/start。这样逻辑保存在你的附加包中,方块只是个按钮。

下一步

命令: 指南

命令基础 ·函数和命令方块

We use cookies to improve your experience and analyse site traffic. Learn more