qerw
我想做一个背包保存的插件
想问下
Inventory对象怎么存储到yml里
并且在重新读取成inventory对象

ARSpark
直接的办法是将Inventory对象以二进制的格式写出,然后以base64编码后保存,但是这样做可能会有问题。

正确的方法是,遍历Inventory( for(ItemStack s:inv)做到),将它们放在配置文件中合适的键下
ItemStack可以直接写入yml和读出(getItemStack)。

恢复时使用相同的方法,先清除/备份目标玩家的物品栏,然后通过getItemStack逐个读取保存的数据,再通过setItem写入

Hanssc
有用NBTAPI
  1.     /**
  2.      * null if error
  3.      * @param contents Itemstack[]
  4.      * [url=home.php?mod=space&uid=491268]@Return[/url] Base64 code of Itemstack[]
  5.      */
  6.     @Nullable
  7.     public static String toBase64(ItemStack[] contents) {
  8.         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  9.         DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
  10.         try {
  11.             dataOutputStream.writeInt(contents.length);
  12.             for (ItemStack content : contents) {
  13.                 NBTContainer nbtItem = NBTItem.convertItemtoNBT(content);
  14.                 dataOutputStream.write(nbtItem.toString().getBytes());
  15.             }
  16.             dataOutputStream.close();
  17.             return Base64Coder.encodeLines(outputStream.toByteArray());
  18.         } catch (IOException e) {
  19.             e.printStackTrace();
  20.         }
  21.         return null;
  22.     }


  23.     /**
  24.      * null if nothing or error
  25.      * @param data
  26.      * @return ItemStack[] from Base64 code
  27.      */
  28.     @Nullable
  29.     private static ItemStack[] stacksFromBase64(String data) {
  30.         ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
  31.         DataInputStream dataInputStream = new DataInputStream(inputStream);
  32.         ItemStack[] items;
  33.         try {
  34.             items = new ItemStack[dataInputStream.readInt()];
  35.             BufferedReader d  = new BufferedReader(new InputStreamReader(dataInputStream));
  36.             for (int i = 0; i < items.length; i++) {
  37.                 NBTContainer cont = new NBTContainer(d.readLine());
  38.                 items[i] = NBTItem.convertNBTtoItem(cont);
  39.             }
  40.             dataInputStream.close();
  41.             return items;
  42.         } catch (IOException e) {
  43.             e.printStackTrace();
  44.         }
  45.         return null;
  46.     }
复制代码

卡卡卡啊啊
感谢大佬谢谢谢谢谢谢谢谢谢感谢