你可以帮助我们扩充关于该主题的更多信息。
开始
部分术语列表
| 术语 | 英文全称 | 中文全称 |
|---|---|---|
| aec | Area Effect Cloud | 区域效果云(药水云) |
| as | Armor Stand | 盔甲架 |
| cb | Command Block | 命令方块 |
| icb | Impulse Command Block | 脉冲型命令方块 |
| ccb | Chain Command Block | 连锁型命令方块 |
| rcb | Repeating Command Block | 循环型命令方块 |
| exe | /execute | /execute |
| scb | Scoreboard | 记分板 |
| fun | Function | 函数 |
| 术语 | 解释 |
|---|---|
| 脉冲执行 | 仅执行一次。 |
| 低频执行 | 以适当的延迟循环执行。 |
| 高频/循环执行 | 以每游戏刻1次的速度循环执行。 |
| 超频执行 | 以每游戏刻10000次(函数)或更高的速度循环执行。 |
命令方块
- 在单人游戏中,作弊必须开启才可以编辑命令方块。在多人游戏中,只能由创造模式中的管理员所编辑。
- 当世界中有很多命令方块,尤其是电路高速运转时,不显示输出可以减少内存使用以处理很多请求。
- 连锁型命令方块只在指向它的命令方块执行命令时才会执行命令。
- 条件制约:只有当连锁方块的指向的反方向的命令方块成功执行命令时才会执行命令。
- 保持开启:连锁型命令方块将在感应后执行命令。脉冲型命令方块在设置完毕后将立即激活,且此后将无法再次执行。
- 当一个连锁方块被激活时,不管它是否执行命令,只要指向另一个连锁方块,它也同样会发送出准备执行命令的信号。
- 连锁中的方块将在同一游戏刻执行命令。
- 连锁执行的信号无法传递给一个已经在这个游戏刻执行过命令的方块。[1]
- 游戏规则
maxCommandChainLength决定了连锁型命令方块能连锁执行的总数量,默认为65536。
命令方块矿车
- 即使
commandBlocksEnabled游戏规则被设置为False,命令方块矿车也可以运行。
命令
注:此处语法均为节选。
- clear
- 语法:
clear [玩家:目标] [物品名:字符串] [数据值:整数] [最大数量:整数] - 清除指定的是最大数量,这意味着如果被清除的物品小于最大数量,命令方块依然会返回执行成功。
- 数据值设为-1时,将对所有数据值的物品有效。
- 语法:
- 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 <指定朝向坐标>
- 语法:
- scoreboard与tag
- 语法:见主条目。
- *参数可以代替目标选择器:在scoreboard中代表所有被跟踪的目标(包括离线玩家和虚拟实体),但在tag中代表所有游戏内实体(不包括离线玩家)。
技巧
记分板计时器
原理:循环命令方块每1秒执行20次,利用这个特性进行记分板操作,检测记分板分数,从而达到计时目的。
脉冲执行:
summon arnor_stand A ~ ~ ~
生成一个名为“A”的盔甲架。<nr>
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的分数,用于清除离线玩家的显示。
遍历法
无序遍历
原理:使用目标选择器@r,每次随机选中一个目标进行判定。
实例:
循环执行:
tag @a remove test
tag @r add test
clear @a[tag=test] snowball 0 0
(条件制约)tag @a remove test
give @a[tag=test] snowball 1
有序遍历
原理:将每一个判定后的目标标记,重新选择目标时忽略已标记目标,在所有目标都被标记后清空标记,进入循环。
此方法较无序遍历更为稳定、高效,但更为繁琐,适用于目标较多时。
实例:
循环执行:判定部分
tag @a remove test
tag @r[tag=!have_snowball] add test
clear @a[tag=test] snowball 0 0
(条件制约)tag @a[tag=test] add have_snowball
(条件制约)tag @a remove test
give @a[tag=test] snowball 1
tag @a[tag=test] add have_snowball
循环执行:重置部分
scoreboard objectives remove snowball
scoreboard objectives add snowball dummy
execute @a ~ ~ ~ scoreboard players add plnum snowball 1
execute @a[tag=have_snowball] ~ ~ ~ scoreboard players add sbnum snowball 1
scoreboard players operation plnum
snowball -= sbnum snowball
scoreboard players test plnum snowball 0 0
(条件制约)tag @a remove have_snowball
视频
二分法
原理:数学上二分法的定义:对于在一段[a,b]区间内的连续函数,且f(a)·f(b)<0,通过不断的把区间一分为二,端点逐渐逼近零点的过程。将其运用在Minecraft中,就是二分法算法。
实例:
重置/初始化部分:脉冲执行于每次计算的开始。
scoreboard objectives add 2 dummy
scoreboard players set b 2 0
scoreboard players set c 2 100000
scoreboard players set d 2 0
scoreboard players set e 2 0
scoreboard players set f 2 10
scoreboard players set g 2 100
scoreboard players set h 2 10000
scoreboard players set b2 2 0
scoreboard players set b3 2 0
scoreboard players set int 2 0
scoreboard players set int100 2 0
scoreboard players set o 2 0
scoreboard players operation a 2 *= h 2
输入部分:控制台执行于重置/初始化部分完成之后。
scoreboard players set a 2 <被开方数>
运算部分(二分法主体):循环执行于计算过程中。
scoreboard players operation d 2 = b 2
scoreboard players operation d 2 *= b 2
scoreboard players operation e 2 = a 2
scoreboard players operation e 2 -= d 2
scoreboard players test e 2 -2147483647 -1
(条件制约)scoreboard players operation b 2 -= c 2
(条件制约)scoreboard players operation c 2 /= f 2
scoreboard players operation b 2 += c 2
拆分计算结果数位部分:脉冲执行于运算部分完成之后。
scoreboard players operation o 2 = a 2
scoreboard players operation o 2 /= h 2
scoreboard players operation b2 2 = b 2
scoreboard players operation int 2 = b2 2
scoreboard players operation int 2 /= g 2
scoreboard players operation b3 2 = b 2
scoreboard players operation b3 2 %= f 2
scoreboard players operation b4 2 = b3 2
scoreboard players operation b3 2 = b 2
scoreboard players operation int100 2 = int 2
scoreboard players operation int100 2 *= g 2
scoreboard players operation b3 2 -= int100 2