Помогите Прочесть инвентарь из player.dat и превратить в Inventory

Статус
Закрыто для дальнейших ответов.

NukerFall

Активный участник
Пользователь
Баллы
76
В заголовке вроде всё понятно.
У меня есть файл и Инвентарь:
Код:
File inventoryFile = new File(getServer().getWorldContainer()
+ getConfig().getString("world-i-need") + File.separator
+ "playerdata", id.toString() + ".dat");
Inventory inv;
Нужно прочесть Inventory из .dat файла и заполнить inv. Осталось понять, как это сделать.
upload_2020-4-6_16-36-34.png
 
Ужасное объяснение того что нужно сделать, то нужно просто из файла сделать инвентарь если ответ выше тебя не устроил и я прав, то пиши сюда https://t.me/evg_onegin
 
В заголовке вроде всё понятно.
У меня есть файл и Инвентарь:
Код:
File inventoryFile = new File(getServer().getWorldContainer()
+ getConfig().getString("world-i-need") + File.separator
+ "playerdata", id.toString() + ".dat");
Inventory inv;
Нужно прочесть Inventory из .dat файла и заполнить inv. Осталось понять, как это сделать.
Посмотреть вложение 56201
Получаешь инвентарь игрока ну и далее заполняешь свой inv.
Код:
    private static CraftInventory getOfflineInventory(OfflinePlayer player) {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        NBTTagList nbt = (NBTTagList) data.get("Inventory");
        PlayerInventory virtual = new PlayerInventory(null);
        virtual.b(nbt);
        return new CraftInventory(virtual);
    }

Код:
    public static Inventory offlineInventory(OfflinePlayer player) {
        Inventory inventory = Bukkit.createInventory(null, InventoryType.PLAYER, "OfflineInventory");
        for(int i = 0; i < inventory.getSize(); i++){
            inventory.setItem(i, getOfflineInventory(player).getItem(i));
        }
        return inventory;
    }
Ну и сохраняешь уже измененный инвентарь при закрытии

Код:
    public static void saveInventoryContents(Inventory i, OfflinePlayer player) throws IOException {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        PlayerInventory inv = new PlayerInventory(null);
        CraftInventory craftInventory = new CraftInventory(inv);
        craftInventory.setContents(i.getContents());
        craftInventory.setItem(36, getOfflineArmorContents(player)[0]);
        craftInventory.setItem(37, getOfflineArmorContents(player)[1]);
        craftInventory.setItem(38, getOfflineArmorContents(player)[2]);
        craftInventory.setItem(39 ,getOfflineArmorContents(player)[3]);
        craftInventory.setItem(40, getOfflineInventoryContents(player).getItem(40));
        data.set("Inventory", inv.a(new NBTTagList()));
        try (FileOutputStream out = new FileOutputStream(new File(nbtManager.getPlayerDir(), player.getUniqueId() + ".dat"))) {
            NBTCompressedStreamTools.a(data, out);
        }
    }

Да и все в принципе
 
Получаешь инвентарь игрока ну и далее заполняешь свой inv.
Код:
    private static CraftInventory getOfflineInventory(OfflinePlayer player) {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        NBTTagList nbt = (NBTTagList) data.get("Inventory");
        PlayerInventory virtual = new PlayerInventory(null);
        virtual.b(nbt);
        return new CraftInventory(virtual);
    }

Код:
    public static Inventory offlineInventory(OfflinePlayer player) {
        Inventory inventory = Bukkit.createInventory(null, InventoryType.PLAYER, "OfflineInventory");
        for(int i = 0; i < inventory.getSize(); i++){
            inventory.setItem(i, getOfflineInventory(player).getItem(i));
        }
        return inventory;
    }
Ну и сохраняешь уже измененный инвентарь при закрытии

