Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Решено]Сохранение инвентаря в конфиг

Тема в разделе "Разработка плагинов для новичков", создана пользователем VLnet, 17 авг 2015.

Статус темы:
Закрыта.
  1. Автор темы
    VLnet

    VLnet Участник Пользователь

    Баллы:
    36
    Skype:
    The_Vladimir_UA
    Всем привет, возникла такая проблема: если сохранять текущий инвентарь игрока в конфиг при помощи:
    Код:
                        int index = Integer.parseInt(args[0]);  
                        Inventory inv = Bukkit.getPlayer(sender.getName()).getInventory();
                        config.set("clans.battle.armorList." + index, inv);
    и потом перезапустить сервер, то в консоли вылазит дофига ошибок, а весь конфиг удаляется.
    Собственно как решить? Или посоветуйте другой способ сохранить вещи в конфиг.
    Код:
    [21:18:09] [Server thread/ERROR]: Cannot load plugins\VLmoney\config.yml
    org.bukkit.configuration.InvalidConfigurationException: could not determine a constructor for the tag tag:yaml.org,2002:org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryPlayer
    in 'string', line 4, column 12:
              '0': !!org.bukkit.craftbukkit.v1_8_R1 ...
                   ^
    
        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:57) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:226) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:169) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:180) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:188) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:162) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at ua.rivne.vlnet.mainPluginTeaCraft.mainClass.onEnable(mainClass.java:42) [VLmoney.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:335) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.loadPlugin(CraftServer.java:356) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.enablePlugins(CraftServer.java:316) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.reload(CraftServer.java:746) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.Bukkit.reload(Bukkit.java:534) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServer.java:646) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerConnection.java:1115) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:950) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:26) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:53) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.7.0_79]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_79]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:696) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:634) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:537) [mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at java.lang.Thread.run(Unknown Source) [?:1.7.0_79]
    Caused by: org.yaml.snakeyaml.constructor.ConstructorException: could not determine a constructor for the tag tag:yaml.org,2002:org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryPlayer
    in 'string', line 4, column 12:
              '0': !!org.bukkit.craftbukkit.v1_8_R1 ...
                   ^
    
        at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructUndefined.construct(SafeConstructor.java:501) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:147) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:354) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:485) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:26) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:147) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:354) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:485) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:26) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:147) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:354) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:485) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:26) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:373) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:147) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:354) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:485) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.YamlConstructor$ConstructCustomObject.construct(YamlConstructor.java:26) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:182) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:141) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:127) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:481) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:400) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55) ~[mcoffline_server.jar:git-Spigot-c3c767f-33d5de3]
        ... 28 more
    

    PS: сохранение происходит с-под команды
     
  2. Хостинг MineCraft
    <
  3. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Стоп, как ты строку суммируешь с интежером?
     
  4. Автор темы
    VLnet

    VLnet Участник Пользователь

    Баллы:
    36
    Skype:
    The_Vladimir_UA
    Строки же нормально суммируются (в config.get\set) вот и подумал так :rolleyes: , но строка явно лишняя, можно ведь:
    Код:
                        Inventory inv = Bukkit.getPlayer(sender.getName()).getInventory();
                        config.set("clans.battle.armorList." + args[0], inv);
    [DOUBLEPOST=1439839362,1439838934][/DOUBLEPOST]мм кстати, код который после первого рестарта появляется в конфиге(после второго конфиг чистится):
    Код:
    clans:
      battle:
        armorList:
          '0': !!org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryPlayer
            armorContents:
            - ==: org.bukkit.inventory.ItemStack
              type: AIR
              damage: -1
              amount: 0
            - ==: org.bukkit.inventory.ItemStack
              type: LEATHER_LEGGINGS
            - ==: org.bukkit.inventory.ItemStack
              type: AIR
              damage: -1
              amount: 0
            - ==: org.bukkit.inventory.ItemStack
              type: AIR
              damage: -1
              amount: 0
            boots: null
            bootsDropChance: 1.0
            chestplate: null
            chestplateDropChance: 1.0
            contents:
            - ==: org.bukkit.inventory.ItemStack
              type: WOOD_SWORD
            - null
            - ==: org.bukkit.inventory.ItemStack
              type: LEATHER_LEGGINGS
            - null
            - null
            - null
            - null
            - null
            - ==: org.bukkit.inventory.ItemStack
              type: GRILLED_PORK
              amount: 64
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            - null
            heldItemSlot: 2
            helmet: null
            helmetDropChance: 1.0
            itemInHand:
              ==: org.bukkit.inventory.ItemStack
              type: LEATHER_LEGGINGS
            itemInHandDropChance: 1.0
            leggings:
              ==: org.bukkit.inventory.ItemStack
              type: LEATHER_LEGGINGS
            leggingsDropChance: 1.0
            maxStackSize: 64
    
    [DOUBLEPOST=1439887862][/DOUBLEPOST]ап
     
    Последнее редактирование: 17 авг 2015
  5. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Инвентарь нельзя десериализовать. А вот ItemStack можно.
    Вместо того чтобы в конфиг пихать объект инвентаря, пройдись по каждому слоту и извлеки предмет и положи его в конфиг. Чтобы получить итемстак из конфига, есть метод getItemStack
     
  6. Автор темы
    VLnet

    VLnet Участник Пользователь

    Баллы:
    36
    Skype:
    The_Vladimir_UA
    окей, я так понимаю, for(int x = 0, x<36, x++) пойдет?
     
  7. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Да, подойдёт, но 36 это как то некошерно, лучше уж inv.size(), вдруг в будущем инвентарь будет больше или меньше :D
     
  8. Автор темы
    VLnet

    VLnet Участник Пользователь

    Баллы:
    36
    Skype:
    The_Vladimir_UA
    :D
    А для брони 37,38,39,40 чтоли? или inv.size захватит? (нахожусь не дома, а потому не могу проверить:confused:)[DOUBLEPOST=1439894944,1439893643][/DOUBLEPOST]Посидел в гугле, и нашёл довольно полезную картинку :cool:
    [​IMG]
    Приеду домой, закрою тему :)
     
  9. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Тут ситуация неоднозначная.
    Если речь идет именно о BukkitAPI, то броня хранится в отдельном массиве - inventory.getArmorContents()
    Давать сериализацию предметов на самотек - не рекомендую ибо выглядит оно очень так себе..
    Я всегда пишу какой-то адаптер / враппер или же просто пару методов

    Вот такую лабуду использую в последнем проекте
    http://pastebin.com/YPfNejX0

    Может пригодится...[DOUBLEPOST=1439917945,1439917645][/DOUBLEPOST]З.Ы.

    [​IMG]

    На выходе получается что-то типа такого:
    [​IMG]

    Из минусов - не работает с NBT тегами и флагами (Не было необходимости)
    Но допилить особо трудно не будет.
     
  10. Автор темы
    VLnet

    VLnet Участник Пользователь

    Баллы:
    36
    Skype:
    The_Vladimir_UA
    Cпасибо за совёт! Об армор контенс я сам только что допёр:), а на счёт доп кода - нада будет посидеть, посмотреть...
     
Статус темы:
Закрыта.

Поделиться этой страницей