基本信息
我的世界Java版本
平台
运行环境
其他链接
搬运团队
详情信息
模组菜单
模组菜单允许您查看已安装的模组,如果模组支持,还可以快速轻松地访问模组的配置屏幕。
模组菜单还支持一些更高级的功能,例如可翻译的模组名称和描述,由于Patbox的文本占位符 API,在模组描述中支持QuickText 格式,从常规模组中筛选出库模组,为托管在 Modrinth 上或提供自己更新源的模组提供模组更新检查器,以及为我们提供的所有功能进行深度配置。
支持的平台
模组菜单目前可用于《我的世界:Java 版》1.14 或更高版本的 Fabric 或 Quilt。
开发者
模组菜单为开发者提供了许多 API,以改善他们的模组在模组菜单中的显示方式。这些以语言键、JSON 元数据甚至 Java API 的形式出现。
翻译 API
您可以在不触及任何 Java 代码的情况下翻译您的模组的名称、摘要和描述。只需以支持的格式将翻译键添加到您想要的任何语言中。
翻译 API 文档
这是模组菜单翻译成海盗语的一个示例。要创建您自己的翻译,只需将翻译键末尾的modmenu
(不是开头的那个)替换为您自己的模组 ID,例如modmenu.descriptionTranslation.traverse
。
en_pt.json
"modmenu.nameTranslation.modmenu": "菜单 o' 模组!",
"modmenu.descriptionTranslation.modmenu": "菜单 o' 模组 ye 安装 matey!",
"modmenu.summaryTranslation.modmenu": "菜单 o' 模组 ye 安装 matey!"
这里的摘要翻译是多余的,不需要包含,因为它与描述相同,但它被包含是为了表明您可以将摘要(模组的简短的一句话描述)与描述分开翻译,即使是在英语中!
Fabric 元数据 API
您可以在fabric.mod.json
中的元数据中添加许多内容。
所有这些都添加到fabric.mod.json
中为模组菜单的元数据的自定义块中。这是此 API 提供的许多功能的示例用法:
fabric.mod.json
{
...
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "https://discord.gg/jEGF5fb"
},
"badges": [ "library", "deprecated" ],
"parent": {
"id": "example-api",
"name": "示例 API",
"description": "模块化示例库",
"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 模块等。
任何其他值将被忽略,并且模组菜单不支持添加您自己的徽章。如果您有一个令人信服的新徽章用例,您可以在此处打开一个问题。
链接("links": { }
)
links
对象允许模组作者在其描述的末尾添加自定义超链接。如果您在官方的fabric.mod.json
元数据中指定了sources
联系人,它也将包含在链接部分中。
links
对象中的任何键都将包含在链接部分中,键将用作翻译键。例如,这个:
fabric.mod.json
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "https://discord.gg/jEGF5fb"
}
}
}
将显示为一个带有文本“Discord”的链接,因为“Discord”是模组菜单提供的“modmenu.discord”的英语翻译。
模组菜单提供了几个可用于链接的默认翻译。完整列表可以在模组菜单的语言文件这里中看到。所有默认链接翻译键都采用modmenu.<type>
的形式。
如果您想添加自定义链接,也可以提供自己的翻译。确保为任何自定义键使用您自己的命名空间(而不是modmenu
)。
父模组("parent": "mod_id" or { }
)
父模组用于将一个模组显示为另一个模组的子模组。这意味着用于将模组分为不同的模块。以下在fabric.mod.json
中的元素将定义模组为'flamingo'模组的子模组:
fabric.mod.json
"custom": {
"modmenu": {
"parent": "flamingo"
}
}
但是,如果您想将模组分组在一个父模组下,但父模组不是实际的模组,您也可以这样做。在下面的示例中,一个模组正在为父模组定义元数据。确保此元数据包含在使用该假/虚拟父模组的所有子模组中。这也可以用作可选父模组的回退,如果存在模组的实际元数据,它将被替换。
fabric.mod.json
"custom": {
"modmenu": {
"parent": {
"id": "this-mod-isnt-real",
"name": "虚拟模组",
"description": "使用这个虚拟模组做很酷的事情",
"icon": "assets/real-mod/fake-mod-icon.png",
"badges": [ "library" ]
}
}
}
虚拟父模组仅支持以下元数据:
id
(字符串)name
(字符串)description
(字符串)icon
(字符串)badges
(字符串数组)
禁用更新检查器("update_checker": false
)
默认情况下,模组菜单的更新检查器将使用您的模组的 jar 文件的哈希值在 Modrinth 上查找最新版本。如果它找到匹配的项目,它将检查支持您的模组加载器和《我的世界》版本的最新版本,如果它的哈希值与您现有的文件不同,它将提示用户有可用的更新。
您可以通过在您的模组菜单元数据中像这样将update_checker
设置为false
来禁用更新检查器:
fabric.mod.json
"custom": {
"modmenu": {
"update_checker": false
}
}
Quilt 元数据 API
由于模组菜单也支持 Quilt,Fabric 元数据 API 部分中的相同 API 也可用于 Quilt 模组,但自定义元数据的格式略有不同。
不是在"custom"
块内的"modmenu"
块,而是将"modmenu"
块作为根对象中的元素。所以它应该看起来像:
quilt.mod.json
{
...
"modmenu": {
// 这里是您的链接、徽章等内容的位置
}
}
Java API
要使用 Java API,您需要在您的 gradle 项目中将模组菜单作为编译时依赖项添加。这不会使您的模组需要模组菜单,但它将在您的环境中供您进行测试。
build.gradle
// 将 Terraformers maven 仓库添加到您的 repositories 块中
repositories {
maven {
name = "Terraformers"
url = "https://maven.terraformersmc.com/"
}
}
// 在您的环境中添加模组菜单作为依赖项
dependencies {
modImplementation("com.terraformersmc:modmenu:${project.modmenu_version}")
}
然后,在您的gradle.properties
中定义您正在使用的模组菜单的版本。您可以在这里获得最新的版本号,但如果您没有使用最新的《我的世界》版本,您可能需要不同的版本。有关版本的完整列表,请参阅版本页面。
gradle.properties
modmenu_version=VERSION_NUMBER_HERE
如果您不想在测试环境中使用它,但仍然想针对模组菜单进行编译以使用 Java API,您可以使用
modCompileOnly
而不是modImplementation
(即使模组菜单未更新到您正在运行的《我的世界》版本,这也将起作用)。
Java API 文档
入门
要使用该 API,在一个类上实现ModMenuApi
接口,并将其作为"modmenu"类型的入口点添加到您的fabric.mod.json
中,如下所示:
fabric.mod.json
"entrypoints": {
"modmenu": [ "com.example.mod.ExampleModMenuApiImpl" ]
}
模组配置屏幕
模组可以提供一个屏幕工厂,以提供一个自定义的配置屏幕,通过配置按钮打开。在您的 API 实现中实现getModConfigScreenFactory
方法来实现此目的。
此功能的预期用例是为模组提供自己的配置屏幕。配置屏幕的模组 ID 由入口点起源的源模组容器自动确定。
提供的配置屏幕
模组可以提供屏幕工厂,为其他模组提供通过配置按钮打开的自定义配置屏幕。在您的 API 实现中实现getProvidedConfigScreenFactories
方法来实现此目的。
此功能的预期用例是像 Cloth Config 这样的模组为使用其 API 的模组提供配置屏幕。
模组包徽章
模组可以通过实现attachModpackBadges
方法为其他模组赋予Modpack
徽章,例如通过以下方式:
@Override
public void attachModpackBadges(Consumer<String> consumer) {
consumer.accept("modmenu"); // 表示'modmenu'是模组包的一部分
}
请注意,像《我的世界》本身和模组加载器这样的“内部”模组不能被赋予模组包徽章,因为它们不是在典型的模组包中分发的。
静态辅助方法
ModMenuApi
还为想要更好地与模组菜单配合使用的模组提供了一些辅助方法,例如制作自己的模组按钮。
创建一个模组屏幕实例
您可以调用此方法来获取模组屏幕的实例:
Screen createModsScreen(Screen previous)
创建一个模组按钮Text
您可以调用此方法来获取将在模组菜单模组按钮上显示的文本:
Text createModsButtonText()