本帖最后由 凉菀彡 于 2022-2-3 12:55 编辑
我现在用getInventory的方法直接把仓库储存在配置文件中,但读取的时候就会报错,有什么解决办法或者更好的办法储存吗
你看看你set Inventory后的数据是什么。。Inventory 根本就没有实现序列化接口,所以你不能直接储存它到yaml中并读取。
你可以遍历这个库存的槽位,按槽位存储 ItemStack, 它是可序列化的
你可以遍历这个库存的槽位,按槽位存储 ItemStack, 它是可序列化的
/**
* 加载物品
* @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;
}
* 加载物品
* @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;
}