模组菜单

模组菜单

添加一个模组菜单来查看您已安装的模组列表。

杂项

模组界面截图

Mod Menu 让你查看已安装的模组,并在模组支持的情况下,提供快速、简便的配置界面访问。

Mod Menu 还支持一些高级功能,例如可翻译的模组名称和描述、借助 Patbox 的 Text Placeholder API 在模组描述中使用 QuickText 格式化、将库模组从普通模组中筛选出来、为托管在 Modrinth 或提供自己更新源的模组提供更新检查器,以及对我们提供的所有功能进行深度配置。

快照、预发行版和候选版

CurseForge 已不再允许我们标记这些版本,这实际上阻止了我们上传它们(如果上传,会导致用户的整合包出现问题……)。如果你在寻找任何预发行版的 Mod Menu,请前往 Modrinth 而不是 CurseForge。

支持平台

Mod Menu 当前适用于基于 Fabric 或 Quilt 的 Minecraft: Java Edition 1.14 或更新版本。

开发者

Mod Menu 包含一系列 API,供开发者改善其模组在 Mod Menu 中的显示效果。这些 API 以语言键、JSON 元数据甚至 Java API 的形式提供。

翻译 API

你可以在不接触任何 Java 代码的情况下,翻译你的模组名称、简介和描述。只需将支持的格式的翻译键添加到任意你想使用的语言中即可。

翻译 API 文档

以下是一个 Mod Menu 翻译成海盗语的示例。要创建你自己的翻译,只需将翻译键末尾(注意:不是开头的)的 modmenu 替换为你自己的模组 ID,例如 modmenu.descriptionTranslation.traverse。

en_pt.json

"modmenu.nameTranslation.modmenu": "Menu o' mods!",
"modmenu.descriptionTranslation.modmenu": "Menu o' mods ye installed matey!",
"modmenu.summaryTranslation.modmenu": "Summary o' mods ye installed matey!"

这里的简介翻译是多余的,不必包含,因为它与描述相同,但此处包含是为了展示你可以将简介(对模组的一句话简短描述)与描述分开翻译,即使在英语中也是如此!

Fabric 元数据 API

你可以通过在你的 fabric.mod.json 中添加元数据来实现许多功能。

所有这些都添加到你 fabric.mod.json 中的自定义块中,作为 Mod Menu 的元数据。以下是该 API 提供的许多功能的示例用法:

fabric.mod.json

{
  ...
  "custom": {
    "modmenu": {
      "links": {
        "modmenu.discord": "https://discord.gg/jEGF5fb"
      },
      "badges": [ "library", "deprecated" ],
      "parent": {
        "id": "example-api",
        "name": "Example API",
        "description": "Modular example library",
        "icon": "assets/example-api-module-v1/parent_icon.png",
        "badges": [ "library" ]
      },
      "update_checker": true
    }
  }
}

Fabric 元数据 API 文档

徽章("badges": [ ])

虽然 Client 徽章会为设置为仅客户端(在 fabric.mod.json 中设置 "environment": "client")的模组自动添加,但其他徽章(如 Library 和 Deprecated)需要在此处定义。

支持的值:

  • library —— 应分配给纯粹作为其他模组依赖项的模组,默认情况下不会向用户显示,除非用户主动开启。
  • deprecated —— 应分配给纯粹因历史遗留原因而存在的模组,例如旧的 API 模块等。

其他值将被忽略,且 Mod Menu 不支持添加自定义徽章。如果你有充分的理由需要新增徽章,可以在此处提交 issue。

链接("links": { })

links 对象允许模组作者在其描述末尾添加自定义超链接。如果你在官方的 fabric.mod.json 元数据中指定了 sources 联系方式,它也会被包含在链接区域中。

links 对象中的任何键都会被包含在链接区域中,该键将用作翻译键。例如:

fabric.mod.json

"custom": {
    "modmenu": {
        "links": {
          "modmenu.discord": "https://discord.gg/jEGF5fb"
        }
    }
}

将会显示为一个文本为 "Discord" 的链接,因为 "Discord" 是 Mod Menu 提供的 "modmenu.discord" 的英文翻译。

Mod Menu 提供了几个可用于链接的默认翻译。完整列表可以在 Mod Menu 的语言文件中查看。所有默认的链接翻译键的格式都是 modmenu.<type>。

如果你想添加自定义链接,也可以提供你自己的翻译。对于任何自定义键,请确保使用你自己的命名空间(而不是 modmenu)。

父级("parent": "mod_id" 或 { })

父级示例图片

父级用于将一个模组显示为另一个模组的子模组。这适用于被分成不同模块的模组。在 fabric.mod.json 中添加以下元素会将当前模组定义为模组 'flamingo' 的子模组:

fabric.mod.json

"custom": {
    "modmenu": {
        "parent": "flamingo"
    }
}

