新版execute指令完全生存手册:从懵逼到精通
凌晨三点,界匹我又在基岩版里折腾execute指令了。配区这玩意儿从1.19.60更新后简直像换了套语法,指令上次用还顺手的新版位置检测突然就报错,气得我差点把键盘上的界匹WASD键抠下来...
一、为什么你的配区旧指令突然失效
记得去年用execute @e[type=zombie] ~~~ detect ~~-1~ grass 0 summon lightning_bolt
给僵尸渡劫多爽快,现在直接给你甩个红色错误提示。指令Mojang在基岩版1.19.60搞了次大手术,新版把Java版那套语法移植过来了。界匹
- 旧版是配区主体→位置→子命令的三段式
- 新版变成主体→子命令→条件的俄罗斯套娃
功能 | 旧版示例 | 新版等效写法 |
检测脚下方块 | execute @p ~~~ detect ~~-1~ grass 0 say 踩到草了 | execute as @p at @s if block ~~-1~ grass run say 踩到草了 |
范围伤害 | execute @e[type=creeper,r=5] ~~~ damage @s 10 | execute as @e[type=creeper,distance=..5] run damage @s 10 |
二、新语法核心拆解
现在这套语法像乐高积木,指令能拼出各种骚操作。新版凌晨四点测试时发现个规律:只要记住"as/at/positioned/align/rotated"这五个前缀词,界匹就能解决90%的配区场景。
1. 实体控制三件套
as @e[type=armor_stand]
→ 让盔甲架背锅at @s
→ 在当前位置搞事情positioned ~ ~2 ~
→ 把执行点抬高三格
昨天给村民交易所加自动收菜时这么用:execute as @e[type=item] at @s if block ~~~ composter run kill @s
,指令效果是让掉进堆肥桶的作物自动消失。
2. 条件检测的坑
新版把detect
拆成了if block
和unless block
,但有个反人类设定:坐标偏移必须写在block前面。有次我写成if block ~~-1~ dirt unless block ~ ~-1 ~ grass
死活不工作,后来才发现要改成:
execute positioned ~ ~-1 ~ if block ~ ~ ~ dirt unless block ~ ~ ~ grass run setblock ~ ~1 ~ diamond_block
三、实用案例仓库
这些是我生存模式实测可用的配方,带点使用场景的碎碎念:
1. 智能照明系统
晚上挖矿老忘记带火把?用这个在背包没火把时自动提示:
execute as @a unless entity @s[nbt={ Inventory:[{ id:"minecraft:torch"}]}] run title @s actionbar 记得带火把啊笨蛋!
2. 怪物围栏警报
用@e[type=!player]
排除玩家检测,防止误触:
execute as @e[type=!player,distance=..3] at @s run playsound mob.zombie.remedy block @a ~ ~ ~ 1 0.8
3. 自动收割机
配合循环命令方块,成熟作物秒变经验球:
execute as @e[type=item] at @s if block ~~~ wheat[age=7] run summon experience_orb ~~~
四、调试翻车现场
上周试图做自动门时遇到的典型错误:
- 错误1:
execute @a[distance=..3] run setblock ~ ~1 ~ air
→ 缺少as/at导致坐标错乱 - 正确版:
execute as @a at @s[distance=..3] run setblock ~ ~1 ~ air
还有个隐蔽bug是NBT检测的引号问题,比如检测手持物品时:
// 这个会报错execute as @a[nbt={ SelectedItem:{ id:"minecraft:diamond_sword"}}]// 要改成这样execute as @a[nbt={ SelectedItem:{ id:"minecraft:diamond_sword",Count:1b}}]
天快亮了,最后分享个冷知识:新版execute其实能嵌套20层,但超过5层就容易出现"参数类型不匹配"的玄学错误。有次我写自动树场指令,在第七层嵌套时游戏直接卡崩...建议复杂逻辑还是拆成多个命令方块吧。
咖啡机开始作响,窗外传来早鸟的叫声。这些指令片段应该够应付大多数生存需求了,要是遇到特别诡异的报错,试试把run
后面的指令单独执行——这是我在某个MCPEDL论坛帖子里学到的土办法,意外地好用。