JasonConfig

JasonConfig

使用JSON数据结构的简单配置API

基础库

这是一个库模组,如果你是用户,直接安装即可,无需阅读以下内容!

供开发者使用 ---

添加依赖 [ 只需使用 CurseMaven,其仓库地址为:https://www.cursemaven.com/ 使用文件中所需版本的片段添加依赖 示例(并非正确的模组) implementation "curse.maven:cloth-config-348521:5987045" ]

与 Forge 配置相比的优缺点

-优点----------------------------------

使用 JSON 而非 TOML,使其更加可靠(例如,Forge 配置不能轻松支持空列表,使用空列表时可能会出错)
与 Forge 配置相比,能够读写更多 Java / Minecraft 类(例如,Vec3 无法写入或读取 Forge 配置,而 JasonConfig 由于使用 JSON 对象,因此没有问题)
代码编写更简单,同时与创建 Forge 配置类的方式类似(见下文)

-缺点----------------------------------

由于采用 JSON 格式,用户可读性稍差
实验性,虽然我目前还没有发现错误,但我确信会出现一些问题,毕竟我只有一个人

示例配置(将模组添加到依赖后,也可以在模组的“api”包中找到)

“api”包中所需的一切都有完善的文档说明,应多加参考

public class ExampleConfigClass {
    public static final Config EXAMPLE_CONFIG = new Config(MODID + "-example_config");

    public static final ConfigComment DEVCOMMENT
            = new ConfigComment("此文件仅在开发环境中生成", EXAMPLE_CONFIG);

    ///以下配置值在调用时传入{<code>EXAMPLE_CONFIG</code>}配置,这会自动将其添加到配置中
    public static final ConfigValue<Float> EXAMPLE_FLOAT
            = new ConfigValue<>(10f, "exampleFloat", EXAMPLE_CONFIG, new TypeToken<Float>(){}.getType());
    ///注释按声明顺序放置,因此此注释将位于{<code>EXAMPLE_FLOAT</code>}之下、{<code>EXAMPLE_LIST</code>}之上
    public static final ConfigComment EXAMPLE_COMMENT
            = new ConfigComment("这是一个列表!", EXAMPLE_CONFIG);
    public static final ConfigValue<List<String>> EXAMPLE_LIST
            = new ConfigValue<>(List.of("value1", "value2", "value3", "value4"), "exampleList", EXAMPLE_CONFIG, new TypeToken<List<String>>(){}.getType());
    public static final ConfigComment VEC3_COMMENT
            = new ConfigComment("这是一个 Vec3!许多在 Forge 配置中无法使用的 Java 类在这里都可以使用!", EXAMPLE_CONFIG);
    public static final ConfigValue<List<Vec3>> EXAMPLE_VEC3
            = new ConfigValue<>(List.of(new Vec3(123,123,123), Vec3.ZERO), "exampleVec3", EXAMPLE_CONFIG, new TypeToken<List<Vec3>>(){}.getType());
    public static final ConfigComment CLASS_COMMENT
            = new ConfigComment("这是一个新创建的类,记录(record)是保存此类数据的最佳方式", EXAMPLE_CONFIG);
    public static final ConfigValue<LinkedHashMap<String, Info>> EXAMPLE
            = new ConfigValue<>(new LinkedHashMap<>(Map.of("information", new Info(1.0f, false, 8))), "example", EXAMPLE_CONFIG, new TypeToken<LinkedHashMap<String, Info>>(){}.getType());

    ///此方法必须在你的模组主类中调用
    ///
    /// 你需要对你声明的{<code>Config</code>}调用{<code>register()</code>}方法,
    /// 并添加你在构造函数中未赋值的任何{<code>ConfigValue<?></></code>}变量
    public static void init()/* 此方法可以任意命名,如 init()、register() 等 */ {
        EXAMPLE_CONFIG.register();

        ///获取值的示例
        //显式(与 Forge 的配置非常相似)
    }

    public record Info(float f, boolean bool, int integer) { }
}