但是,如果你想将模组分组到一个父级下,但该父级并非一个实际模组,你也可以这样做。在下面的示例中,一个模组正在为其父级定义元数据。请确保所有使用该假/虚拟父级的子模组中都包含此元数据。这也可用作可选父级的后备方案,如果存在真实模组的元数据,则会被替换。

fabric.mod.json

"custom": {
    "modmenu": {
        "parent": {
            "id": "this-mod-isnt-real",
            "name": "Fake Mod",
            "description": "Do cool stuff with this fake mod",
            "icon": "assets/real-mod/fake-mod-icon.png",
            "badges": [ "library" ]
        }
    }
}

虚拟父级模组仅支持以下元数据:

  • id(字符串)
  • name(字符串)
  • description(字符串)
  • icon(字符串)
  • badges(字符串数组)

禁用更新检查器("update_checker": false)

默认情况下,Mod Menu 的更新检查器会使用你的模组 jar 文件的哈希值来查找 Modrinth 上的最新版本。如果找到匹配的项目,它将检查支持你的模组加载器和 Minecraft 版本的最新版本,如果该版本与你现有文件的哈希值不同,它将提示用户有可用的更新。

你可以通过在 Mod Menu 元数据中将 update_checker 设置为 false 来禁用更新检查器,如下所示:

fabric.mod.json

"custom": {
    "modmenu": {
        "update_checker": false
    }
}

Quilt 元数据 API

由于 Mod Menu 也支持 Quilt,上述 Fabric 元数据 API 中的相同 API 同样适用于 Quilt 模组,但自定义元数据的格式略有不同。

并非将 "modmenu" 块放在 "custom" 块内部,而是将 "modmenu" 块作为根对象中的一个元素放置。因此,它看起来应该像这样:

quilt.mod.json

{
  ...
  "modmenu": {
    // 此处放置你的链接、徽章等内容
  }
}

Java API

要使用 Java API,你需要将 Mod Menu 作为编译时依赖项添加到你的 gradle 项目中。这不会使你的模组依赖 Mod Menu,但它会存在于你的运行环境中供测试使用。

build.gradle

// 将 Terraformers maven 仓库添加到你的 repositories 块中
repositories {
  maven {
    name = "Terraformers"
    url = "https://maven.terraformersmc.com/"
  }
}

// 将 Mod Menu 作为依赖项添加到你的运行环境中
dependencies {
  // 在 Minecraft 26.x 之前,请使用 "modImplementation"
  implementation("com.terraformersmc:modmenu:${project.modmenu_version}")
}

然后,在你的 gradle.properties 中定义你使用的 Mod Menu 版本。你可以在此处获取最新的版本号,但如果你使用的不是最新的 Minecraft 版本,你可能需要一个不同的版本。请参阅版本页面获取完整的版本列表。

gradle.properties

modmenu_version=VERSION_NUMBER_HERE

如果你不想将其放入运行环境中测试,但仍希望针对 Mod Menu 进行编译以使用 Java API,你可以使用 modCompileOnly 代替 modImplementation(即使 Mod Menu 未更新到你正在运行的 Minecraft 版本,这也能工作)。

Java API 文档

入门指南

要使用 API,请在一个类上实现 ModMenuApi 接口,并将其作为类型为 "modmenu" 的入口点添加到你的 fabric.mod.json 中,如下所示:

fabric.mod.json

"entrypoints": {
  "modmenu": [ "com.example.mod.ExampleModMenuApiImpl" ]
}

模组配置界面

模组可以提供一个 Screen 工厂,用来提供自定义的配置界面,以便通过配置按钮打开。在你的 API 实现中实现 getModConfigScreenFactory 方法即可。

其预期用途是让模组提供自己的配置界面。配置界面的模组 ID 会自动从入口点来源的模组容器确定。

提供配置界面

模组也可以提供 Screen 工厂,为其他模组的配置按钮提供自定义配置界面。在你的 API 实现中实现 getProvidedConfigScreenFactories 方法即可。

其预期用途是让像 Cloth Config 这样的模组为使用其 API 的模组提供配置界面。

整合包徽章

模组可以通过实现 attachModpackBadges 方法来为其他模组添加 Modpack 徽章,例如通过以下方式:

@Override
public void attachModpackBadges(Consumer<String> consumer) {
    consumer.accept("modmenu"); // 指示 'modmenu' 是整合包的一部分
}

请注意,像 Minecraft 本身和模组加载器这样的“内部”模组不能被赋予整合包徽章,因为它们不会在典型的整合包中分发。

静态辅助方法

ModMenuApi 还为想要更好地与 Mod Menu 配合使用的模组提供了一些辅助方法,例如制作它们自己的模组按钮。

创建模组界面实例

你可以调用此方法来获取模组界面的实例:

Screen createModsScreen(Screen previous)

创建模组按钮的 Text

你可以调用此方法来获取将在 Mod Menu 模组按钮上显示的文本:

Text createModsButtonText()