Codex [配置菜单]

Codex [配置菜单]

允许玩家以统一且简单的方式配置模组设置的每玩家配置API

图书馆

Codex:一个设置菜单统治所有

厌倦了每个模组都有自己的配置文件、命令和操作方式?我们也是。

Codex 为你的 Hytale 服务器添加了一个干净、原生感的设置界面。玩家输入 /settings 即可打开一个统一菜单,调整所有接入 Codex 的模组中的选项——无需查阅 Wiki、无需手动编辑 JSON、无需记忆指令。

对于模组开发者来说,这更为简单:用 BuilderCodec 定义你的配置字段,用一行代码注册它,剩下的就交给 Codex。它会读取你的数据结构,自动选择合适的 UI 控件(复选框、文本输入框、数字输入框),并为你构建设置页面。无需编写任何 UI 代码。


对于玩家

安装

  1. 从“文件”标签页下载 Codex.jar
  2. 将其放入你服务器目录下的 mods/ 文件夹。
  3. 启动(或重启)服务器。

如何使用

打开聊天框并输入以下任一指令:

  • /settings
  • /codexsettings
  • /codexconfig
  • /config

一个设置窗口会弹出,显示所有已将配置注册到 Codex 的模组。点击任意分类即可打开该模组的设置界面。修改会立即生效——无需重启。


对于模组开发者

将你的模组添加到 Codex 设置菜单大约需要两分钟。

步骤 0 — 将 Codex 添加为依赖项

将此代码添加到你的 Gradle 配置或类似配置中:

repositories {
    maven { url "https://www.cursemaven.com" }
}

dependencies {
    // Project ID: 1472867
    implementation "curse.maven:hyui-1472867:<file-id>"
}

file-id 可以在 Curseforge 模组页面查看特定文件时的 URL 中找到:

https://www.curseforge.com/hytale/mods/codex-configs/files/&lt;file-id&gt;

步骤 1 — 定义你的配置

创建一个带有 BuilderCodec 的组件类。这是标准的 Hytale 编解码器操作——如果你已经在为数据处理使用 BuilderCodec,那么你已经完成了一半。

public class MyModConfig implements Component<EntityStore> {
    public Boolean pvpEnabled;
    public Integer renderDistance;
    public String motd;

    public static final BuilderCodec<MyModConfig> CODEC =
        BuilderCodec.builder(MyModConfig.class, MyModConfig::new)
            .append(new KeyedCodec<>("PvpEnabled", Codec.BOOLEAN),
                (o, v) -> o.pvpEnabled = v, o -> o.pvpEnabled).add()
            .append(new KeyedCodec<>("RenderDistance", Codec.INTEGER),
                (o, v) -> o.renderDistance = v, o -> o.renderDistance).add()
            .append(new KeyedCodec<>("Motd", Codec.STRING),
                (o, v) -> o.motd = v, o -> o.motd).add()
            .build();

    public ComponentType<EntityStore, MyModConfig> getComponentType() {
       return <Your Plugin Class>.ct; // 将此作为参数添加到你的插件中
    }
}

步骤 2 — 注册它

在你的插件的 setup() 方法中:

this.ct =
    this.getEntityStoreRegistry().registerComponent(
        MyModConfig.class, "MyModConfig", MyModConfig.CODEC);

PlayerSettingsRegistry.get().registerCodec("MyMod", MyModConfig.CODEC, ct);

就这样。Codex 会识别你的编解码器,在设置菜单中生成一个 "My Mod" 分类,并为你处理 UI 渲染和数据持久化。

支持的类型

字段类型 控件
Boolean 复选框
Integer 数字输入框
Float 数字输入框
Double 数字输入框
String 文本输入框
更多类型即将推出!

步骤 3 — 取回你的数据

完成所有设置后,你现在可以像这样查询玩家的配置组件引用:

MyModConfig data = store.getComponent(ref, MyModConfig.getComponentType());

如果用户尚未设置任何内容,这将返回 null;如果用户已经打开过你的配置页面,则会返回包含玩家所做更改的配置数据默认实例。

更进一步

Codex 旨在适应你不断增长的需求:

  • 自定义 UI 控件 — 实现 CodecUIProvider<T> 并使用 GeneratedSettingsRegistry 进行注册,以处理新的数据类型。
  • 完全自定义页面 — 实现 PlayerSettingsProvider 以完全控制你的设置页面布局,同时仍出现在 Codex 菜单中。
  • 自定义图标 — 在你的提供者中覆盖 getIconPath() 方法,在模组分类名称旁显示一个 100×100 的图标。

如需完整的开发者指南、源代码和示例,请访问 GitHub 仓库


指令

指令 别名 描述
/settings /codexsettings, /codexconfig, /config 打开 Codex 设置菜单

链接


Exotik850 构建。欢迎贡献代码和发起拉取请求!