Minecraft检测手中物品指令组-指令组教学文案


检测手中的物品可以干很多事,例如触发其他指令组。但指令小白表示毫无头绪,今天我就为大家解答!大家好,我是光明传奇。今天给大家带来指令组教学。今天我们教的是检测手中的物品。
共分为两类,第一是主手,第二个是副手。但大同小异。我们先介绍整体逻辑如何。再根据主手和副手进行一定调整。检测手上物品要根据被检测后,要执行的那条指令的特性进行一定的修改,因为这条将被执行的指令效果是让最近的人脚下生成一个钻石图案的烟花。所以需要将执行位置锁定在最近的玩家的实体上。先用execute at锁定实体的位置,注意玩家也属于实体。
所以后面要接目标选择器。目标选择器就是用来筛选你要的选择的实体的东西,例如“最近的一个“,需要sort=nearest和limit=1分别表示最近的和一个。其实目标选择器还可以选择更多东西,帮助你更加精确地找到你想要锁定的是实体。所以有兴趣的玩家可以看我这个影片!我在这个指令详细地介绍了各个目标选择器的作用。同时这个筛选最精华的部分也是在目标选择器里。1.13为目标选择器添加了筛选NBT的功能。
NBT是什么?NBT可以与我的世界实体或方块的特性一一对应,换句话说,同一个特性如果它在NBT上被修改了,它在游戏内显示的特性也会被修改。同时如果游戏内特性被利用游戏内的方法修改了。NBT也会同时预期对应。例如nbt,“Pumpkin”是控制雪人是否有南瓜头,1就是有,0就是无。当我们剪下南瓜头它的Pumpkin就会变为0。同时我们用指令修改它的Pumpkin为0。它也会变为没有南瓜头。当然玩家的NBT不能被修改,但可以被检测。例如SelectedItem就是记录玩家主手物品信息的。id就是检测你手上是什么物品,注意指令的所有符号都要用英文半角符号,区别于中文符号。而且这里minecraft:前缀是不能省略的,你不加上就会无法运行指令,后面的tag表示它在物品形式下的nbt,如果你要检测物品是否有nbt,例如附魔,需要在tag里面填上限制物品的nbt,例如你希望触发指令的物品是你指定的,也就是加过标签的,这样防止被人用野生的,不是通过你设定的关卡得到的物品蒙混过关。
所以物品也有一个nbt,”Tags”这个也叫标签,但它的作用仅作为标记。Tags里每个引号都是一个标记。然后我们检测的是 最近的 一个 物品标签里Tags里有1的,id为红石的物品。全部符合就通过,目标选择器后就可以接run,run是execute中执行的子命令。run后面就是要执行的命令,可以是放置红石块触发指令组,也可以是一个其他的指令。这里是,在我面前放一个图标为钻石的烟花。我个人认为烟花很有趣,如果点赞超过20(up主胆子肥了233),我就在下期介绍烟花,包括如何修改图标。原理介绍完了,然后检测副手的原理就容易理解多了。因为副手是固定格位,所以这次我们用的nbt就是Inventory物品栏,里面一个大括号就是一个物品格位的内容。Slot就是格位编号,-106就是副手编号,b就是后缀,一般我为了避免不必要的问题都会添加后缀。id和tag以及Tags和以上同理。
但以上指令均无法支持多人。所以在execute 前加入as at,as是指定执行的实体是谁,at是指定执行位置为某一实体的位置后面都是接目标选择器,目标选择器后面都为execute 的某一子命令,所以as 后接at,前面as就用@a加之前讲过的用来筛选实体的目标选择器。at 后面接 @s,@s指的是执行实体。因为前面用as指定执行实体了,所以我们就可以直接用@s把执行位置定在符合条件的每个人身上。然后就能分别执行,如此就能支持多人。
仅仅是这样还不行,因为要支持玩家玩你的地图。不可能让他按按钮,所以需要正式进入指令组阶段。分为主手和副手两个。我们先从副手开始。
首先是检测玩家是否符合条件即是否有指定的标签的红石,如果符合就执行指令tag将这个玩家标记为firework。第二条指令以这个“标签玩家”为执行实体和以他的位置为执行位置生成一个烟花,这个烟花图标是钻石。第三条指令就是将“标签玩家”的副手替换成空气也就是清空。第四条指令给“标签玩家”一个被标记的红石,最后移除标签。
主手检测就是第一个指令的目标选择器里的nbt换成上文中检测主手。第二条指令相同,第三条指令将副手格位改成主手格位。第四五条指令也相同。就是给红石,除标记。
好了下面是展示时间,但玩的时候注意,烟花声音有点大,获得红石的声音也有点频繁,所以我这里把玩家音效和环境音效关了。而且可以用这条指令关闭显示。最后如果这期视频投币超过20(几乎不可能)我就把这个做成数据包。数据包可以直接放在地图文件夹里执行指令。这样就很方便了。
以上就是本期视频的全部内容,感谢大家的观看。希望给入门指令的小白一些启示。
你以为这就完了吗,其实差不多了,这期视频是因为有一个人问我检测手上物品,然后执行其他指令。我觉得这个问题很常见。我这里再完整地回答一下他的问题,在把要检测后要执行的部分替换成在某位置放一个红石块,红石块旁边放指令组。别忘了点赞投币收藏,你不投币,点赞也好啊。我是光明传奇,我们下次再见吧,拜拜。
give @a minecraft:redstone{Tags:["1"]}
execute at @a[sort=nearest,limit=1,nbt={SelectedItem:{id:"minecraft:redstone",tag:{Tags:["1"]}}}] if entity @p run summon minecraft:firework_rocket ^ ^1 ^1 {LifeTime:9,FireworksItem:{id:"minecraft:diamond",Count:1b}}
execute at @p[nbt={Inventory:[{Slot:-106b,id:"minecraft:redstone",tag:{Tags:["1"]}}]}] run summon minecraft:firework_rocket ^ ^1 ^1 {LifeTime:9,FireworksItem:{id:"minecraft:diamond",Count:1b}}
execute as @a at @s run summon minecraft:firework_rocket ^ ^1 ^1 {LifeTime:9,FireworksItem:{id:"minecraft:diamond",Count:1b}}
execute as @a[nbt={Inventory:[{Slot:-106b,id:"minecraft:redstone",tag:{Tags:["1"]}}]}] at @s run tag @s add firework
execute as @a[tag=firework] at @s run summon minecraft:firework_rocket ^ ^1 ^1 {LifeTime:9,FireworksItem:{id:"minecraft:diamond",Count:1b}}
item replace entity @a[tag=firework] weapon.offhand with air
give @a[tag=firework] minecraft:redstone{Tags:["1"]}
tag @a[tag=firework] remove firework
execute as @a[nbt={SelectedItem:{id:"minecraft:redstone",tag:{Tags:["1"]}}}] at @s run tag @s add firework
execute as @a[tag=firework] at @s run summon minecraft:firework_rocket ~ ~ ~ {LifeTime:5,FireworksItem:{id:"minecraft:diamond",Count:1b}}
item replace entity @a[tag=firework] weapon.mainhand with air
give @a[tag=firework] minecraft:redstone{Tags:["1"]}
tag @a[tag=firework] remove firework
gamerule commandBlockOutput false
execute at @p[nbt={Inventory:[{Slot:-106b,id:"minecraft:redstone",tag:{Tags:["1"]}}]}] run setblock 704 4 164 minecraft:redstone_block