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

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

Discussion in 'Разработка плагинов для новичков' started by Larin, May 9, 2016.

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

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

    Trophy Points:
    103
    Сериализую Material, к примеру Material.GOLD_BLOCK, получаю это:
    Code:
    mekeke: !!org.bukkit.Material 'GOLD_BLOCK'
    Десериализовать это уже не выйдет. Ошибка:
    Code:
    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 Активный участник Пользователь

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

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

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

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

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

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

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

    Trophy Points:
    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 Старожил Пользователь

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

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

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

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

Share This Page