Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Метки:
Теги Теги
bukkit java
Статус
Закрыто для дальнейших ответов.

ZiEnTenIn

Активный участник
Пользователь
Баллы
61
Возможно тупой вопрос, но хочется посоветоваться. У меня есть конфиг. При запуске плагина он сохрняется в папку и плагин берет данные уже из него. Но если я обновлю конфиг внутри плагина, то конфиг в папке останется нетронутым. Мне бы хотелось при каждом запуске плагина добавлять недостающие строки в конфиг из папки и не трогать уже имеющиеся. Это придется делать просто чугунной проверкой и вставкой строк или есть какая-то функция для, не знаю, допустим, сравнения 2х конфигов?
 
saveConfig(); сохранит конфиг, все изменения впишутся в файл.
reloadConfig(); загрузит конфиг из файла, полностью заменит конфиг на то что было в файле.
 
Последнее редактирование:
saveConfig(); сохранит конфиг, все изменения впишутся в файл.
reloadConfig(); загрузит конфиг из файла, полностью заменит конфиг на то что было в файле.
Если я правильно понял, ему нужно немного другое.
Он уже настроил конфиг и не хочет лезть туда снова.
Но появились новые ключи после обновления плагина. И он хочет, чтобы те изменения, которые он уже сделал в конфиге, никак не были затронуты и одновременно были добавлены новые ключи.
 
Если я правильно понял, ему нужно немного другое.
Он уже настроил конфиг и не хочет лезть туда снова.
Но появились новые ключи после обновления плагина. И он хочет, чтобы те изменения, которые он уже сделал в конфиге, никак не были затронуты и одновременно были добавлены новые ключи.
А почитать что я написал не дано? Первый метод это как раз и делает.
 
А почитать что я написал не дано? Первый метод это как раз и делает.
Почитал. Но я тупой и прошу помощи в разъяснении.
Представим, что плагин запустился и получил данные из конфига:
а = 10
б = 15
Что произойдёт при saveConfig()? Какие данные окажутся на диске?
 
Почитал. Но я тупой и прошу помощи в разъяснении.
Представим, что плагин запустился и получил данные из конфига:
а = 10
б = 15
Что произойдёт при saveConfig()? Какие данные окажутся на диске?
Такие же и окажутся. В чем твои проблемы?
 
Такие же и окажутся.
Ок, вполне ожидаемый результат, полностью согласен.
Дополнительный вопрос:
Плагин обновился и в конфиге теперь есть новый ключ:
в = 20
Текущий конфиг не удалялся, а просто был заменен Jar без изменения папки данных.
Что произойдёт при saveConfig()? Какие данные будут на диске?
 
Ок, вполне ожидаемый результат, полностью согласен.
Дополнительный вопрос:
Плагин обновился и в конфиге теперь есть новый ключ:
в = 20
Текущий конфиг не удалялся, а просто был заменен Jar без изменения папки данных.
Что произойдёт при saveConfig()? Какие данные будут на диске?
Если ты менял конфиг ручками в файле, то тебе нужно выполнить метод reloadConfig().
 
Последнее редактирование:
Если ты менял конфиг ручками в файле, то тебе нужно выполнить метод reloadConfig(). И хватит уже задавать идиотские вопросы, ответ на которые уже дан выше.
Ответа я так и не получил.
Можешь ответить на предыдущий вопрос без перехода на личности?

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

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

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

reloadConfig() перечитает файл, который уже есть и не добавит туда ключ "с".
 
При условии, что внутри нового Jar лежит новый конфиг, в котором появился новый ключ "с".
Мысль твою понял, используешь addDefault(ключ, значение); Добавит новую запись, если отсутствует.
 
Мысль твою понял, используешь addDefault(ключ, значение); Добавит новую запись, если отсутствует.
Это порождает дополнительный код, который надо предусмотреть.
Так вот, суть вопроса:
1. Читаем старый конфиг, который уже есть.
2. Читаем новый конфиг, который внутри JAR.
3. Сравниваем.
4. Собираем итоговый конфиг из старого и нового, не изменяя уже существующие ключи.
5. Предусмотреть удаление ключей, которые уже не будут использоваться.
6. Вопрос в реализации.
7. Также нужно учесть, что версии могут обновляться не подряд, а перешагивая через пару версий сразу.
Конечно, можно запомнить ВСЕ ключи, которые были аж с первой версии и тащить их все по всем следующим версиям. Но решение идиотское (AuthMe так делал - выглядело ужасно).
 
И в чем твоя проблема? Ты обновляешь плагин и вносишь новые строчки кода. Ключи же сами себя не обработают.
Да что ж такое-то....
Вопрос ТС именно в этом - как обновить конфиг. Нужен код, который будет следить за различием конфигов. Код нужен универсальный, чтобы на каждую версию не писать свой костыль.
Ок, попробую объяснить ещё раз.
Есть файл. В нём две строчки:
а: 10
б: 20
В какой-то момент я решил обновить плагин и сделал так, что теперь:
а: 12 (но это если значение не менялось, если изменено, то пусть будет изменённое)
б убираем вообще, не используется.
Зато добавляем
с: "ЫЫЫ"
д: 154

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


Проблема в том, что тебе не с нового конфига нужно значения доставать и добавлять в старый, а в плагине их держать.
 
Проблема в том, что тебе не с нового конфига нужно значения доставать и добавлять в старый, а в плагине их держать.
Что и делает addDefault(ключ, значение) и на сейве все добавится в старый конфиг.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх