如何让命令方块探测一个人身上的经验是否有10点(不是10级)。如果有就输出红石信号(直接执行下一个命令方块也行),如果没有就不输出?

本帖最后由 Peanutz_OwO 于 2020-8-7 19:52 编辑
复制代码这句意思是检测随机玩家(@r)的经验是否是 10 点(只有等于是能通过检测的)。后面怎么执行就看你了,用比较器输出红石信号。下面有个更好的,可以看看。(我的理解有误差,所以没用 scoreboard)
- /execute if entity @r[nbt={XpTotal:10}] ...
谢谢,我去试试
zhc2008025 发表于 2020-8-7 19:04
谢谢,我去试试
其实并不需要输出红石信号
毕竟execute的执行模式除了检测还有执行"run"
且这种方式并不好,如果这个人经验点数为"11",
这种方式就无法检测到了,如果你想要检测到经验点数
在指定范围内不需要进行穷举,你需要将玩家的经验点数
储存到一个被创建的dummy记分板,然后当分数被存储了
就可以通过原版内置的目标选择器来检测scores
这个scores可以检测指定范围内的玩家,就可以通过这种
方式来检测到了
下面是举例指令组,dummyscore换成你需要的名字,不一定要写成这个名字
绿色指令部分选择一个就可以了,而不需要选择多个,say指令可以换成别的
而并非必须这样,当然你也可以把run换成if或其他检测器,这样就能实现二次检测
/execute as @a at @s store result score @s dummyscore run experience query @s points
/execute as @a[scores={dummyscore=10..}] run say 我拥有10点经验(或以上!
/execute as @a[scores={dummyscore=..10}] run say 我并没有10点经验
/execute as @a[scores={dummyscore=10..100}] run say 我的经验点数处于10和100之间!
楼上的做法都是错的,其实不管是Score和XpTotal标签还是scoreboard都是有误差的,这些命令一旦遇到/xp命令、铁砧、附魔台的增加/消耗命令就傻了不会更新,所以其实正确的做法是使用我的数据包经验值查询(我真的没打广告),然后先放个
(不受控制),里面写:复制代码命令,然后在这个命令方块的输出端放一个
(不受控制),里面写:复制代码就行了啊,然后红石信号会在连锁命令方块的输出端输出的。

- function xp:xp_query_player

- execute if entity @a[scores={xp=10..}]
有什么不用数据包的方法吗?
zhc2008025 发表于 2020-8-9 20:33
有什么不用数据包的方法吗?
那就硬检测呗,送个经验为0的经验球再检测,或者把指令包拆开来看看
凌空的猫 发表于 2020-8-9 22:04
那就硬检测呗,送个经验为0的经验球再检测,或者把指令包拆开来看看
指令萌新表示听不懂
zhc2008025 发表于 2020-8-10 11:01
指令萌新表示听不懂
首先,把指令包下载下来,然后把函数展开,每一行代码复制进指令方块即可
函数在哪?(经验值查询\data 后面有一个minecraft和一个xp,是那个?)