ZConfig

ZConfig

一个mixin配置模组,支持从其他模组覆盖加载。

这个项目为何存在?

这是一个通用配置模组,部分基于 c2me 的内部配置系统。 这也能让我将 zfastnoise 的体积缩减至几十千字节,并且用户只需下载一次配置模组即可。

功能特性

  • 基于 TOML 的配置文件
  • 支持布尔型和整数型配置项
  • 允许其他模组通过模组元数据覆盖配置项
  • 可将模组标记为与特定配置项不兼容

例如,fabric.mod.json:

{
  ...
  "custom": {
    "zfastnoise:overrides" : "mixin.perf.surface"
  }
}

上述配置会禁用 mixin.perf.surface 配置选项。

未来计划

  • 增加对 ModMenu/Forge 配置 API 的支持
  • 增加 NeoForge 构建版本
  • 添加更多便捷功能以便轻松生成配置

示例配置

package org.codeberg.zenxarch.zconfig.test;

import org.codeberg.zenxarch.zconfig.entry.BooleanConfigEntry;
import org.codeberg.zenxarch.zconfig.entry.ConfigEntries;
import org.codeberg.zenxarch.zconfig.entry.IntConfigEntry;
import org.codeberg.zenxarch.zconfig.loader.Config;
import org.codeberg.zenxarch.zconfig.loader.ConfigLoader;
import org.codeberg.zenxarch.zconfig.loader.OverrideCollector;
import org.junit.jupiter.api.Test;

public class ExampleConfig extends ConfigEntries {
  public static final ExampleConfig INSTANCE = new ExampleConfig();

  public static final BooleanConfigEntry MAIN =
      INSTANCE.createEntry(
          "main",
          builder -> builder.addComment("主条目").defaultValue(false).addIncompat("sodium"));

  public static final IntConfigEntry OTHER =
      INSTANCE.createIntEntry(
          "other", builder -> builder.addComment("其他条目").defaultValue(0).constraints(-1, 1));

  public static final Config CONFIG =
      new Config(
          new ConfigLoader("example_mod_id", INSTANCE), new OverrideCollector("example_mod_id"));

  @Test
  public void loadConfig() {
    IO.println(CONFIG.get(MAIN));
    IO.println(CONFIG.get(OTHER));
    IO.println(CONFIG.loadMixinEntries());
  }
}