Minecraft(我的世界)中文论坛
标题:
【CBL|SPG】[1.15+] JSON 文本中的 interpret
[打印本页]
作者:
SPGoding
时间:
2019-10-21 00:36
标题:
【CBL|SPG】[1.15+] JSON 文本中的 interpret
起
JSON 文本中有一个属性叫做
interpret
,翻译一下可以知道它的意思是「解析」。该属性必须和
nbt
同时使用,否则没有效果。
简单来讲,当
interpret
被设置为
true
时,实际显示出来的文本会是原先文本被按照 JSON 文本的格式解析后的文本。
举个例子吧。我们往 data storage 里先写这么一个标签:
/data merge storage test {spg: '["测试", "啊啊"]'}
复制代码
然后写这样的一个 JSON 文本:
{"nbt": "spg", "storage": "test"}
复制代码
把它放到
tellraw
或者什么地方里,稍有常识的人都可以预测出它的结果:
["测试", "啊啊"]
复制代码
那么,如果在 JSON 文本中加上
interpret
:
{"nbt": "spg", "storage": "test", "interpret": true}
复制代码
结果变为了:
测试啊啊
复制代码
可以看出,原先的
["测试", "啊啊"]
被按照 JSON 文本的格式解析为了
测试啊啊
。
承
这个特性确实有用武之地。例如:
/execute as @a run tellraw @s {"nbt": "SelectedItem.tag.display.Name", "entity": "@s", "interpret": true}
复制代码
这条命令就可以在聊天栏输出玩家手中握着的武器的自定义名称了(如果有的话)
转
没错,没什么用。
合
然而,并不只有 NBT 字符串里能储存像 JSON 文本一样的东西。
我们往 data storage 里再写这么一个标签:
/data merge storage test {spg: ["测试", "啊啊"]}
复制代码
如果你没发现的话,这条命令的
spg
和刚才唯一的区别是删掉了最外层的单引号,使它从一个字符串标签变为了一个装有字符串的列表。
然后写这样的一个 JSON 文本:
{"nbt": "spg", "storage": "test"}
复制代码
它的结果和刚刚一模一样:
["测试", "啊啊"]
复制代码
聪明的人已经能够想到,如果加上
interpret
的话:
{"nbt": "spg", "storage": "test", "interpret": true}
复制代码
结果仍然是:
测试啊啊
复制代码
哇!
这成功实现了将多个字符串拼接到一起。事实上,不止字符串能够被拼接,NBT 中的 Int 标签也能够被视作为合法的 JSON 格式。因此,我们还可以将由 Int 标签组成的列表标签拼接为一个字符串,这在原版模组
大数运算
中有所体现。
相信你已经发现了,这一技巧仍然没有什么用处。
TAG_End
[groupid=546]Command Block Logic[/groupid]
作者:
雪颜の顾
时间:
2019-10-21 01:43
沙发QWQ
就是说原来输出SelectedItem.tag.display.Name这个NBT,是完整的把json文本输出出来了,如果加上interpret之后,就只会输出它的名字?
没用过json文本中的nbt
作者:
rygtx
时间:
2019-10-21 03:49
66666666666666666666
作者:
不负韶华
时间:
2019-10-21 05:40
现在还没有1.15正式版,现在发是不是为时过早?
作者:
Jokey_钥匙
时间:
2019-10-21 06:26
十分有用 比方说你要输出一堆动态文本时 可以不用反向空格了(
(然而如果能够读取json为list……)
作者:
ruhuasiyu
时间:
2019-10-21 08:27
讲一讲告示牌技巧
作者:
liach
时间:
2019-10-21 10:22
Mojang真应该在指令中添加内置nbt转json,这样如果能用data指令改text大家不还笑死
真心这就一行代码解决的事情(因为有datafixerupper)
new Dynamic<>(NbtOps.INSTANCE, input).convert(JsonOps.INSTANCE).getValue()
复制代码
作者:
凌空的猫
时间:
2019-10-21 20:19
应该可以组织一些简单的句子吧,比如搞出个 “狂暴的喵刀”[tr乱入],还可以做一些简单的字符编辑
作者:
chyx
时间:
2019-11-28 13:32
如果["测试", "啊啊"]里的两个字符串里有双引号的话,就不行了。。。
除非这个字符串里的第一个引号是单的。。。
似乎是因为如果里面的第一个引号是双引号的话,这个字符串在显示的时候会用单引号包裹,which 不被json认。。。。。
欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/)
Powered by Discuz! X3.5