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

Файл Config.yml и комментарии

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

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

    ms2008 Активный участник

    Баллы:
    61
    Здравствуйте. Есть такой файл конфигурации:
    Код:
    # Тестовая числовая переменная 1
    testIntVar1: 10
    
    # Тестовая строковая переменная 1
    testStringVar1: 'Test1'
    
    # Тестовая числовая переменная 2
    testIntVar2: 20
    
    # Тестовая строковая переменная 2
    testStringVar2: 'Test2
    
    Cчитываю значения в переменные:
    Код:
    static FileConfiguration config;
    static int test_int1; static int test_int2;
    static String test_string1; static String test_string2;
    
    config = this.getConfig();
    test_int1 = this.getConfig().getInt("testIntVar1");
    test_int2 = this.getConfig().getInt("testIntVar2");
    test_string1 = this.getConfig().getInt("testStringVar1");
    test_string2 = this.getConfig().getInt("testStringVar2");
    
    Далее меняю какой-либо параметр, и сохраняю конфиг, например:
    Код:
    test_int1 = 15; config.set("testIntVar1", (Object)15);
    test_string2 = "Test25"; config.set("testStringVar2", (Object)"Test25");
    this.saveConfig();
    
    В результате файл конфига перезаписывается, и все комментарии естественно удаляются. Получается так:
    Код:
    testIntVar1: 15
    testStringVar1: Test1
    testIntVar2: 20
    testStringVar2: Test25
    
    Возможно ли изменять файл конфига таким образом, чтоб не "слетали" комментарии? Чтоб перезаписывались только отдельные строки файла, а не весь файл?
     
  2. Хостинг MineCraft
    <
  3. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    SnakeYAML игнорирует все комментарии в файлах. Пишите свой парсер.
     
  4. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Если лень писать парсер - выводите используемые вами переменные в отдельный .yml файл.
     
  5. Автор темы
    ms2008

    ms2008 Активный участник

    Баллы:
    61
    Возможно Вы правы, из-за 10 переменных писать парсер не хочется. Думал, что SnakeYAML может работать с комментариями. Проще написать отдельный help-файл. Спасибо всем за советы.
     
  6. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Конфиг - 1 файл
    Данные - второй файл
    Вот и решение
    this.saveConfig(); - zlo
     
  7. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Я чего-то не знаю? Обьясни почему это зло)
    И как будешь обьяснять, напиши как правильно :)
     
  8. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Я, у себя в плагинах предпочитаю использовать config.yml исключительно для чтения, но не для записи
    Как минимум по причинам из за которых была создана эта тема.

    Данные же лучше хранить в отдельном файле или вообще БД.
     
  9. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    А в JSON файлах возможно можно перезаписывать какие-либо переменные?

    P.S сам использую конфиги только для чтения :)
    Для записи либо отдельный yml файл, либо база данных)
     
  10. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Yaml для меня идеально подходит для конфигурирования настроек. В теле плагина в конфиге по умолчанию расставляю комментарии, на страницах с описаниями плагина даю ссылки на этот файл сразу на GitHub-е. Получается, что существует только одно место для документации настроек плагина, до которого всегда легко добраться.
    Json — для таких данных, которых многовато и они скорее всего никогда не будут редактироваться руками.
    MySQL — когда данные длительны во времени, их очень много или они нужны на нескольких серверах сразу.
     
  11. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    В теории да, но зачем?
    Обычно все придерживаются стиля файл-объект и куда проще просто обновить поле в памяти а затем сериализировать по новой.[DOUBLEPOST=1463143989,1463143958][/DOUBLEPOST]
    JSON намного приятнее в редактировании чем YAML. Просто не нотпадом
     
  12. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Меня в душе бесит невозможность поставить trailing commas.
     
  13. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    MongoDB — когда данные длительны во времени, структура свобода к изменениям, вы хотите иметь возможность вообще никогда не трогать бд руками, не задумываться о структуризации таблиц, они нужны на нескольких серверах сразу и если вы хотите иметь возможность удобно работать с данными используя мощнейший JS вместо SQL
     
  14. CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Весьма исчерпывающе. Спасибо.
     
  15. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Закидываешь готовый config.yml в jar плагина, в onEnable - this.saveDefaultConfig() . Профит.
    Правда, не на всех ядрах конфиги с non-ascii символами выгружаются корректно.
     

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