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

Material сериализация

Тема в разделе "Разработка плагинов для новичков", создана пользователем Larin, 9 май 2016.

  1. Автор темы
    Larin

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

    Баллы:
    103
    Сериализую Material, к примеру Material.GOLD_BLOCK, получаю это:
    Код:
    mekeke: !!org.bukkit.Material 'GOLD_BLOCK'
    Десериализовать это уже не выйдет. Ошибка:
    Код:
    org.bukkit.configuration.InvalidConfigurationException: could not determine a constructor for the tag tag:yaml.org,2002:org.bukkit.Material
     in 'string', line 1, column 9:
        mekeke: !!org.bukkit.Material 'GOLD_BLOCK'
                ^
    
        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:56) ~[spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:184) ~[spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:130) ~[spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:179) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:188) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:163) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at rubukkit.spigot.plugins.test.Test.onEnable(Test.java:46) [Test.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:292) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.craftbukkit.v1_9_R1.CraftServer.loadPlugin(CraftServer.java:361) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at org.bukkit.craftbukkit.v1_9_R1.CraftServer.enablePlugins(CraftServer.java:321) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at net.minecraft.server.v1_9_R1.MinecraftServer.t(MinecraftServer.java:411) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at net.minecraft.server.v1_9_R1.MinecraftServer.l(MinecraftServer.java:376) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at net.minecraft.server.v1_9_R1.MinecraftServer.a(MinecraftServer.java:331) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at net.minecraft.server.v1_9_R1.DedicatedServer.init(DedicatedServer.java:269) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at net.minecraft.server.v1_9_R1.MinecraftServer.run(MinecraftServer.java:527) [spigot-1.9.2.jar:git-Spigot-944aa20-8d16fc0]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    Так и должно быть?
    @Dereku
    @Shevchik
    @ql_Nik_lp
    @Bars
     
  2. Хостинг MineCraft
    <
  3. fall.us

    fall.us Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Material - перечисляемый тип. Юзайте Material.getMaterial(String) или Material.valueOf(String) и, соответственно храните только имя.
     
  4. Автор темы
    Larin

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

    Баллы:
    103
    UPD: Сериализатор bukkit как был дерьмом, так и остался.

    Да, спасибо, уже сам понял.
     
  5. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Сериализатор баккита может сериализовывать только то что ConfigurationSerializable.
    Всё остальное - это просто Yaml пытается сериализовать данные, но обратно не может.
     
  6. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Вопрос вроде решен, но все равно вставлю свои 5 копеек:
    Из полученного за кучу времени опыта я пришел к трем вещам
    1) Всю сериализацию / десериализацию кубача в YAML надо проводить руками
    2) MaterialData намного более гибкий и удобный способ хранения материала чем просто Material
    3) JSON куда лучше и удобнее подходит под сериализацию / конфиги чем YAML. Особенно ввиду gson.
    Очень рекомендую. Даже сниппет свой дам
    https://gist.github.com/MelonCode/acf9113225dd2f54474ab6b341824d29[DOUBLEPOST=1462889787,1462889715][/DOUBLEPOST]Алсо материал дата сериализуется гсоном в вот такой вот приятный
    [​IMG]
     
  7. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Gson вообще либа богов, невероятное удобство.
    Но конфиги, если править их руками, лучше в Yaml, а в Json какие-нибудь автосохраняемые данные.
     
  8. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Личное дело каждого. Мне например куда удобнее редактировать конфиги в JSON не обращая внимания на пробелы и прочую шелупонь.

    А так - да, гсон прекрасен)[DOUBLEPOST=1462899790,1462899717][/DOUBLEPOST]Алсо иногда очень приятно просто создать свой объект конфига со всеми данными и потом просто десериализировать его из какого-то settings.json
     

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