【MC命令进阶教程】04:Tag标签

您所在的位置:网站首页 我的世界这么用命令方块召集带名字的僵尸 【MC命令进阶教程】04:Tag标签

【MC命令进阶教程】04:Tag标签

2024-07-03 14:57| 来源: 网络整理| 查看: 265

*原创文章,未经允许禁止转载或摘编!

所有内容均适用Java 1.12.2版。详细信息见:【MC命令进阶教程】01:前言&基础

Tag标签

什么是Tag标签?Tag标签是一种标记,它就像一个称呼一样。每个实体都可以拥有很多标签。

我们使用" /scoreboard players tag "命令给实体添加自定义Tag标签。可以通过选择带有指定标签的方式选择实体。(1.13后,命令更名为" /tag ")

Tag标签主要用来简化命令预防BUG、转移命令群、或在特殊情况下选择玩家。

本期讲解:操作Tag标签的命令和以上三种情况在实际中的运用。

标签命令

有三个操作Tag标签的命令:

1、给实体添加标签:/scoreboard players tag 实体 add 标签名称

例:"/scoreboard players tag @p add 1"意为给最近的玩家添加一个名为"1"的标签。

图1 - "/scoreboard players tag @p add 1" 命令执行结果

备注:若玩家已有同名标签,命令不会执行失败、不会出现两个同名标签。即命令会执行成功、新增的标签将会覆盖之前的标签。

2、删除实体身上指定的标签:/scoreboard players tag 实体 remove 标签名称

例:"/scoreboard players tag @p remove 1"意为删除最近的玩家身上名为"1"的标签。

图2 - "/scoreboard players tag @p remove 1" 命令执行结果

图2 为玩家已有名为"1"的标签时,命令执行成功,删除指定标签。

图3 - "/scoreboard players tag @p remove 1" 命令执行结果

图3 为玩家没有名为"1"的标签时,命令执行失败,并通知“实体没有1标签”。

3、查询实体现在拥有哪些标签:/scoreboard players tag 实体 list

例:"/scoreboard players tag @p list"意为列出最近的玩家身上拥有的Tag标签。

图4 - "/scoreboard players tag @p list" 命令执行结果

图4 为玩家拥有名为"1"、"2"、"3"和"4",四个标签时,在命令方块中的查询结果。

图5 - "/scoreboard players tag @p list" 命令执行结果

图5 为玩家拥有名为"1"、"2"、"3"和"4",四个标签时,在聊天栏中的查询结果。

实际运用

使用Tag标签解决问题时,可以大致解释为:先给玩家或实体添加标签,然后通过目标选择器参数中的[tag=xx]来选择拥有指定标签的玩家或实体。最后,删除该标签。

一、简化命令、预防BUG:如下图,当金甲玩家点击按钮后:若命令方块全部使用@p选择玩家,则前后选择的玩家不一致(前面的两个命令方块选择金甲玩家,后两个选择钻甲玩家)。若指定坐标或指定区域,命令会有冗长的目标选择器参数。若使用Tag标签,只涉及第一个命令方块是否会选择出错(即把标签打在了错误的玩家身上)。

图6 - “简化命令、预防BUG” 演示图

二、转移命令群:场地不适合放置命令方块或不适合放置大量命令方块、且不适合使用trigger记分板作为触发方式时。

图7 - “转移命令群” 演示图

如上图,按钮仅触发添加标签的命令。由左边的命令群在后台给拥有指定标签的玩家执行命令。

三、特殊情况下选择玩家:

1、由于添加Tag标签的命令可以在末尾跟数据标签。即,给符合数据标签的玩家添加Tag标签。

2、玩家被随机传送到其他地方后,无法跟踪定位该玩家。即,无法使用坐标或其他方式选择玩家进行后续操作时,可通过先给玩家添加标签,然后通过标签对玩家进行相关操作。

本期的3个实例分别对应以上的一、二、三1,三种情况。三2情况在普通的功能中涉及不到,本期不做实例解释。

实例⑴ —— 简化命令

例1:跑酷结束,终点设置压力板触发命令群,领取成功奖励(一次性奖励,20000游戏币)。

Step1 & 2:

1、新建记分项,用来记录玩家是否已经领取奖励。(0分为首次通关,向其发放奖励;1分为已领取奖励,通知其已领取奖励)

2、沿用02期"money"记分项记录玩家余额。(用于发放奖励)

3、给踩下压力板的玩家添加标签并给1分的玩家通知已领取奖励。

4、给0分的玩家发放奖励并将其设为1分。

5、删除玩家的标签。

Step 3:

前置:命令群运行之前按顺序各执行一次,聊天栏或命令方块中都可。

新建一个名为"PKTongJi"、仅能被管理员操作的记分项:/scoreboard objectives add PKTongJi dummy

用于记录玩家是否领取跑酷通关奖励;玩家分数是0分为未领取,是1分为已领取。

新建一个名为"money"、仅能被管理员操作的记分项:/scoreboard objectives add money dummy 银行余额

用于记录玩家的游戏币余额,给玩家发放奖励。若有同样功能的记分项,自行更改。

主体命令群(已优化):

图8 - 实例⑴命令群

①脉冲不受制约红石控制:/scoreboard players tag @p add PaoKu

给最近的玩家添加标签 "PaoKu"。

②连锁条件制约保持开启:/scoreboard players add @p[tag=PaoKu] PKTongJi 0

给该玩家在"PKTongJi"记分项上加0分,将首次领取奖励的玩家记录到记分项上。

③连锁条件制约保持开启:/tellraw @p[tag=PaoKu,score_PKTongJi_min=1] [{"text":"【系统】","color":"light_purple","bold":"true"},{"text":"您已挑战成功并领取奖励,本次通关无奖励发放!","color":"red"}]

