aka PaperConfig, VelocityConfig
Библиотека для простой работы с конфигами для Paper и Velocity на основе Jackson
Подключение:
- Paper:
<dependency> <groupId>ru.cwcode.tkach.config</groupId> <artifactId>PaperConfig</artifactId> <version>2.3.0</version> <scope>provided</scope> </dependency>
- Velocity
<dependency> <groupId>ru.cwcode.tkach.config</groupId> <artifactId>VelocityConfig</artifactId> <version>2.3.0</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
появится подкоманда config reload <configName>
Полезно знать: Аннотации Jackson (В особенности @JsonSetter, @JsonGetter, аннотации для работы с полиморфизмом, @JsonCreator, отношения)