1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Работа с yaml

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    zemf4you
    Интересует бест практис у плагиноделов. Вы используете org.bukkit.configuration.file.YamlConfiguration или какую-нибудь стороннюю библиотеку для удобной работы?
    Столкнулся с желанием создать конструкцию вида Map<String, Map<String, Any>>. Можете привести пример, как с помощью стандартного Api таковую конструкцию достать из файла конфигурации? Я так полагаю, нужно работать с ConfigurationSection. Буду благодарен любой стоящей документации.
     
  2. alexandrage

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

    Баллы:
    173
    Да под капотом Map<String, Object> кастуй во что нужно тебе и все.
     
  3. Автор темы
    Zemf4you

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

    Баллы:
    76
    Имя в Minecraft:
    zemf4you
    А за такое в приличном обществе по рукам не бьют?
    и что именно кастовать?
    Есть у меня, например, конфиг вида
    Код:
    test:
      test1:
        val1: Any
        val2: Any
      test2:
        val1: Any
        val2: Any
    
    и я должен кастануть
    Код:
    config.get("test")
    
    верно, полагаю?
    Насколько я вижу, YamlConfiguration не имеет метода getMap. Как я могу кастовать мап, если мне его ещё получить надо?
     
    Последнее редактирование: 4 мар 2021
  4. dimkaS

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

    Баллы:
    76
    Имя в Minecraft:
    dimkaS
    getConfigurationSection('test').getKeys(false)
    >> test1
    >> test2
     
  5. alexandrage

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

    Баллы:
    173
    Ну ConfigurationSection и есть твоя мапа, кастуй ее к своему типу и все. И получишь свой Map<String, Map<String, String>> = config.get("test")
     
    Последнее редактирование: 4 мар 2021
  6. Автор темы
    Zemf4you

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

    Баллы:
    76
    Имя в Minecraft:
    zemf4you
    получаю закономерное
    Код:
    java.lang.ClassCastException: org.bukkit.configuration.MemorySection cannot be cast to java.base/java.util.Map
    
     
  7. Cororo

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

    Баллы:
    76
    Имя в Minecraft:
    TheSirCororo
    Использую HOCON в связке с kotlin-либой для него. Разница в том, что он имеет JSON/.conf формат
     
  8. Автор темы
    Zemf4you

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

    Баллы:
    76
    Имя в Minecraft:
    zemf4you
    Выглядит интересно, обязательно попробую, спасибо. А что насчёт нативного способа?
     
  9. Cororo

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

    Баллы:
    76
    Имя в Minecraft:
    TheSirCororo
    Сейчас гляну свой проект и скажу
     
  10. Cororo

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

    Баллы:
    76
    Имя в Minecraft:
    TheSirCororo
    Использую config.getConfigurationSection("test1").getValues(false). Он вернёт мапу вида
    { "val1":"Any", "val2":"Any" }
     
  11. Cororo

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

    Баллы:
    76
    Имя в Minecraft:
    TheSirCororo
    Так же попробуй вот эту штуку upload_2021-3-4_21-3-48.png
     
  12. Автор темы
    Zemf4you

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

    Баллы:
    76
    Имя в Minecraft:
    zemf4you
    Большое спасибо, всё работает
    UPD: написал вот такой рекурсионный костыль на kotlin, потому что getValues возвращал в качестве значений MemorySection, а не мапы в свою очередь, где это нужно было[​IMG]
    [​IMG]
     
    Последнее редактирование: 4 мар 2021
Статус темы:
Закрыта.

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