图9 - 通知文字 - ③号命令执行结果

④连锁不受制约保持开启:/scoreboard players add @p[tag=PaoKu,score_PKTongJi=0] money 20000

给未领取奖励的玩家发放20000游戏币作为奖励。

⑤连锁条件制约保持开启:/tellraw @p[tag=PaoKu] [{"text":"【系统】","color":"light_purple","bold":"true"},{"text":"恭喜您挑战成功!","color":"aqua"},{"text":"20000游戏币已发放!","color":"gold"},{"text":"(本奖励为一次性奖励,若再次通关将不会有奖励发放。)","color":"gray","italic":"true"}]

图10 - 通知文字 - ⑤号命令执行结果

通知玩家奖励已发放,再次领取无效。

⑥连锁条件制约保持开启:/scoreboard players set @p[tag=PaoKu] PKTongJi 1

给该玩家在 "PKTongJi"记分项上的分数设为1分,将其记录为已领取奖励。

⑦连锁不受制约保持开启:/scoreboard players tag @p[tag=PaoKu] remove PaoKu

删除该玩家的标签。

实例⑵ —— 转移命令群

例2:右击告示牌购买物品。

Step 1 & 2:

1、沿用02期"money"记分项记录玩家余额。(用于扣除游戏币,略)

2、右击告示牌给玩家添加标签。

3、给游戏币不足的玩家通知余额不足。

4、给游戏币充足的玩家发放物品、扣除游戏币并通知购买成功。

5、删除玩家身上的标签。

Step 3:

前置:

1、新建"money"记分项:/scoreboard objectives add money dummy 银行余额

2、放置告示牌:

图11 - 告示牌

放置告示牌的命令:/setblock ~ ~1 ~ minecraft:wall_sign 2 replace {Text1:"[{\"text\":\"橡木原木 64个\",\"bold\":true,\"italic\":true,\"color\":\"blue\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"scoreboard players tag @p add Buy01\"}}]",Text2:"[{\"text\":\"128 游戏币\",\"bold\":true,\"italic\":true,\"color\":\"blue\"}]",Text3:"",Text4:"{\"text\":\"右键购买\",\"bold\":true,\"italic\":true,\"underlined\":true,\"color\":\"dark_red\"}"}

备注:添加标签的命令放入告示牌后,可被无权限的普通玩家使用。不需要命令方块,更加美观。告示牌属性及朝向见:CV120131。

图11告示牌的后台命令组(已优化):

图12 - 后台命令组

①循环不受制约保持开启:/tellraw @p[tag=Buy01,score_money=127] [{"text":"【系统】","bold":true,"color":"light_purple"},{"text":"游戏币不足,您的余额为:","color":"aqua"},{"score":{"name":"@p[tag=Buy01]","objective":"money"},"color":"white"}]

图13 - 通知文字 - ①号命令执行结果

给游戏币不足127的玩家告知其余额。

②连锁不受制约保持开启:/give @p[tag=Buy01,score_money_min=128] minecraft:log 64

给游戏币足够的玩家64个橡木原木。

③连锁条件制约保持开启:/scoreboard players remove @p[tag=Buy01] money 128

扣除该玩家128个游戏币。

④连锁条件制约保持开启:/tellraw @p[tag=Buy01] [{"text":"【系统】","bold":true,"color":"light_purple"},{"text":"购买“橡木原木”成功!已扣除 128 游戏币!您的余额为:","color":"aqua"},{"score":{"name":"@p[tag=Buy01]","objective":"money"},"color":"white"}]

图14 - 通知文字 - ④号命令执行结果

通知玩家购买成功,并告知其余额。

⑤连锁不受制约保持开启:/scoreboard players tag @p[tag=Buy01] remove Buy01

删除玩家身上的标签。

实例⑶ —— 在特殊情况下选择玩家

在跑酷区域有玩家使用鞘翅飞行,需要禁止玩家装备鞘翅(即胸甲栏为鞘翅),否则传送回主城。

Step1 & 2:

1、给跑酷区域内装备鞘翅的玩家添加Tag标签 "hava_elytra" 。

2、给拥有标签的玩家发送警告语言。

3、将该玩家传送至主城。

4、删除该玩家的标签。

Step3:

图15 - 实例⑶命令群

①循环不受制约红石控制:/scoreboard players tag @p[x=500,y=100,z=500,r=150] add have_elytra {Inventory:[{id:"minecraft:elytra",Slot:102b}]}

[x=500,y=100,z=500,r=150]部分:选择范围;{Inventory:[{id:"minecraft:elytra",Slot:102b}]}:胸甲栏为鞘翅。

意为:给指定区域内,胸甲栏为鞘翅的玩家添加"have_elytra"标签。

②连锁条件制约保持开启:/tellraw @p[tag=have_elytra] [{"text":"【系统】","color":"light_purple","bold":true},{"text":"跑酷区域禁止装备鞘翅!请将鞘翅收回背包!","color":"red"}]

图16 - 通知文字 - ②号命令执行结果

给拥有"hava_elytra"标签的玩家发送警告文字。

③连锁条件制约保持开启:/tp @p[tag=have_elytra] 0 100 0

将该玩家传送出跑酷区域。

④连锁条件制约保持开启:/scoreboard players tag @a[tag=have_elytra] remove have_elytra

删除该玩家的标签。

完。

P.S.

下期学习stats命令。

实例均可直接使用。望各位不要照抄,多多学习!

看到有不懂的地方欢迎在评论区提问 ~~

谢谢阅读! 

烦请各位读者大大们来个三连,关注我看更多Minecraft的内容 ^_^~~~ 

关注点赞哟!!!(ˉ▽ ̄~) ~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3