检测物品数量

By MCSugar_cane    2018/07/27

检测背包某个物品的数量方法,如果你看过之前的检测玩家背包及手持物品,也许你会说“这也太麻烦了吧,难不成要把1-64个物品都列举一遍吗?”。当然不是如此,且如果这样多几个堆叠,那种方法是不适用的。

在开始之前,我们先来了解一下MC中的/stats指令,相信有玩家对这个指令都不熟悉,甚至完全陌生。其实在你与其接触后,你会发现stats的便利与强大。首先/stats有两种选择器,entity和block。格式如下:

  1. /stats entity <玩家名> set <模式> <玩家名2> <计分板变量名>
  2. /stats entity <玩家名> clear <模式>
  3. /stats block set <模式> <玩家名> <计分板变量名>
  4. /stats block clear <模式>

填entity还是block取决于命令是由实体执行还是由命令方块(或牌子)执行的,如果是命令方块执行execute之类的命令,那么也算是实体执行的命令。选择entity时, 有前后两个实体,前一个实体是执行命令的实体,后一个实体用于存储计分板,可以是虚拟实体(如scoreboard players set iam emptyScore 0,这里的iam就是虚拟实体)。另外,也是比较重要的,用于存储的玩家的对应计分板必须有数值,否则正常运行。所以建议在/stats执行之前先给玩家对应计分板分数add 0。

另外,关于模式分别有以下几种:

  1. AffectedBlocks :命令影响的方块数
  2. AffectedEntities :命令影响的实体数
  3. AffectedItems :命令影响的物品数
  4. QueryResult :命令获取的结果
  5. SuccessCount :命令成功执行的次数

我们是要统计玩家身上的某个物品数量,所以选择AffectedItems这个模式。首先创建一个用于记录的计分板(scoreboard objectives add itemNum dummy),具体代码如下:

  1. /scoreboard players add @a itemNum 0
  2. /stats entity @a set AffectedItems @p[r=0] itemNum
  3. /execute @a ~ ~ ~ /clear @p[r=0] minecraft:diamond 0 0
  4. /stats entity @a clear AffectedItems
  5. /execute @a ~ ~ ~ tellraw @p[r=0] ["\n\u00a7a\u00a7l> \u00a7r你目前有",{"score":{"name":"@p[r=0]","objective":"itemNum"},"color":"gold","bold":"true"},"个钻石\n"]


另外,关于更多/stats的应用,可见玩家附近方块数量探测