DACL

DACL

DumbassConfigLib 是一个用于我的模组的配置库

基础库

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 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);

第一个参数是配置 UI 中显示的文本,第二个参数是选项的唯一标识符,第三个参数是默认值。

然后将此类添加到你的 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));

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

构建配置

当你完成选项的创建后,就该实际构建配置了。你可以使用 DumbassConfig 的静态 builder 方法来做到这一点,如下所示:

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();

子选项

你还可以添加子选项,它基本上是一个拥有自己选项的全新界面。要创建它,我们可以使用 SubOption 类的 builder 方法。我们将使用 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,我们必须首先将其添加为模组的依赖项,你可以在此阅读如何操作。

现在我们为模组菜单集成创建一个新类,在此类中实现 ModMenuApi 并重写 getModConfigScreenFactory 以返回我们的配置 UI。

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 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;
    }
}

discord-singular kofi-singular paypal-singular

想找一个有趣的地方玩 Minecraft 并试用我的一些模组吗?来 El Basurero SMP 一起玩吧!

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

更多信息请查看文档!