Skip to content

KamikotoTkach/TkachConfig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CWConfig 2.1.3

aka PaperConfig, VelocityConfig

Библиотека для простой работы с конфигами для Paper и Velocity на основе Jackson

Подключение:

  • Paper:
    <dependency>
      <groupId>ru.cwcode.tkach.config</groupId>
      <artifactId>PaperConfig</artifactId>
      <version>2.1.4</version>
      <scope>provided</scope>
    </dependency>
  • Velocity
    <dependency>
      <groupId>ru.cwcode.tkach.config</groupId>
      <artifactId>VelocityConfig</artifactId>
      <version>2.1.4</version>
      <scope>provided</scope>
    </dependency>

Использование

Добавить зависимость в плагин:

  • Paper: CWConfig
  • Velocity: cwconfig

Создать YmlConfigManager

  • Paper:
    new YmlConfigManager(new PaperPluginConfigPlatform(this))
  • Velocity:
    new YmlConfigManager(new VelocityPluginConfigPlatform(plugin, server, logger, dataDirectory));

Далее создать сам конфиг:

public class Example extends YmlConfig {
  //поля
}

В принципе конфиг готов.

Требования к классу конфига:

  • Пустой конструктор
  • Хоть одно нестатическое поле

Загрузить его можно так:

Example = yml.load("example", Example.class);

Метод load загружает файл example.yml и парсит его в класс Example. Если файла нет или не удалось спарсить, то создаёт инстанс класса Example и сохраняет его в файл example.yml.

Работает с почти любыми типами и коллекциями из стандартной явы и с другими классами через кастомный сериализатор/десериализатор для него, а свои классы проще всего сохранять через пустой конструктор или конструктор с аннотацией @JsonCreator.

Пример конфига с использованием синглтона:

public class Example extends YmlConfig implements Reloadable {
  static Config instance;

  //поля

  public Example() {
  }

  public static Example getInstance() {
    if (instance == null) load();
    return instance;
  }

  public static void load() {
    instance = SomeClass.yml.load("example", Example.class);
  }

  @Override
  public void reload() {
    load();
  }
}

Как можно заметить, этот конфиг implements Reloadable - конфиг можно перезагружать командами:

new Command("someCommand")
  .subCommands(
    ReloadCommands.get(yml)
  )

и в someCommand появится подкоманда reload <configName>

Полезно знать: Аннотации Jackson (В особенности @JsonSetter, @JsonGetter, аннотации для работы с полиморфизмом, @JsonCreator, отношения)