Как добавить автообновление конфига в плагин Minecraft (Bukkit / Spigot)

Как добавить автообновление конфига в плагин Minecraft (Bukkit / Spigot)  
Описание

В этом гайде начинающие Bukkit разработчики узнают, как легко добавить автообновление конфигурации в свой плагин. Также разберём способ создания config.yml и принцип работы библиотеки Config-Updater от tchristofferson, которая позволяет автоматически обновлять конфиг без потери пользовательских данных.


Разбираемся с файлом конфигурации

config.yml — это файл, который автоматически создаётся плагином для хранения настроек. Он используется для параметров, сообщений и других значений плагина.

В качестве примера будет использоваться плагин xAutoFly.

Пример конфигурации:

# Settings

# enabled - Should the plugin work? (true/false)
# permission-mode - Restrict plugin usage by permission
# permission - Permission node
# send-message - Send message on join

enabled: true
permission-mode: false
permission: 'xaf.perm'
send-message: false

# Locale

prefix: "&bXAF &8>> &f"
unknown-command: "Unknown command."
no-permissions: "You don't have enough permissions to execute this command."
successfully-reloaded: "You have successfully reloaded the configuration."
message: "Flight was enabled &bautomatically&f."

Как видно, конфиг состоит из двух частей: настройки плагина и текстовые сообщения (locale).

Важно: чтобы Config-Updater работал корректно, комментарии должны быть аккуратно структурированы и не мешать YAML-синтаксису.


Добавляем Config-Updater в проект

Подключение происходит через Maven (или Gradle). Пример для pom.xml:

<dependency>
    <groupId>com.tchristofferson</groupId>
    <artifactId>ConfigUpdater</artifactId>
    <version>2.1-SNAPSHOT</version>
</dependency>

Актуальную версию можно найти в официальном репозитории библиотеки.


Создаём класс конфигурации

Рекомендуется вынести работу с конфигом в отдельный класс. Он будет отвечать за создание, проверку и обновление config.yml.

public class Config {

    Main plugin;

    public Config(Main plugin) {
        this.plugin = plugin;
    }

    public void init() {
        File configFile = new File(plugin.getDataFolder(), "config.yml");

        // создаём конфиг если его нет
        if (!configFile.exists()) {
            plugin.getConfig().options().copyDefaults(true);
            plugin.saveDefaultConfig();
            plugin.getLogger().info("Config was successfully generated.");
        }

        // обновление конфига через ConfigUpdater
        try {
            ConfigUpdater.update(plugin, "config.yml", configFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

        plugin.reloadConfig();
    }
}

Важно: метод ConfigUpdater.update() требует блок try {} / catch {}, так как работает с файлами и может выбрасывать IOException.


Подключаем в главном классе

Сначала создаём объект конфигурации:

Config config;

Далее инициализируем в методе onEnable():

config = new Config(this);
config.init();

Эти строки запускают систему конфигурации при старте плагина.


Как это работает

После запуска плагина происходит следующее:

  • Если config.yml отсутствует — он создаётся автоматически
  • Конфиг сравнивается с версией внутри .jar
  • Недостающие параметры добавляются без удаления старых
  • Все пользовательские настройки сохраняются

Проверка работы

Чтобы убедиться, что всё работает правильно:

  1. Запусти плагин с текущим конфигом
  2. Добавь новые параметры в config.yml внутри проекта
  3. Собери новый .jar файл
  4. Загрузи его на сервер

Если новые строки появились в конфиге — всё работает корректно.

Автообновление конфига — это важный элемент разработки плагинов. Оно избавляет от ручного обновления настроек и предотвращает ошибки при обновлениях.

Готово! Теперь твой плагин умеет автоматически обновлять конфигурацию без потери данных.