我正在研究一种在MySQL数据库中保存ItemStacks的方法。序列化和保存工作正常,但如果我反序列化它,我只会得到没有ItemMeta的项目(例如,项目在反序列化后没有被魔法化)。
有没有人知道如何正确地反序列化它?我在网上找到了很多关于这个的东西,但是所有的东西都过时了,不能在1.16.4中工作。
我的功能:
private static String itemStackToString(ItemStack item) {
Gson gson = new Gson();
return gson.toJson(item.serialize());
}
private static ItemStack stringToItemStack(String str) {
Gson gson = new Gson();
Map<String, Object> map = gson.fromJson(str, new TypeToken<Map<String, Object>(){}.getType());
return ItemStack.deserialize(map);
}
1条答案
按热度按时间ux6nzvsh1#
这个问题很可能是
ItemStack.deserialize
预期"meta"
是ItemMeta
的执行严修。但是,因为您要告诉Gson将数据还原序列化为Map<String, Object>
,所以它不知道这项需求,而是将"meta"
属性值还原序列化为Map
。您可以通过编写一个处理此问题的自定义Gson
TypeAdapter
来解决此问题,但它可能仍然相当脆弱。也许您可以以某种方式使用
ConfigurationSection
进行序列化,如这里所示,但我不知道它的工作效果如何,也不知道它是否是正确的(和安全的)解决方案。