凉菀彡
本帖最后由 凉菀彡 于 2022-2-3 12:55 编辑

我现在用getInventory的方法直接把仓库储存在配置文件中,但读取的时候就会报错,有什么解决办法或者更好的办法储存吗

Rothes
你看看你set Inventory后的数据是什么。。Inventory 根本就没有实现序列化接口,所以你不能直接储存它到yaml中并读取。
你可以遍历这个库存的槽位,按槽位存储 ItemStack, 它是可序列化的

LwTs
/**
* 加载物品
* @return
*/
public int load(org.bukkit.inventory.Inventory inv){
    // 物品总数量计数
    int itemNumber = 0;
   
    // 得到数据位置
    File f = new File(this.getDataFolder(), "data.yml");
    org.bukkit.configuration.file.YamlConfiguration data
            = org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(f);
    for (int slot = 0; slot < 54; ++slot){
        if (data.contains(String.valueOf(slot))) {
            // 读取物品
            org.bukkit.inventory.ItemStack itemStack = data.getItemStack(String.valueOf(slot));
            // 将物品增加至Gui
            inv.setItem(slot, itemStack);
            itemNumber += itemStack.getAmount();
        }
    }
    return itemNumber;
}

/**
* 保存物品
* @param inv
* @return
* @throws IOException
*/
public int save(org.bukkit.inventory.Inventory inv) throws IOException {
    // 物品数量计数
    int itemNumber = 0;
    // 得到数据位置
    File f = new File(this.getDataFolder(), "data.yml");
    org.bukkit.configuration.file.YamlConfiguration data
            = org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(f);
    for (int slot = 0; slot < 54; ++slot){
        org.bukkit.inventory.ItemStack itemStack = inv.getItem(slot);
        if (itemStack != null) {
            // 储存物品
            data.set(String.valueOf(slot), itemStack.clone());
            data.save(f);
            itemNumber += itemStack.getAmount();
        }
    }
    return itemNumber;
}