在0.6版本后加入了自定义选择器,支持精确检测伤害与击杀(在继续后面的内容之前,请先学习自定义选择器的使用方法)
首先来回顾几个gq属性
gquid | 该实体uid |
gkatkt | 该实体最后一次对造成伤害实体的uid |
gkonatk | 该实体最后一次受伤来源实体的uid |
gkkillt | 该实体最后一次击杀实体的uid |
gkonkill | 该实体最后一次被击杀者的uid |
1.也就是说实体A攻击实体B后,实体A的gkatkt为实体B的uid,实体B的gkonatk为实体A的uid
2.当实体A击杀实体B后(实体B若不可复活已被移除则无属性),实体A的gkkillt为实体B的uid,实体B的gkonkill为实体A的uid
接下来我们假设一个情景,玩家A攻击了一下玩家B:
//首先我们设计选择器,通过玩家A选择到玩家B,也就是执行方是玩家A
@a[var.gquid=$self.var.gkatkt]
我们来一步步解析这个选择器:
1.首先选择器使用@a,将范围限制为玩家
2.参数使用了gquid,这样会精确选择到某一个玩家,根据自定义选择器语法,参数名为var.gquid
3.参数值使用了变量的取值运算,取了执行者的gkatkt属性,前面回顾过,这个属性记录上次攻击实体的uid
4.如此一来,就可以精确无误选择到受击的玩家了
//我们现在组合命令,假设执行者为玩家A
/gkrun "@a[var.gquid=$self.var.gkatkt]" "execute as @s run say 我被打了“
如此以来,玩家B会输出一句“我被打了”
击杀检测也是如此原理,替换下变量即可
/gkrun "@a[var.gquid=$self.var.gkkillt]" "execute as @s run say 我被杀了“