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

Помогите Автодополнение config.yml

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

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

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

    Баллы:
    61
    Возможно тупой вопрос, но хочется посоветоваться. У меня есть конфиг. При запуске плагина он сохрняется в папку и плагин берет данные уже из него. Но если я обновлю конфиг внутри плагина, то конфиг в папке останется нетронутым. Мне бы хотелось при каждом запуске плагина добавлять недостающие строки в конфиг из папки и не трогать уже имеющиеся. Это придется делать просто чугунной проверкой и вставкой строк или есть какая-то функция для, не знаю, допустим, сравнения 2х конфигов?
     
  2. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Просто сохранить его?
     
  3. Автор темы
    ZiEnTenIn

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

    Баллы:
    61
    Нет. Тогда уже измененные части конфига станут стандартными. Хотя может и нет. Посмотрю сегодня
     
    Последнее редактирование: 26 янв 2022
  4. SashaBrine

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

    Баллы:
    76
    Ты норм?
    saveConfig();
    reloadConfig();

    Все нормально работает.
     
  5. Автор темы
    ZiEnTenIn

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

    Баллы:
    61
    Хз, у меня че то не очень было. Сегодня сяду, посмотрю, попробую, мб тупанул где, спасибо.
     
  6. alexandrage

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

    Баллы:
    173
    saveConfig(); сохранит конфиг, все изменения впишутся в файл.
    reloadConfig(); загрузит конфиг из файла, полностью заменит конфиг на то что было в файле.
     
    Последнее редактирование: 26 янв 2022
  7. deadanykey

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

    Баллы:
    96
    Если я правильно понял, ему нужно немного другое.
    Он уже настроил конфиг и не хочет лезть туда снова.
    Но появились новые ключи после обновления плагина. И он хочет, чтобы те изменения, которые он уже сделал в конфиге, никак не были затронуты и одновременно были добавлены новые ключи.
     
  8. alexandrage

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

    Баллы:
    173
    А почитать что я написал не дано? Первый метод это как раз и делает.
     
  9. deadanykey

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

    Баллы:
    96
    Почитал. Но я тупой и прошу помощи в разъяснении.
    Представим, что плагин запустился и получил данные из конфига:
    а = 10
    б = 15
    Что произойдёт при saveConfig()? Какие данные окажутся на диске?
     
  10. alexandrage

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

    Баллы:
    173
    Такие же и окажутся. В чем твои проблемы?
     
  11. deadanykey

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

    Баллы:
    96
    Ок, вполне ожидаемый результат, полностью согласен.
    Дополнительный вопрос:
    Плагин обновился и в конфиге теперь есть новый ключ:
    в = 20
    Текущий конфиг не удалялся, а просто был заменен Jar без изменения папки данных.
    Что произойдёт при saveConfig()? Какие данные будут на диске?
     
  12. alexandrage

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

    Баллы:
    173
    Если ты менял конфиг ручками в файле, то тебе нужно выполнить метод reloadConfig().
     
    Последнее редактирование: 26 янв 2022
  13. deadanykey

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

    Баллы:
    96
    Ответа я так и не получил.
    Можешь ответить на предыдущий вопрос без перехода на личности?

    Поясню более подробно свой вопрос.

    1. Устанавливаем на сервер плагин 1.jar. Впервые.
    2. При запуске плагин создаёт папку данных и свой конфиг, в котором 2 (два) значения:
    а = 10
    б = 15
    3. Всё работает и рулится. Меняю "а" на 12 и всё это учитывается.
    4. Выходит новая версия плагина 1,jar.
    5. Я его выкачиваю и заменяю свой 1.jar на новый.
    6. Папку данных и конфиг не удаляю.
    7. При старте новая версия плагина видит конфиг, который остался от старой версии. И что она с ним делает?
    При условии, что внутри нового Jar лежит новый конфиг, в котором появился новый ключ "с".

    Отсюда вопрос: как обновить конфиг, сохранив все мои настройки от старого?

    reloadConfig() перечитает файл, который уже есть и не добавит туда ключ "с".
     
  14. alexandrage

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

    Баллы:
    173
    Мысль твою понял, используешь addDefault(ключ, значение); Добавит новую запись, если отсутствует.
     
  15. deadanykey

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

    Баллы:
    96
    Это порождает дополнительный код, который надо предусмотреть.
    Так вот, суть вопроса:
    1. Читаем старый конфиг, который уже есть.
    2. Читаем новый конфиг, который внутри JAR.
    3. Сравниваем.
    4. Собираем итоговый конфиг из старого и нового, не изменяя уже существующие ключи.
    5. Предусмотреть удаление ключей, которые уже не будут использоваться.
    6. Вопрос в реализации.
    7. Также нужно учесть, что версии могут обновляться не подряд, а перешагивая через пару версий сразу.
    Конечно, можно запомнить ВСЕ ключи, которые были аж с первой версии и тащить их все по всем следующим версиям. Но решение идиотское (AuthMe так делал - выглядело ужасно).
     
  16. alexandrage

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

    Баллы:
    173
    И в чем твоя проблема? Ты обновляешь плагин и вносишь новые строчки кода. Ключи же сами себя не обработают.
     
  17. deadanykey

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

    Баллы:
    96
    Да что ж такое-то....
    Вопрос ТС именно в этом - как обновить конфиг. Нужен код, который будет следить за различием конфигов. Код нужен универсальный, чтобы на каждую версию не писать свой костыль.
    Ок, попробую объяснить ещё раз.
    Есть файл. В нём две строчки:
    а: 10
    б: 20
    В какой-то момент я решил обновить плагин и сделал так, что теперь:
    а: 12 (но это если значение не менялось, если изменено, то пусть будет изменённое)
    б убираем вообще, не используется.
    Зато добавляем
    с: "ЫЫЫ"
    д: 154

    Как сделать так, чтобы мне не пришлось каждый раз вручную лезть в конфиг и убирать/добавлять новые ключи?
     
  18. HauserGrim

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

    Баллы:
    96

    Проблема в том, что тебе не с нового конфига нужно значения доставать и добавлять в старый, а в плагине их держать.
     
  19. alexandrage

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

    Баллы:
    173
    Что и делает addDefault(ключ, значение) и на сейве все добавится в старый конфиг.
     
  20. HauserGrim

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

    Баллы:
    96
    На что я и выделил твой кусок сообщения для ТС.
     
Статус темы:
Закрыта.

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