丶米饭
本帖最后由 丶米饭 于 2021-7-29 16:20 编辑

很多人并不懂如何正确序列化ItemStack 我个人愚见, 做过最完美的尝试  看下面
很简单的的俩个方法,保存这个string。到你想要的mysql,sqlite,yml。。。里就行了,反正就个字符串随便玩
建议学习了的,把学习了三个字打在公屏上

  1. /**
  2.      * 序列化itemStack为String
  3.      *
  4.      * @param itemStack 物品
  5.      * @Return String
  6.      */
  7.     public static String itemStackSerialize(ItemStack itemStack) {
  8.         YamlConfiguration yml = new YamlConfiguration();
  9.         yml.set("item", itemStack);
  10.         return yml.saveToString();
  11.     }

  12.     /**
  13.      * 反序列化String为itemStack
  14.      *
  15.      * @param str 物品str
  16.      * @return ItemStack
  17.      */
  18.     public static ItemStack itemStackDeserialize(String str) {
  19.         YamlConfiguration yml = new YamlConfiguration();
  20.         ItemStack item;
  21.         try {
  22.             yml.loadFromString(str);
  23.             item = yml.getItemStack("item");
  24.         } catch (InvalidConfigurationException ex) {
  25.             item = new ItemStack(Material.AIR, 1);
  26.         }
  27.         return item;
  28.     }
复制代码








来自群组: Server CT

结冰的离季
注:此方法无法保存物品nbt

Rothes
纯萌新,我想,使用ItemStack#serialize,然后使用Gson转为json来保存也可以

byxiaobai
https://www.mcbbs.net/thread-1213792-1-2.html
一、基础问题 II.拓展功能   6.如何序列化/反序列化ItemStack?

肥洋洋
什么几把gson,直接base64

丶米饭
本帖最后由 丶米饭 于 2021-7-29 09:57 编辑
结冰的离季 发表于 2021-7-28 20:33
注:此方法无法保存物品nbt

目前使用过base64保存 mm自定义装备, 但是base64会导致nbt顺序错乱,然后物品无法正常叠加
转而使用现在的可以完美保存目前遇到的各种插件mm等自定义物品而能正常叠加
因为不研究mod,所以暂不知对mod的兼容性

丶米饭
Rothes 发表于 2021-7-28 20:36
纯萌新,我想,使用ItemStack#serialize,然后使用Gson转为json来保存也可以

直接保存字符串就行了,你在多转一次json干嘛

丶米饭
byxiaobai 发表于 2021-7-28 21:50
https://www.mcbbs.net/thread-1213792-1-2.html
一、基础问题 II.拓展功能   6.如何序列化/反序列化ItemSt ...

base64会导致nbt乱序,导致不能识别为同一物品,影响物品叠加

洞穴夜莺
丶米饭 发表于 2021-7-29 09:53
base64会导致nbt乱序,导致不能识别为同一物品,影响物品叠加

nbt底层用的是HashMap
是没有顺序的

yzh___
好哇,好哇,真好哇

丶米饭
洞穴夜莺 发表于 2021-7-29 12:40
nbt底层用的是HashMap
是没有顺序的

所以才这样转string不会乱,转回去跟转之前顺序一致

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