我想做一个背包保存的插件
想问下
Inventory对象怎么存储到yml里
并且在重新读取成inventory对象
想问下
Inventory对象怎么存储到yml里
并且在重新读取成inventory对象
直接的办法是将Inventory对象以二进制的格式写出,然后以base64编码后保存,但是这样做可能会有问题。
正确的方法是,遍历Inventory( for(ItemStack s:inv)做到),将它们放在配置文件中合适的键下
ItemStack可以直接写入yml和读出(getItemStack)。
恢复时使用相同的方法,先清除/备份目标玩家的物品栏,然后通过getItemStack逐个读取保存的数据,再通过setItem写入
正确的方法是,遍历Inventory( for(ItemStack s:inv)做到),将它们放在配置文件中合适的键下
ItemStack可以直接写入yml和读出(getItemStack)。
恢复时使用相同的方法,先清除/备份目标玩家的物品栏,然后通过getItemStack逐个读取保存的数据,再通过setItem写入
有用NBTAPI
复制代码
-     /**
 
-      * null if error
 
-      * @param contents Itemstack[]
 
-      * [url=home.php?mod=space&uid=491268]@Return[/url] Base64 code of Itemstack[]
 
-      */
 
-     @Nullable
 
-     public static String toBase64(ItemStack[] contents) {
 
-         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 
-         DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
 
-         try {
 
-             dataOutputStream.writeInt(contents.length);
 
-             for (ItemStack content : contents) {
 
-                 NBTContainer nbtItem = NBTItem.convertItemtoNBT(content);
 
-                 dataOutputStream.write(nbtItem.toString().getBytes());
 
-             }
 
-             dataOutputStream.close();
 
-             return Base64Coder.encodeLines(outputStream.toByteArray());
 
-         } catch (IOException e) {
 
-             e.printStackTrace();
 
-         }
 
-         return null;
 
-     }
 
 
 
-     /**
 
-      * null if nothing or error
 
-      * @param data
 
-      * @return ItemStack[] from Base64 code
 
-      */
 
-     @Nullable
 
-     private static ItemStack[] stacksFromBase64(String data) {
 
-         ByteArrayInputStream inputStream = new ByteArrayInputStream(Base64Coder.decodeLines(data));
 
-         DataInputStream dataInputStream = new DataInputStream(inputStream);
 
-         ItemStack[] items;
 
-         try {
 
-             items = new ItemStack[dataInputStream.readInt()];
 
-             BufferedReader d  = new BufferedReader(new InputStreamReader(dataInputStream));
 
-             for (int i = 0; i < items.length; i++) {
 
-                 NBTContainer cont = new NBTContainer(d.readLine());
 
-                 items[i] = NBTItem.convertNBTtoItem(cont);
 
-             }
 
-             dataInputStream.close();
 
-             return items;
 
-         } catch (IOException e) {
 
-             e.printStackTrace();
 
-         }
 
-         return null;
 
- }
感谢大佬谢谢谢谢谢谢谢谢谢感谢