“ | 那么这些方块将可以通过红石信号控制来执行命令。只要使用恰当的命令,很多东西都能被编程。 | ” | |
——Jeb关于命令方块的宣告 |
命令方块(Command Block)是一种用以执行命令的方块。因为生存模式中只能通过作弊获得,它常用在多人服务器与自定义地图中。
获取
命令方块可以通过选取方块键或使用命令(如/give @s minecraft:command_block
[仅Java版]或/give @s command_block
[仅基岩版])获得。
就像其他的方块实体一样,命令方块有对应的方块实体,能够存储NBT数据,使用ctrl + 选取方块会复制命令方块内的命令和设置。这允许它被放置在别的地方时无须重新输入里面的数据。
命令方块不在创造模式物品栏中,不能在生存模式中或以非管理员身份破坏,不能被点燃,有和基岩一样的爆炸抗性。命令方块不能被活塞推动。
用途
为了避免啰嗦,以下段落可能对带类型的命令方块进行缩写
例如,连锁型命令方块称为连锁方块,等等
|
- 参见:命令和教程/命令方块
命令方块可以被红石信号所开启。此项没有权限限制,可以被一些通常情况不能使用命令的玩家执行一个特定的命令(比如,允许所有人通过/give
获得一件特定的物品,而不是让他们用/give
获得任何他们想要的东西)。
命令方块会拥有朝向(facing),决定哪个连锁方块会受到感应,“条件制约”模式的命令方块会受哪个命令方块控制。
设置
要输入或修改命令,对命令方块点击使用键以打开命令方块GUI(图形用户界面)。GUI只会在玩家处于创造模式, 拥有相关权限才会打开。在单机游戏里,作弊必须开启才可以编辑命令方块。在多人游戏中,只能由创造模式中的管理员所编辑。为了使命令方块能工作,以下在server.properties的配置必须设置为:
enable-command-block
必须为true
op-permission-level
必须为2
及以上(默认为4)
- 控制台命令
- 命令可被输入到第一个文本框。命令方块的命令长度限定在32,500个字符以内,但这个文本框一次只能显示其中的一小段。按Tab ↹可以补全命令且循环代入可选项。
- 命令方块内的命令可以加斜杠前缀(
/
),就像在聊天框使用时的那样,但这不是必需的。
- 在命令文本框下是一些如何使用目标选择器的小提示。
- 上一个输出
- 下方的文本框显示上一个命令的输出。这里的文本无法编辑。
- 文本框右边的按钮设置上一个输出是否储存并显示。它设置输出将隐藏时为
O
(默认),将显示时为X
。当世界中有很多命令方块,尤其是电路高速运转时,不显示输出可以减少内存使用以处理很多请求。
- 脉冲/循环/连锁
- 点击“脉冲/连锁/循环”按钮可更改命令方块类型。默认为“脉冲”,但非默认类型的命令方块也能被放置。命令方块改变类型时也会改变颜色:
-
- “脉冲”方块是橙色的。这种方块是“标准”的命令方块,激活一次执行一次命令。
- “连锁”方块是绿色的。这种方块只在指向它的方块执行命令时才会执行命令。这不同于条件制约模式,连锁方块检测的是指向着它的命令方块,而不是在它后面。指向它的命令方块不必是连锁方块。
- “循环”方块是紫色的。这种方块被激活时每一游戏刻都执行一次命令。
- 条件制约/不受制约
- 点击“条件制约/不受制约”按钮来改变命令方块的条件制约行为:
- “条件制约”:只有当背后的命令方块成功执行命令时才会执行命令 (“背后” 的意思是命令方块的指向的反方向,无视连锁方向)。
- “不受制约”(默认):命令方块将忽略背后的方块。
- 保持开启/红石控制
- 点击“保持开启/红石控制”按钮改变命令方块的开启需求条件:
- “红石控制”(脉冲方块和循环方块的默认设置):命令方块必须像红石机械一样激活才能执行命令。
- “保持开启”(连锁方块的默认设置):命令方块甚至在没有红石信号时也会保持为开启状态 (连锁型命令方块将在感应后执行命令, 循环型命令方块将在每一游戏刻执行一次命令(每秒20次),脉冲型命令方块在设置完毕后将立即激活,且此后将无法再次执行)。
- 完成
- 点击“完成”按钮或按↵ Enter以保存命令并退出命令方块GUI。
- 取消
- 点击“取消”按钮或按Esc在不保存任何修改的情况下退出命令方块GUI。
激活
命令方块属于红石机械 且能由以下物件激活:
- 毗邻的电源:例如红石火把(红石火把附着于命令方块上时除外)、红石块、阳光探测器、按钮等等;
- 毗邻的充能方块;
- 输出信号且指向向命令方块的红石比较器或红石中继器;
- 激活的且指向命令方块(或附着其上)的红石粉或是毗邻的点状红石粉。
命令方块有1游戏刻的延迟,当它受到红石更新时将在1游戏刻后做出反应(激活或撤销激活)。
当被激活时,命令方块将尝试执行它的命令。激活后的动作将取决于命令方块的类型:
- 命令方块(“脉冲型”)会在刚激活时尝试执行命令一次。
- 连锁的命令方块(“连锁型”)将在指向它的命令方块执行命令后才会执行命令。
- 循环中的命令方块(“循环型”)将会在每个游戏刻都尝试执行一次命令直到不再被激活为止。
连锁执行
如果一个指向连锁方块的命令方块被激活了,它将向连锁方块发出准备执行命令的信号。连锁方块只有在被激活开启时,在“条件制约”模式下还要在背后的命令方块成功执行命令时(背后针对指向而言,不是说某个命令方块接入连锁的方向),才会执行命令。不管这个连锁方块是否执行命令,只要指向另一个连锁方块,它也同样会发送出准备执行命令的信号。
连锁中的方块将在同一游戏刻执行命令。连锁执行的信号无法传递给一个已经在这个游戏刻执行过命令的方块。
输出
当激活时,命令方块可以有几种不同类型的输出:
- 红石比较器
- 命令方块可以向背对它的红石比较器输入一个信号,强度取决于上一个命令的执行情况的信号(例如,被命令所影响的玩家数)。
- 信号强度一直根据上一个命令的执行情况保持,即使是在命令方块关闭之后。
- 消息
- 输出消息描述执行命令的成功与否,会有几种输出位置:
- 上一个输出:输出消息都会写入命令方块GUI的“上一个输出”文本框里。
- 聊天框:输出信息将在单人模式下或多人模式下对所有管理员写入聊天框,除非已经用
/gamerule commandBlockOutput false
拦截。一些命令可能会在聊天框写入其正常工作时的附带文本,这不会被拦截。(比如,/say
命令将在所有玩家的聊天框写入消息)。带有执行者的名字作为前缀的聊天信息(比如命令/me
,/say
和/tell
)会使用@
作为执行者名字。如果命令方块在放置前已经被命名过,那么就使用这个名字。
- 日志:输出信息会写入到多人联机服务器日志,除非使用
/gamerule logAdminCommands false
拦截。
- 命令统计
此特性为基岩版独有。 |
- 命令方块可以推送多种成功结果到记分板目标,包括:
- SuccessCount:成功的次数(之前也能用红石比较器输出,但不会限制到15)
- AffectedBlocks:被修改的方块的个数
- AffectedEntities:被修改的实体的个数,包括玩家
- AffectedItems:被修改的物品的个数
- QueryResult:命令的返回值
- 要使用的目标可以用命令
/stats
确定或直接用命令/blockdata
修改命令方块的NBT数据。
备注
以下命令不能在命令方块中使用:/ban
、/banlist
、/ban-ip
、/debug
、/deop
、/kick
、/op
、/pardon
、/pardon-ip
、/publish
、/reload
、/save-all
、/save-off
、/save-on
、/stop
和/whitelist
(也就是/debug
、/publish
和所有除了/list
外的多人游戏命令)。
以下命令可以使用但功能受限(它们的输出只会在命令方块的“上一个输出”文本框显示而不是聊天框):/help
、/seed
、/list
、/scoreboard objectives
、/scoreboard players
和 /team list
。
以下命令会在输出中用到命令方块的名字(默认为@
):/me
、/say
和/tell
。
彩蛋
在命令方块中不加“/
”运行命令“Searge”会把上一个输出设为“#itzlipofutzli”。另外,如果在命令方块中运行/help
,它会给出一些带有“Searge says:(Searge说:) ”前缀的信息。