t1546542
使用tellraw指令显示玩家手持物品的信息,包含此物品所有nbt标签。
目前能想到的就是通过hoverEvent,但是又不知道怎么写。
求大佬指点!
版本:1.20.1
可用数据包

8784
(直接/data get entity @s SelectedItem不好嘛)
首先tellraw发送到聊天栏的文本的hoverEvent只能显示一个物品的NBT,如果你在发送后切换物品,那它显示的还会是你之前手持的物品。
也就是说每次你更换手中物品,都得重新发送一次“1”。
然后如果真的要实现的话,要利用到麻烦的字符串切割,请看:
【[23w03a]更新了字符串切割可以实现动态命令了】
https://www.bilibili.com/video/B ... 4bf18dd7519d4e18dfa
基本思路:




t1546542
本帖最后由 t1546542 于 2023-7-21 16:49 编辑
8784 发表于 2023-7-21 15:29
(直接/data get entity @s SelectedItem不好嘛)
首先tellraw发送到聊天栏的文本的hoverEvent只能显示一个物 ...

其实就是要让他显示之前手持的物品……
表述可能不太清楚标红的NBT那里怎么填写

8784
t1546542 发表于 2023-7-21 16:47
其实就是要让他显示之前手持的物品……
表述可能不太清楚
标红的NBT那里怎么填写

破案了,只要一行指令就行了,我想得太复杂了。。。
  1. /tellraw @s {"text":"1","hoverEvent":{"action":"show_text","contents":{"nbt":"SelectedItem","entity":"@s"}}}
复制代码

t1546542
8784 发表于 2023-7-21 19:34
破案了,只要一行指令就行了,我想得太复杂了。。。                                                    ...

em
只能显示一段NBT数据
怎么做到鼠标移上物品栏的物品之后显示的效果

8784
t1546542 发表于 2023-7-21 20:23
em
只能显示一段NBT数据
怎么做到像鼠标移上物品栏的物品之后显示的效果 ...

昨天实验了一下,发现好像是不行的,原因在于/tellraw指令一定会引入引号,导致转义,使得动态指令无法成型
分析:
如果要实现显示物品,那就得用show_item,即
  1. /tellraw @p {"text":"1","hoverEvent":{"action":"show_item","contents":{"id":"xxx","tag":"NBT"}}}
复制代码

其中id和tag均不能直接写入,必须借助字符串切割实现动态指令
根据我了解的动态指令写法,
第一步,合成所需json文本,输入到告示牌上
  1. 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":"}}"}]}'
复制代码

第二步,将告示牌处理得到的文本转换为实体名称
  1. data modify entity @e[tag=Helper,limit=1] CustomName set from block 0 -60 0 front_text.messages.[1]
复制代码

第三步,在命令方块输出中,实体名称由json文本转换为普通字符串,所以可以字符串切割命令方块输出,得到所需指令
  1. /data modify block 14 -60 4 Command set string block 16 -60 4 LastOutput 91 -38
复制代码

但是我按照流程下来,却得到无法执行的:
  1. /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一定会引入 " ,在命令方块输出中发生了转义,产生了大量 \ ,使得执行失败

MC新人新
应该可以吧如果是玩家执行的话就行:

  1. tellraw @s {"text": "1","hoverEvent": {"action": "show_text","value": {"nbt": "SelectedItem.tag","entity": "@s"}}}
复制代码

命令方块执行的话,就用execute改变执行者:

  1. execute as @p run tellraw @s {"text": "1","hoverEvent": {"action": "show_text","value": {"nbt": "SelectedItem.tag","entity": "@s"}}}
复制代码


Ph-苯
t1546542 发表于 2023-7-21 20:23
em
只能显示一段NBT数据
怎么做到像鼠标移上物品栏的物品之后显示的效果 ...

鼠标移动上物品栏是不会显示具体的NBT的,只会显示有多少个标签。

t1546542
Ph-苯 发表于 2023-7-23 13:10
鼠标移动上物品栏是不会显示具体的NBT的,只会显示有多少个标签。
我明白意思了,但是试了很多 ...

那怎么办
用数据包里面的东西可以吗

Ph-苯
t1546542 发表于 2023-7-23 18:28
那怎么办
用数据包里面的东西可以吗

什么意思?你是说你的物品是数据包里的固定的,可以穷举?

t1546542
Ph-苯 发表于 2023-7-23 19:23
什么意思?你是说你的物品是数据包里的固定的,可以穷举?

不是
就是用数据包可不可以实现这个功能

Ph-苯
t1546542 发表于 2023-7-24 01:35
不是
就是想问问用数据包可不可以实现这个功能

不可以。我上面说的不行是已经考虑了数据包的。原版都不行。

Ph-苯
23w31a快照新增了动态命令和宏,应该可以实现这个功能。

t1546542
Ph-苯 发表于 2023-8-3 08:35
23w31a快照新增了动态命令和宏,应该可以实现这个功能。

具体怎么写
谢谢大佬!!

1972310241
装高亮显示的mod就可以了

第一页 上一页 下一页 最后一页