MAC(模组列表与配置)

MAC(模组列表与配置)

Hytale的模组列表和配置界面。

实用

替代文本

MAC (模组列表与配置)

MAC 为游戏添加了一个包含丰富元数据的模组列表,以及一个配置编辑器,其他插件可以通过简单的注册调用接入。它能够发现模组、显示状态/图标,并将您的插件设置展示为可编辑的字段。


功能

  • 模组列表,包含名称、版本、作者、描述、网站、启用/禁用状态、资源包标签
  • 分组列表排序 + 过滤器 + 搜索
  • 配置编辑器,支持实时重载(布尔值、数字、滑块、枚举、颜色、文件、字符串、数组、对象)
  • 可查看未注册的配置(以供编辑)
  • 配置部分分隔符(标题/副标题)
  • 配置字段的内联提示气泡
  • 管理页面,用于访问控制、只读模式和模组白名单
  • 每个模组的专属图标,以及 Hytale/Hypixel 和缺失资源的回退图标
  • 权限节点:
    • lyivx.mac
    • lyivx.mac.config
    • lyivx.mac.admin

使用方法

  • 打开 MAC 界面:/mac
  • 直接打开模组配置:
    • /mac config LYIVX:MAC
    • /mac config LYIVX_OreGenerator
  • 打开管理界面:/mac admin
  • /mac 的别名:/modlist/mods

安装

将 MAC 模组放入您的 mods 文件夹。它包含一个资源包,并会自动加载。


给开发者:为你的插件添加配置

MAC 读取一个在代码中注册的配置模式,并自动生成磁盘上的配置文件。默认值来自构建器链(无需资源配置文件)。

1) 注册配置模式

在插件设置中使用 PluginConfig.register(...)

PluginConfig<MySettings> config = PluginConfig.register(
    this.getLogger(),
    new PluginIdentifier(this.getManifest()),
    MySettings.class,
    MySettings::new,
    builder -> builder
        .add.booleanField("启用功能").defaultsTo(true)
        .add.slider("最大数量", 1, 100, 1).defaultsTo(50)
        .add.enumField("模式", "安全", "快速", "狂野").defaultsTo("安全")
        .add.color("强调色").defaultsTo("#1aa3a3")
        .add.file("图标文件", "Common/UI/Custom", "png").defaultsTo("")
        .add.stringField("底部注释").defaultsTo("")
);

配置文件写入到:config/<分组>/<名称>_Config.json

UI 中保留模式的顺序。

配置部分分隔符

您可以添加带标题的部分来对字段进行分组:

builder
    .add.section("游戏玩法")
    .add.booleanField("启用功能").defaultsTo(true)
    .add.section("显示")
    .add.color("强调色").defaultsTo("#1aa3a3");

配置提示

为最后添加的字段附加提示:

builder
    .add.booleanField("启用功能")
    .tooltip("开启或关闭该特性。")
    .defaultsTo(true);

对象和数组字段

您可以将字段嵌套为对象,并添加带有添加/删除控件的数组:

import net.lyivx.mac.config.ConfigField;

builder .add.objectField("生物设置", mob -> mob .add.booleanField("启用").defaultsTo(true) .add.numberField("生成速率").defaultsTo(1.5) ) .add.arrayField("白名单", ConfigField.stringField("名称")) .add.arrayField("等级", ConfigField.numberField("等级"));

数组被渲染为带有 + 添加和 - 删除项的子条目。对象将其字段渲染为标题下的嵌套子条目。

设置默认值

您的设置类可以是纯字段,无需初始化器。默认值通过模式构建器中的 .defaultsTo(...) 定义。


图标

MAC 在以下路径查找每个模组的图标:UI/Custom/<分组>_<名称>.png 这与 Better Modlist 的图标路径兼容:https://www.curseforge.com/hytale/mods/better-modlist 因此开发者只需一个图标位置。

回退方案:

  • Hytale/Hypixel 分组 -> Icons/ItemCategories/Hypixel.png
  • 缺失图标 -> Icons/ItemCategories/Natural.png

模组列表设置 (MAC 自身的配置)

MAC 配置控制:

  • 显示 Hytale
  • 仅显示有描述的
  • 仅显示配置
  • 最大可见条目数
  • 标签颜色(版本/启用/禁用/资源)

此文件位于:config/LYIVX/MAC_Config.json

管理设置 (MAC 管理配置)

管理配置控制:

  • 启用白名单模式(限制 /mac 的使用)
  • 非白名单用户的只读访问权限
  • 只读用户的模组允许列表

此文件位于:config/LYIVX/MAC_Admin.json

权限

MAC 命令权限节点:

  • lyivx.mac.command.mac
  • lyivx.mac.command.mac.config
  • lyivx.mac.command.mac.admin

备注

  • 配置 UI 仅编辑注册模式中存在的键值。
  • 未知键值会在内存中保留,但在检测到时从磁盘上的文件中移除。

重要提示

  • 如果您使用 MAC 的配置系统,您的模组依赖于 MAC 已被安装。这意味着其他模组列表/配置浏览器将无法为您的模组工作,除非 MAC 存在。未来的更新旨在支持无需将 MAC 作为硬依赖即可工作的配置。完整示例

import com.hypixel.hytale.common.plugin.PluginIdentifier;
import com.hypixel.hytale.logger.HytaleLogger;
import net.lyivx.mac.config.ConfigBuilder;
import net.lyivx.mac.config.ConfigField;
import net.lyivx.mac.config.PluginConfig;

public final class ExampleConfig { public static class Settings { public String title; public boolean enableFeature; public int maxCount; public String mode; public String accentColor; public String iconFile; public String footerNote; public Nested settings; public java.util.List<String> items; public java.util.List<Item> objectArray; }

public static class Nested {
    public boolean flag;
    public int level;
}

public static class Item {
    public String name;
    public int count;
}

public static PluginConfig&lt;Settings&gt; register(HytaleLogger logger, PluginIdentifier identifier) {
    return PluginConfig.register(
        logger,
        identifier,
        Settings.class,
        Settings::new,
        builder -&gt; builder
            .add.section("基础")
            .add.stringField("标题")
            .tooltip("字符串字段的示例提示。")
            .defaultsTo("示例")
            .add.booleanField("启用功能").defaultsTo(true)
            .add.numberField("数量").defaultsTo(1.5)
            .add.section("显示")
            .add.slider("最大数量", 1, 100, 1).defaultsTo(50)
            .add.enumField("模式", "安全", "快速", "狂野").defaultsTo("安全")
            .add.section("样式")
            .add.color("强调色").defaultsTo("#1aa3a3")
            .add.file("图标文件", "Common/UI/Custom", "png").defaultsTo("")
            .add.stringField("底部注释").defaultsTo("")
            .add.section("嵌套")
            .add.objectField("设置", nested -&gt; nested
                .add.booleanField("标志").defaultsTo(true)
                .add.numberField("等级").defaultsTo(3)
            )
            .add.arrayField("物品", ConfigField.stringField("项目"))
            .add.section("数组")
            .add.arrayField("对象数组",ConfigField.objectField("项目",
                    new ConfigBuilder()
                        .add.stringField("名称").defaultsTo("物品")
                        .add.numberField("数量").defaultsTo(1)
                        .build()
                )
            )
    );
}

}