结冰的离季
我想将物品序列化为bukkit的ConfigurationSection,并使nbt可读,bukkit自带的,会带有一些不必要的信息"==: xxx",lore 和 name 都是json格式而且一些nbt不可读

我试过 XItemStack 但是它对nbt和自定义附魔都无法序列化,
NBTEditor NBTAPI 我也试过,但是只能序列化为json
有没有比较轻量的库可以用,或者把json转为ConfigurationSection的方法


晚安灬z
1234567890

小默米
本帖最后由 小默米 于 2022-8-28 16:04 编辑

我用的NBT API + 递归
https://github.com/tr7zw/Item-NBT-API

写的比较粗糙,如果可以改善的话希望能push一点代码
https://github.com/Xiao-MoMi/Cus ... /utils/NBTUtil.java
https://github.com/Xiao-MoMi/Cus ... utils/ItemUtil.java

效果是这样的序列化前后






美味的曲奇
https://www.mcbbs.net/thread-1341360-1-1.html 拿出NBT
然后再NBT映射到Yaml
如果是不需要用户编辑的话把NBT当字符串存yaml也可以

结冰的离季
本帖最后由 结冰的离季 于 2022-8-28 15:55 编辑
美味的曲奇 发表于 2022-8-28 15:50
https://www.mcbbs.net/thread-1341360-1-1.html 拿出NBT
然后再NBT映射到Yaml
如果是不需要用户编辑的话把 ...
我的目标就是要方便用户编辑,只是把nbt转到yaml的话可读性也是很差



结冰的离季
小默米 发表于 2022-8-28 15:47
我用的NBT API + 递归
https://github.com/tr7zw/Item-NBT-API

果然还是得自己把需要的数据提取出来么,这样跨版本的兼容性会不会不好,可能在低版本没有这种api
比如getCustomModelData这类

小默米
本帖最后由 小默米 于 2022-8-28 16:01 编辑
结冰的离季 发表于 2022-8-28 15:59
果然还是得自己把需要的数据提取出来么,这样跨版本的兼容性会不会不好,可能在低版本没有这种api
比如ge ...

我这个是给高版本设计的,可以不单独提取custommodeldata那些高版本独有的属性,NBTAPI全版本都兼容我是为了方便用户配置文件,所以单独提取了某些nbt

美味的曲奇
结冰的离季 发表于 2022-8-28 15:53
我的目标就是要方便用户编辑,只是把nbt转到yaml的话可读性也是很差

可读性已经不错了,物品复杂NBT结构必定复杂
如果想再好的话就需要分离 count id 这类常用NBT和其他额外NBT
但大片额外NBT依然会非常抢眼,如果要压缩...
...就接近bukkit自带的序列化了

结冰的离季
小默米 发表于 2022-8-28 16:00
我这个是给高版本设计的,可以不单独提取custommodeldata那些高版本独有的属性,NBTAPI全版本都兼容 ...

办法还是有的,try catch掉就可以了

结冰的离季
美味的曲奇 发表于 2022-8-28 16:00
可读性已经不错了,物品复杂NBT结构必定复杂
如果想再好的话就需要分离 count id 这类常用NBT和其他额外N ...

为了可读性我还是得把常用的提取出来吧

Neige
本帖最后由 Neige 于 2022-8-28 23:38 编辑

我是把常用的提取出来,然后把剩下的归到一坨。
比如lore,cmd,损伤值,名字之类的。
然后nbt的类型也要注意。
那堆数字类型,什么byte,int,long之类的,丢进yaml里实际上就被吞掉了,所以我在前面加个前缀。
然后intarray和bytearray也要注意,不然就会变成list
其实,如果不在意性能的话,你可以试试直接用bukkit的序列化方法,然后把里面的internal单独拎出来解码替换。这样相对于原先的一串base64码,可读性已经算是有了长足的进步了,然后实际操作上也较为方便,因为存internal的那种方式从上古版本开始就没有变过,所以不存在版本兼容问题,也不需要依赖什么前置插件。
https://www.mcbbs.net/thread-1372020-1-1.html