DACL
DumbassConfigLib — это библиотека конфигов, используемая в моих модах
- Загрузчики
- Fabric
- Скачиваний на Modrinth
- 20,2 тыс.
- Подписчиков на Modrinth
- 7
- версий
- 6
- Обновлён
- 15 июля 202615 июл.
- Опубликован
- в 2025
Коротко о моде
Работает и в игре, и на сервере — ставьте, где нужен
DumbassConfigLib — это библиотека конфигов, которая используется в моих модах. Если ты разработчик модов, ты можешь легко внедрить эту библиотеку у себя.
Java API
Чтобы начать использовать библиотеку, сначала добавь её в свой build.gradle:
repositories {
...
maven {
name = "KaseToatz"
url = "https://maven.kasetoatz.com/"
}
}
dependencies {
modCompileOnly "com.kasetoatz:dumbassconfiglib:${project.dacl_version}"
}Затем добавь dacl_version в свой gradle.properties, версию можно посмотреть на странице версий.
Создание опций
Начни с создания точки входа мода, убедись, что она реализует ModInitializer. После этого ты можешь добавить свои опции как public static поля в этот класс, чтобы обращаться к ним позже. Создавать опции можно так:
public static final BoolOption TEST_BOOL_OPT = new BoolOption(Component.literal("Test boolean option"), "test_bool_opt", false);
public static final IntOption TEST_INT_OPT = new IntOption(Component.literal("Test integer option"), "test_int_opt", 1);
public static final FloatOption TEST_FLOAT_OPT = new FloatOption(Component.literal("Test float option"), "test_float_opt", 1.F);Первый параметр — это текст, отображаемый в интерфейсе конфига, второй параметр — уникальный идентификатор опции, а третий — значение по умолчанию.
Затем добавь этот класс в свой fabric.mod.json, чтобы он загружался при запуске:
"entrypoints": {
"main": [
"com.kasetoatz.mymod.MyMod"
]
}Ты можешь заменить main на client или server, если твой мод работает только на клиенте или только на сервере.
Валидаторы
Для опций с полем ввода можно добавить четвёртый параметр с AbstractValidator, чтобы задать ограничения на значение опции. Чтобы создать целочисленную опцию со значением от 1 до 100, можно сделать так:
public static final IntOption CLAMPED_INT_OPT = new IntOption(Component.literal("Clamped integer option"), "clamp_int_opt", 50, new RangeValidator<>(1, 100));Также можно передать null в нижнюю или верхнюю границу в RangeValidator, чтобы убрать это ограничение.
Сборка конфига
Когда ты закончил создавать опции, пора собрать сам конфиг. Это делается с помощью статического метода builder у DumbassConfig вот так:
public static final DumbassConfig CONFIG = DumbassConfig.builder(Component.literal("Test Screen Title"), "filename.json")
.withOption(TEST_BOOL_OPT)
.withOption(TEST_INT_OPT)
.withOption(TEST_FLOAT_OPT)
.build()После сборки конфига значения соответствующих AbstractOption меняются при изменении конфига, так что ты всегда можешь получить к ним доступ так:
bool enabled = TEST_BOOL_OPT.getValue();Подопции
Ты также можешь добавлять подопции, которые по сути представляют собой отдельный экран со своими собственными опциями. Чтобы создать такую, используем метод builder класса SubOption. В качестве одной из подопций возьмём CLAMPED_INT_OPT.
public static final SubOption TEST_SUB_OPT = SubOption.builder(Component.literal("Sub Screen Title"), "sub_opt")
.withOption(CLAMPED_INT_OPT)
.build();Теперь мы можем добавить эту опцию в сборщик конфига. Такие подопции можно вкладывать друг в друга на любую глубину.
Поддержка modmenu
Чтобы добавить наш новоиспечённый экран конфига в modmenu, сначала нужно добавить его как зависимость к нашему моду, как это сделать, можно прочитать здесь.
Теперь создаём новый класс для интеграции с mod menu, реализуем в нём ModMenuApi и переопределяем getModConfigScreenFactory, чтобы он возвращал наш интерфейс конфига.
public class ModMenuIntegration implements ModMenuApi
{
private final DumbassConfigScreen screen = new DumbassConfigScreen(CONFIG);
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory()
{
return screen::get;
}
}
Теперь мы можем изменить наш `fabric.mod.json`, чтобы указать новый класс как точку входа `modmenu`:
```json
"entrypoints": {
"main": [
"com.kasetoatz.mymod.MyMod"
],
"modmenu": [
"com.kasetoatz.mymod.ModMenuIntegration"
]
}Полный пример
public class MyMod implements ModInitializer
{
public static final BoolOption TEST_BOOL_OPT = new BoolOption(Component.literal("Test boolean option"), "test_bool_opt", false);
public static final IntOption TEST_INT_OPT = new IntOption(Component.literal("Test integer option"), "test_int_opt", 1);
public static final FloatOption TEST_FLOAT_OPT = new FloatOption(Component.literal("Test float option"), "test_float_opt", 1.F);
public static final IntOption CLAMPED_INT_OPT = new IntOption(Component.literal("Clamped integer option"), "clamp_int_opt", 50, new RangeValidator<>(1, 100));
public static final SubOption TEST_SUB_OPT = SubOption.builder(Component.literal("Sub Screen Title"), "sub_opt")
.withOption(CLAMPED_INT_OPT)
.build();
public static final DumbassConfig CONFIG = DumbassConfig.builder(Component.literal("Test Screen Title"), "filename.json")
.withOption(TEST_BOOL_OPT)
.withOption(TEST_INT_OPT)
.withOption(TEST_FLOAT_OPT)
.withOption(TEST_SUB_OPT)
.build()
@Override
public void onInitialize()
{
...
}
}public class ModMenuIntegration implements ModMenuApi
{
private final DumbassConfigScreen screen = new DumbassConfigScreen(CONFIG);
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory()
{
return screen::get;
}
}[](https://discord.com/invite/jpFJG8dujR) [
](https://ko-fi.com/kasetoatz) [
](https://paypal.me/KaasToast)
Частые вопросы
Как установить DACL?
Установите Fabric под свою версию Minecraft, скачайте DACL под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть DACL?
У DACL есть сборки для Minecraft 1.21.10, 26.1–26.3.
Нужен ли DACL на сервере?
Работает и в игре, и на сервере — ставьте, где нужен