美味的曲奇
参考 https://www.spigotmc.org/threads ... 42387/#post-4036567 此实现
我做出了这个类
[ItemSerializer]https://pastebin.com/k1AiTVqu
[Reflex]https://pastebin.com/e3324Te1
测试环境 1.18.1 paper
他在序列化的时候工作的很好,但是在反序列化解析NBT时时不断的有各种问题
包括不限于找不到方法,返回值不返回 NBTTagCompound 而返回 String(?)
有什么办法能够高效简单的完美序列化物品,完整保留所有NBT数据
* 能不用NMS更好

Neige
本帖最后由 Neige 于 2022-5-13 09:54 编辑

bukkit保存把物品保存进yaml的时候就是无损保存
以及,你发的链接里的那个方法我试了一下,好像没问题()

美味的曲奇
Neige 发表于 2022-5-13 09:45
bukkit保存把物品保存进yaml的时候就是无损保存
以及,你发的链接里的那个方法我试了一下,好像没问题() ...

我记得保存到yaml会丢失未知NBT,而且我想把它序列化成json
你测试的是我剪贴板里的那个吗,好像1.16.5+NMS变了些东西...导致不能用了

Neige
本帖最后由 Neige 于 2022-5-13 10:30 编辑
美味的曲奇 发表于 2022-5-13 10:07
我记得保存到yaml会丢失未知NBT,而且我想把它序列化成json
你测试的是我剪贴板里的那个吗,好像1.16.5+N ...

不会丢失。。。我一直无法理解为什么有人说这个方法无法保存未知NBT。
所有未知NBT都被一层gzip加密一层base64加密以后变成了一段String,存入了ItemMeta中的internal字段。
试一试就知道了,这样序列化反序列化确实是无损的。

我是在1.16.5试的()如果1.16.5+有问题的话那可能真的有问题()

你说的“想序列化成json”说的是想序列化成那种完全可读的json吗?所有未知nbt都能看出来的那种

美味的曲奇
Neige 发表于 2022-5-13 10:28
不会丢失。。。我一直无法理解为什么有人说这个方法无法保存未知NBT。
所有未知NBT都被一层gzip加密一层ba ...

我希望完全序列化为一个json对象 就是现在这个实现所序列化出来的效果
因为这样可读性最高,可以镶套在JSON中可以以独立为*.json,而且理论兼容模组物品

_zZ白熊Zz_
美味的曲奇 发表于 2022-5-13 11:59
我希望完全序列化为一个json对象 就是现在这个实现所序列化出来的效果
因为这样可读性最高,可以镶套在JS ...

要"兼容"的话,那你大概得自己做一个。

此外我推荐 ProtocolLib 的 StreamSerializer

美味的曲奇
_zZ白熊Zz_ 发表于 2022-5-13 12:04
要"兼容"的话,那你大概得自己做一个。

此外我推荐 ProtocolLib 的 StreamSerializer ...

我知道有很多外部库,但是不想挂太多依赖
如果这个继续裂开的话我大概真得去自己实现

_zZ白熊Zz_
美味的曲奇 发表于 2022-5-13 12:18
我知道有很多外部库,但是不想挂太多依赖
如果这个继续裂开的话我大概真得去自己实现 ...

其实 ProtocolLib 已经普及到可以当作和 Bukkit 共生的程度了(

美味的曲奇
_zZ白熊Zz_ 发表于 2022-5-13 12:51
其实 ProtocolLib 已经普及到可以当作和 Bukkit 共生的程度了(

但ProtocolLib 是GPL协议的,有些时候会不太方便

下一页 最后一页