使用tellraw指令显示玩家手持物品的信息,包含此物品所有nbt标签。
目前能想到的就是通过hoverEvent,但是又不知道怎么写。
求大佬指点!
版本:1.20.1
可用数据包
目前能想到的就是通过hoverEvent,但是又不知道怎么写。
求大佬指点!
版本:1.20.1
可用数据包
(直接/data get entity @s SelectedItem不好嘛)
首先tellraw发送到聊天栏的文本的hoverEvent只能显示一个物品的NBT,如果你在发送后切换物品,那它显示的还会是你之前手持的物品。
也就是说每次你更换手中物品,都得重新发送一次“1”。
然后如果真的要实现的话,要利用到麻烦的字符串切割,请看:
【[23w03a]更新了字符串切割可以实现动态命令了】
https://www.bilibili.com/video/B ... 4bf18dd7519d4e18dfa
基本思路:
首先tellraw发送到聊天栏的文本的hoverEvent只能显示一个物品的NBT,如果你在发送后切换物品,那它显示的还会是你之前手持的物品。
也就是说每次你更换手中物品,都得重新发送一次“1”。
然后如果真的要实现的话,要利用到麻烦的字符串切割,请看:
【[23w03a]更新了字符串切割可以实现动态命令了】
https://www.bilibili.com/video/B ... 4bf18dd7519d4e18dfa
基本思路:
本帖最后由 t1546542 于 2023-7-21 16:49 编辑
其实就是要让他显示之前手持的物品……
表述可能不太清楚标红的NBT那里怎么填写
8784 发表于 2023-7-21 15:29
(直接/data get entity @s SelectedItem不好嘛)
首先tellraw发送到聊天栏的文本的hoverEvent只能显示一个物 ...
其实就是要让他显示之前手持的物品……
表述可能不太清楚标红的NBT那里怎么填写
t1546542 发表于 2023-7-21 16:47
其实就是要让他显示之前手持的物品……
表述可能不太清楚
标红的NBT那里怎么填写
破案了,只要一行指令就行了,我想得太复杂了。。。
- /tellraw @s {"text":"1","hoverEvent":{"action":"show_text","contents":{"nbt":"SelectedItem","entity":"@s"}}}
t1546542 发表于 2023-7-21 20:23
em
只能显示一段NBT数据
怎么做到像鼠标移上物品栏的物品之后显示的效果 ...
昨天实验了一下,发现好像是不行的,原因在于/tellraw指令一定会引入引号,导致转义,使得动态指令无法成型
分析:
如果要实现显示物品,那就得用show_item,即
- /tellraw @p {"text":"1","hoverEvent":{"action":"show_item","contents":{"id":"xxx","tag":"NBT"}}}
其中id和tag均不能直接写入,必须借助字符串切割实现动态指令
根据我了解的动态指令写法,
第一步,合成所需json文本,输入到告示牌上
- data modify block 0 -60 0 front_text.messages.[1] set value '{"text":"/tellraw @p {\"text\":\"查看物品\",\"hoverEvent\":{\"action\":\"show_item\",\"contents\":{\"id\":\"","extra":[{"nbt":"id","storage":"texts"},{"text":"\",\"tag\":\""},{"nbt":"tag","storage":"texts"},{"text":"}}"}]}'
第二步,将告示牌处理得到的文本转换为实体名称
- data modify entity @e[tag=Helper,limit=1] CustomName set from block 0 -60 0 front_text.messages.[1]
第三步,在命令方块输出中,实体名称由json文本转换为普通字符串,所以可以字符串切割命令方块输出,得到所需指令
- /data modify block 14 -60 4 Command set string block 16 -60 4 LastOutput 91 -38
但是我按照流程下来,却得到无法执行的:
- /tellraw @p {"text":"查看物品","hoverEvent":{"action":"show_item","contents":{"id":"minecraft:compass","tag":"{LodestoneDimension:\\"minecraft:overworld\\",LodestonePos:{X:14,Y:-60,Z:-1},LodestoneTracked:1b}"}}}
所以应该是不行的,因为tellraw一定会引入 " ,在命令方块输出中发生了转义,产生了大量 \ ,使得执行失败
应该可以吧如果是玩家执行的话就行:
复制代码
命令方块执行的话,就用execute改变执行者:
复制代码
- tellraw @s {"text": "1","hoverEvent": {"action": "show_text","value": {"nbt": "SelectedItem.tag","entity": "@s"}}}
命令方块执行的话,就用execute改变执行者:
- execute as @p run tellraw @s {"text": "1","hoverEvent": {"action": "show_text","value": {"nbt": "SelectedItem.tag","entity": "@s"}}}
t1546542 发表于 2023-7-21 20:23
em
只能显示一段NBT数据
怎么做到像鼠标移上物品栏的物品之后显示的效果 ...
鼠标移动上物品栏是不会显示具体的NBT的,只会显示有多少个标签。
t1546542 发表于 2023-7-23 18:28
那怎么办
用数据包里面的东西可以吗
什么意思?你是说你的物品是数据包里的固定的,可以穷举?
t1546542 发表于 2023-7-24 01:35
不是
就是想问问用数据包可不可以实现这个功能
不可以。我上面说的不行是已经考虑了数据包的。原版都不行。
23w31a快照新增了动态命令和宏,应该可以实现这个功能。
装高亮显示的mod就可以了