此页面作为一个计划施工中。计划收录基岩版命令有关内容。
欢迎参与编辑工作!
简介
本页面作为新人手册,适用于Minecraft基岩版的命令研究者/初学者/爱好者。
本页面可用于:
- 知识点快速参考。
- 研究用参考书。
- 帮助新人更好地学习命令。
导航
知识点归纳
命令方块
- 在单人游戏里,作弊必须开启才可以编辑命令方块。在多人游戏中,只能由创造模式中的管理员所编辑。
- 当世界中有很多命令方块,尤其是电路高速运转时,不显示输出可以减少内存使用以处理很多请求。
- 连锁型命令方块只在指向它的命令方块执行命令时才会执行命令。
- 条件制约:只有当连锁方块的指向的反方向的命令方块成功执行命令时才会执行命令。
- 保持开启:连锁型命令方块将在感应后执行命令。脉冲型命令方块在设置完毕后将立即激活,且此后将无法再次执行。
- 当一个连锁方块被激活时,不管它是否执行命令,只要指向另一个连锁方块,它也同样会发送出准备执行命令的信号。
- 连锁中的方块将在同一游戏刻执行命令。
- 连锁执行的信号无法传递给一个已经在这个游戏刻执行过命令的方块。[1]
命令方块矿车
- 即使
commandBlocksEnabled游戏规则被设置为False,命令方块矿车也可以运行。
命令
注:此处语法均为节选。
- clear
- 语法:
clear [玩家:目标] [物品名:字符串] [数据:整数] [最大数量:整数] - 清除指定的是最大数量,这意味着如果被清除的物品小于最大数量,命令方块依然会返回执行成功。
- 语法:
- effect
- 语法:
effect <玩家:目标> <效果:效果> [秒数:整数] [强度:整数] [true|false] - 效果的有效参数见状态效果。
- [true|false]参数决定了这个效果是否隐藏粒子。true为隐藏,false为不隐藏。
- 如果效果的时间被设定成超过1638秒(32767刻),游戏将显示“**:**”,但实际上时间仍然在减少并依然会过期。
- 语法:
- execute
- 语法:
execute <执行源:目标> <坐标:x y z> <命令:命令>
- 语法:
- 或
execute <执行源:目标> <坐标:x y z> detect <探测坐标:x y z> <方块:方块> <数据:整数> <命令:命令>
- spreadplayers
- 语法:
spreadplayers <x:坐标> <z:坐标> <分散间距:浮点数> <最大范围:浮点数> <传送目标:目标> - spreadplayers保持实体被传送的区块加载10秒左右。
- 由于数据的限制,就算是把所有的数字都调到最小,实体也会在原点三格半径大的正方形中扩散。
- 实体的传送倾向于传送到最高表面,因此如果扩散区域存在两个可到达的平面,较低的一个不会有实体被传送。
- 语法:
- tp
- 语法:
tp <传送目标:目标> <目的地:x y z> [y旋转角度:角度] [x旋转角度:角度]tp <传送目标:目标> <目的地:x y z> facing <指定朝向坐标>
- 语法:
简易的命令系统
记分板计时器
原理:循环命令方块每1秒执行20次,利用这个特性进行记分板操作,检测记分板分数,从而达到计时目的。
放置一个盔甲架,命名为“A”,执行:
/scoreboard objectives add cycle dummy
添加记分项cycle。
/scoreboard players set @e[type=armor_stand,name="A"] cycle 0
把盔甲架的分数设置为0。
命令方块链执行:
scoreboard players remove @e[type=armor_stand,name="A",scores={cycle=1..}] cycle 1
每刻给盔甲架的分数减少1,当盔甲架的分数为0,不满足条件”cycle=1..”时停止。
scoreboard players set @e[type=armor_stand,name="A",scores={cycle=0}] cycle 40
当盔甲架分数为0时,将分数设置为40,重置这个2秒的时间循环。
隐藏离线玩家分数
原理:设置两个记分项,一个用来储存分数,另一个用来显示分数。使显示分数的记分项只跟踪在线玩家的分数,即可“隐藏”离线玩家的分数。
执行:
/scoreboard objectives add point1 dummy
添加记分项point1,用于储存分数。
/scoreboard objectives add point2 dummy
添加记分项point2,用于显示分数。
/scoreboard objectives setdisplay sidebar point2
将记分项point2显示在右侧边栏。
循环命令方块执行:
/execute @a ~ ~ ~ scoreboard players operation @s point2 = @s point1
让所有玩家把自己储存分数的记分项point1赋值给用于显示分数的point2。
定时执行:
/scoreboard players reset * point2
重置记分项point2的分数(包括离线玩家)。
更多资源
算法
遍历法[2]
无序遍历
原理:使用目标选择器@r,每次随机选中一个目标进行判定。
命令方块链执行:
tag @r[tag=!snowball] add snowball
execute @a[tag=snowball] ~ ~ ~ clear @s snowball 0 0
(条件制约)execute @a[tag=snowball] ~ ~ ~ tag @s remove snowball
execute @a[tag=snowball] ~ ~ ~ give @s snowball
execute @a[tag=snowball] ~ ~ ~ tag @s remove snowball
有序遍历
原理:将每一个判定后的目标标记,重新选择目标时忽略已标记目标,在所有目标都被标记后清空标记,进入循环。
此方法较无序遍历更为稳定、高效,但更为繁琐,适用于目标较多时。
命令方块链一:判定部分
tag @r[tag=!snowball2] add snowball
execute @a[tag=snowball] ~ ~ ~ clear @s snowball 0 0
(条件制约)execute @a[tag=snowball] ~ ~ ~ tag @s add snowball2
(条件制约)execute @a[tag=snowball] ~ ~ ~ tag @s remove snowball
execute @a[tag=snowball] ~ ~ ~ give @s snowball 1
execute @a[tag=snowball] ~ ~ ~ tag @s add snowball2
execute @a[tag=snowball] ~ ~ ~ tag @s remove snowball
命令方块链二:重置部分
scoreboard objectives remove snowball
scoreboard objectives add snowball dummy
execute @a ~ ~ ~ scoreboard players add plnum snowball 1
execute @a[tag=snowball2] ~ ~ ~ scoreboard players add sbnum snowball 1
scoreboard players operation plnum
snowball -= sbnum snowball
scoreboard players test plnum snowball 0 0
(条件制约)tag @a remove snowball2