Код:
    public static void saveInventoryContents(Inventory i, OfflinePlayer player) throws IOException {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        PlayerInventory inv = new PlayerInventory(null);
        CraftInventory craftInventory = new CraftInventory(inv);
        craftInventory.setContents(i.getContents());
        craftInventory.setItem(36, getOfflineArmorContents(player)[0]);
        craftInventory.setItem(37, getOfflineArmorContents(player)[1]);
        craftInventory.setItem(38, getOfflineArmorContents(player)[2]);
        craftInventory.setItem(39 ,getOfflineArmorContents(player)[3]);
        craftInventory.setItem(40, getOfflineInventoryContents(player).getItem(40));
        data.set("Inventory", inv.a(new NBTTagList()));
        try (FileOutputStream out = new FileOutputStream(new File(nbtManager.getPlayerDir(), player.getUniqueId() + ".dat"))) {
            NBTCompressedStreamTools.a(data, out);
        }
    }

Да и все в принципе
Так ща пойму юзну как заработает скажу
 
Получаешь инвентарь игрока ну и далее заполняешь свой inv.
Код:
    private static CraftInventory getOfflineInventory(OfflinePlayer player) {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        NBTTagList nbt = (NBTTagList) data.get("Inventory");
        PlayerInventory virtual = new PlayerInventory(null);
        virtual.b(nbt);
        return new CraftInventory(virtual);
    }

Код:
    public static Inventory offlineInventory(OfflinePlayer player) {
        Inventory inventory = Bukkit.createInventory(null, InventoryType.PLAYER, "OfflineInventory");
        for(int i = 0; i < inventory.getSize(); i++){
            inventory.setItem(i, getOfflineInventory(player).getItem(i));
        }
        return inventory;
    }
Ну и сохраняешь уже измененный инвентарь при закрытии

Код:
    public static void saveInventoryContents(Inventory i, OfflinePlayer player) throws IOException {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        PlayerInventory inv = new PlayerInventory(null);
        CraftInventory craftInventory = new CraftInventory(inv);
        craftInventory.setContents(i.getContents());
        craftInventory.setItem(36, getOfflineArmorContents(player)[0]);
        craftInventory.setItem(37, getOfflineArmorContents(player)[1]);
        craftInventory.setItem(38, getOfflineArmorContents(player)[2]);
        craftInventory.setItem(39 ,getOfflineArmorContents(player)[3]);
        craftInventory.setItem(40, getOfflineInventoryContents(player).getItem(40));
        data.set("Inventory", inv.a(new NBTTagList()));
        try (FileOutputStream out = new FileOutputStream(new File(nbtManager.getPlayerDir(), player.getUniqueId() + ".dat"))) {
            NBTCompressedStreamTools.a(data, out);
        }
    }

Да и все в принципе
Откуда этот код, ибо в обычном 1.15.2 API нету getOfflineArmorContents и ServerNBTManager. Мб не все методы скопипащены и библиотеки не хватает какой-нибудь
 
Откуда этот код, ибо в обычном 1.15.2 API нету getOfflineArmorContents и ServerNBTManager. Мб не все методы скопипащены и библиотеки не хватает какой-нибудь
Код из моего плагина. Забыл сказать, что версия API - 1.12.2. getOfflineArmorContents - метод, с помощью которого я получаю броню игрока. ServerNBTManager видимо был заменен в 1.15.2 на что-то другое. Вот сам метод getOfflineArmorContents, который я забыл вставить:

Код:
    private static ItemStack[] getOfflineArmorContents(OfflinePlayer player) {
        ServerNBTManager nbtManager = (ServerNBTManager) MinecraftServer.getServer().getWorldServer(0).getDataManager();
        NBTTagCompound data = nbtManager.getPlayerData(player.getUniqueId().toString());
        NBTTagList nbt = (NBTTagList) data.get("Inventory");
        PlayerInventory virtual = new PlayerInventory(null);
        CraftInventoryPlayer craftInventoryPlayer = new CraftInventoryPlayer(virtual);
        virtual.b(nbt);
        return craftInventoryPlayer.getArmorContents();
    }
 
Код:
public void getInv(Player p) {
    File f = new File(plugin.getServer().getWorldContainer() + "/world/playerdata", p.getUniqueId().toString() + ".dat");
    try {
        NBTTagCompound nbt = NBTCompressedStreamTools.a(new FileInputStream(f));
        NBTTagList inv = (NBTTagList) nbt.get("Inventory");
        for (NBTBase tag : inv) {
            //doStuff();
        }
    } catch (IOException e) {}
}
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх