DACL

DACL

蠢货配置库是一个用于我的模组的配置库。

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_bool_opt", false);
public static final IntOption TEST_INT_OPT = new IntOption(Component.literal("测试整数选项"), "test_int_opt", 1);
public static final FloatOption TEST_FLOAT_OPT = new FloatOption(Component.literal("测试浮点选项"), "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("受限整数选项"), "clamp_int_opt", 50, new RangeValidator<>(1, 100));

你也可以在 RangeValidator 中将上界或下界设为 null,以移除该限制。

构建配置

创建完选项后,就可以开始构建你的配置了。你可以使用 DumbassConfig 的静态 builder 方法,如下所示:

public static final DumbassConfig CONFIG = DumbassConfig.builder(Component.literal("测试界面标题"), "filename.json")
    .withOption(TEST_BOOL_OPT)
    .withOption(TEST_INT_OPT)
    .withOption(TEST_FLOAT_OPT)
    .build()

构建配置后,当配置被修改时,相应的 AbstractOption 的值会随之改变,因此你可以随时通过以下方式访问它们:

bool enabled = TEST_BOOL_OPT.getValue();

子选项

你还可以添加子选项,它们实际上是一个包含自身选项的全新界面。要创建子选项,我们可以使用 SubOption 类的 builder 方法。我们将使用 CLAMPED_INT_OPT 作为子选项之一。

public static final SubOption TEST_SUB_OPT = SubOption.builder(Component.literal("子界面标题"), "sub_opt")
    .withOption(CLAMPED_INT_OPT)
    .build();

现在,我们也可以将这个选项添加到配置构建器中。我们可以任意深度地嵌套这些子选项。

Modmenu 支持

要将我们新创建的配置界面添加到 modmenu,首先必须将其添加为模组的依赖项,你可以阅读 这里 了解如何操作。

现在,我们为模组菜单集成创建一个新类,实现 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 入口点:

"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_bool_opt", false);
    public static final IntOption TEST_INT_OPT = new IntOption(Component.literal("测试整数选项"), "test_int_opt", 1);
    public static final FloatOption TEST_FLOAT_OPT = new FloatOption(Component.literal("测试浮点选项"), "test_float_opt", 1.F);

    public static final IntOption CLAMPED_INT_OPT = new IntOption(Component.literal("受限整数选项"), "clamp_int_opt", 50, new RangeValidator<>(1, 100));
    public static final SubOption TEST_SUB_OPT = SubOption.builder(Component.literal("子界面标题"), "sub_opt")
        .withOption(CLAMPED_INT_OPT)
        .build();

    public static final DumbassConfig CONFIG = DumbassConfig.builder(Component.literal("测试界面标题"), "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;
    }
}

discord-singular kofi-singular paypal-singular

想要找一个好玩的地方玩 Minecraft 并试用我的一些模组吗?快来 El Basurero SMP 服务器一起玩吧!

  • IP 地址: play.ebsmp.com
  • 推荐版本: 26.1.2(其他版本也可用!)
  • 基岩版: 支持
  • 额外福利: 可以在游戏中实时测试我的大部分服务端模组!

更多信息请查看 文档!