
Configly
集中式、可视化、便捷的模组全局配置
Configly
面向 Hytale 模组的全局配置。一个给模组开发者的库。
Configly 是您模组的基础设施,而不是用户需要安装的东西。您将它打包进您的 jar,定义配置,然后发布。您的用户永远不会知道 Configly 的存在——他们只是在预期的地方得到一个干净、可编辑的配置文件。
问题所在
如今为模组提供配置文件意味着要自行注册一个 AssetStore。这会带来:
- 一个包含单个文件的整个资源文件夹,
Server/YourMod/Config/YourMod.json - 手动编写的资源类、编解码器、键函数和存储注册代码
- 其他人想要覆盖某个值,只能替换整个文件,没有其他办法
而且每个这样做的模组都会把设置放在不同的位置,所以一个运行 12 个模组的服务器管理员,得在 12 种布局中翻找。
Configly 的做法
一次性注册存储,适用于所有模组。您只需要为您自己的字段编写编解码器,其他什么都不用管。每个模组的配置文件都会放在一个共享的 Server/Configs/ 文件夹中,每个文件对应一个模组。
Server/Configs/
├── Hexcode.json
├── Icarus.json
└── YourMod.json
集成
定义您的配置。扩展 Config,给它一个 BuilderCodec,然后像编写任何其他 Hytale 资源编解码器一样编写它:
public final class HexcodeConfig extends Config {
public static final BuilderCodec<HexcodeConfig> CODEC = BuilderCodec.builder(HexcodeConfig.class, HexcodeConfig::new)
.append(new KeyedCodec<>("RespectPvp", Codec.BOOLEAN),
(config, b) -> config.respectPvp = b,
config -> config.respectPvp)
.documentation("Whether Hexcode spells honour the server PVP setting")
.add()
.build();private boolean respectPvp = true;
public boolean respectsPvp() {
return respectPvp;
}
}
在 setup() 中注册它:
Configly.register("Hexcode", HexcodeConfig.class, HexcodeConfig.CODEC);
在 Server/Configs/Hexcode.json 提供默认值:
{
"Type": "Hexcode",
"RespectPVP": true
}
在任何地方读取它:
HexcodeConfig.get().respectsPvp();
这就是整个集成过程。
您能得到什么
任何您想要的形态。 您的编解码器、您的字段、您的校验。Configly 从不检查您的配置,所以它可以简单到只有一个开关,也可以复杂到像一张嵌套的平衡表。
免费获得类型化资源编辑器支持。 每个字段都会变成真正的编辑器控件,每个 .documentation(...) 字符串都会成为其描述。您的用户不再需要猜测原始 JSON,您也不再需要处理“这个值是干什么的”这类提问。
热重载。 从磁盘或资源编辑器进行的编辑无需重启即可生效。
可被其他资源包修补。 兼容性资源包可以在不触碰您模组的情况下覆盖您配置的单个值,并且可以限定在安装了您的模组时才生效:
Server/Configs/Hexcode.patch
{
"$Requires": "Riprod:Hexcode",
"RespectPVP": false
}
补丁中未提及的所有内容都会保留您的值。这需要 Patchly;没有它 Configly 也能正常工作。
卸载安全。 如果您的模组被移除,其配置文件会原封不动地保留,而不会报错。重新安装后,所有调整过的值和第三方补丁依然存在。
发布
两种方式:您可以将 Configly.jar 放入 lib/ 并在本地打包,或者从 maven 仓库引用 Configly
plugins {
id 'com.gradleup.shadow' version '9.4.2'
}configurations {
shadowBundle
implementation.extendsFrom(shadowBundle)
}
dependencies {
shadowBundle(files('lib/Configly-X.Y.Z.jar'))
// 或者 shadowBundle('curse.maven:configly-1640076:8580658')
}
shadowJar {
archiveClassifier.set('')
mergeServiceFiles()
configurations = [project.configurations.shadowBundle]
}
tasks.build {
dependsOn("shadowJar")
}
您的模组独自发布。 没有必需的依赖项,您的用户无需安装任何东西。
打包是安全的。 任意数量的模组都可以各自携带自己的打包副本。启动时,一个注册存储,其余绑定到它,因此副本之间永远不会冲突,也永远不会争抢文件夹。
文档和源码: https://github.com/itsriprod/configly 问题反馈: https://github.com/itsriprod/configly/issues 许可证: GPLv3
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。