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

  • Автор темы Автор темы 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
 
Material - перечисляемый тип. Юзайте Material.getMaterial(String) или Material.valueOf(String) и, соответственно храните только имя.
 
UPD: Сериализатор bukkit как был дерьмом, так и остался.

Material - перечисляемый тип. Юзайте Material.getMaterial(String) или Material.valueOf(String) и, соответственно храните только имя.
Да, спасибо, уже сам понял.
 
Сериализатор баккита может сериализовывать только то что ConfigurationSerializable.
Всё остальное - это просто Yaml пытается сериализовать данные, но обратно не может.
 
Вопрос вроде решен, но все равно вставлю свои 5 копеек:
Из полученного за кучу времени опыта я пришел к трем вещам
1) Всю сериализацию / десериализацию кубача в YAML надо проводить руками
2) MaterialData намного более гибкий и удобный способ хранения материала чем просто Material
3) JSON куда лучше и удобнее подходит под сериализацию / конфиги чем YAML. Особенно ввиду gson.
Очень рекомендую. Даже сниппет свой дам
https://gist.github.com/MelonCode/acf9113225dd2f54474ab6b341824d29
Алсо материал дата сериализуется гсоном в вот такой вот приятный
V3ltcYc.png
 
Gson вообще либа богов, невероятное удобство.
Но конфиги, если править их руками, лучше в Yaml, а в Json какие-нибудь автосохраняемые данные.
 
Gson вообще либа богов, невероятное удобство.
Но конфиги, если править их руками, лучше в Yaml, а в Json какие-нибудь автосохраняемые данные.
Личное дело каждого. Мне например куда удобнее редактировать конфиги в JSON не обращая внимания на пробелы и прочую шелупонь.

А так - да, гсон прекрасен)
Алсо иногда очень приятно просто создать свой объект конфига со всеми данными и потом просто десериализировать его из какого-то settings.json
 
Назад
Верх