Mod Menu позволяет просматривать установленные моды и, если это поддерживается модом, обеспечивает быстрый и легкий доступ к экранам конфигурации мода.
Mod Menu также поддерживает некоторые более продвинутые функции, такие как переводимые названия и описания модов, поддержка QuickText-форматирования в описаниях модов благодаря Patbox's Text Placeholder API, фильтрацию библиотечных модов от обычных, проверку обновлений модов для модов, размещенных на Modrinth или предоставляющих собственные источники обновлений, а также глубокую настройку всех предоставляемых функций.
Snapshot, Pre-release и RC версии
CurseForge больше не позволяет нам помечать эти версии тегами, что фактически препятствует их загрузке (если бы мы это сделали, то у пользователей возникли бы проблемы в модпаках). Если вы ищете ModMenu для каких-либо предварительных версий, пожалуйста, посетите Modrinth вместо CurseForge.
Поддерживаемые платформы
Mod Menu в настоящее время доступен для Fabric или Quilt на Minecraft: Java Edition 1.14 или новее.
Разработчикам
Mod Menu включает ряд API для разработчиков, позволяющих улучшить отображение их модов в Mod Menu. Они представлены в виде языковых ключей, JSON-метаданных и даже Java API.
Translation API
Вы можете перевести название, краткое описание и полное описание вашего мода, не касаясь Java-кода. Просто добавьте ключи перевода в поддерживаемом формате для любого нужного вам языка.
Документация Translation 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": "Menu o' mods ye installed matey!"Перевод краткого описания здесь избыточен и его можно не включать, так как он совпадает с полным описанием, но он был включен, чтобы показать, что вы можете переводить краткое описание (короткое описание мода в одно предложение) отдельно от полного описания, даже на английском!
Fabric Metadata 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 Metadata API
Значки ("badges": [ ])
В то время как значок Client добавляется автоматически для модов, предназначенных только для клиента (для этого установите "environment": "client" в fabric.mod.json), другие значки, такие как Library и Deprecated, требуют определения здесь.
Поддерживаемые значения:
library— следует назначать модам, которые являются чистыми зависимостями для других модов и не должны показываться пользователю по умолчанию, если только он не включит их отображение.deprecated— следует назначать модам, которые существуют исключительно по устаревшим причинам, например, старым модулям API.
Любые другие значения будут проигнорированы, и Mod Menu не поддерживает добавление собственных значков. Вы можете открыть вопрос здесь, если у вас есть веский вариант использования для нового значка.
Ссылки ("links": { })
Объект links позволяет авторам модов добавлять пользовательские гиперссылки в конец описания. Если вы укажете контакт sources в официальных метаданных fabric.mod.json, он также будет включен в раздел ссылок.
Любой ключ в объекте links будет включен в раздел ссылок, при этом ключ будет использоваться в качестве ключа перевода. Например, это:
fabric.mod.json
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "https://discord.gg/jEGF5fb"
}
}
}отобразится как ссылка с текстом "Discord", поскольку "Discord" — это английский перевод "modmenu.discord", предоставленный Mod Menu.
Mod Menu предоставляет несколько стандартных переводов, которые можно использовать для ссылок. Полный список можно увидеть в языковом файле Mod Menu здесь. Все ключи перевода ссылок по умолчанию имеют форму modmenu..
Вы также можете предоставить свои собственные переводы, если хотите добавить пользовательские ссылки. Убедитесь, что вы используете свое собственное пространство имен (в отличие от 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": "Fake Mod",
"description": "Do cool stuff with this fake mod",
"icon": "assets/real-mod/fake-mod-icon.png",
"badges": [ "library" ]
}
}
}Виртуальные родительские моды поддерживают только следующие метаданные:
id(String)name(String)description(String)icon(String)badges(Array of Strings)
Отключение проверки обновлений ("update_checker": false)
По умолчанию средство проверки обновлений Mod Menu будет использовать хеш вашего JAR-файла мода для поиска последней версии на Modrinth. Если он найдет соответствующий проект, он проверит последнюю версию, поддерживающую ваш загрузчик модов и версию Minecraft, и если ее хеш отличается от хеша вашего существующего файла, он предложит пользователю обновление.
Вы можете отключить проверку обновлений, установив для update_checker значение false в ваших метаданных Mod Menu следующим образом:
fabric.mod.json
"custom": {
"modmenu": {
"update_checker": false
}
}Quilt Metadata API
Поскольку Mod Menu также поддерживает Quilt, те же API, что и в разделе Fabric Metadata API, доступны и для модов Quilt, но формат пользовательских метаданных немного отличается.
Вместо блока "modmenu" внутри блока "custom" вы помещаете блок "modmenu" как элемент корневого объекта. Таким образом, это должно выглядеть так:
quilt.mod.json
{
...
"modmenu": {
// Здесь размещаются ваши ссылки, значки и т.д.
}
}Java API
Чтобы использовать Java API, вам нужно добавить Mod Menu как зависимость времени компиляции в ваш проект Gradle. Это не сделает ваш мод зависимым от Mod Menu, но он будет присутствовать в вашем окружении для тестирования.
build.gradle
// Добавьте репозиторий Maven Terraformers в ваш блок repositories
repositories {
maven {
name = "Terraformers"
url = "https://maven.terraformersmc.com/"
}
}
// Добавьте Mod Menu как зависимость в вашем окружении
dependencies {
// Для версий Minecraft до 26.x используйте "modImplementation"
implementation("com.terraformersmc:modmenu:${project.modmenu_version}")
}Затем определите версию Mod Menu, которую вы используете, в вашем gradle.properties. Вы можете получить последний номер версии здесь, но вам может понадобиться другая версия, если вы не используете последнюю версию 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 factory) для создания пользовательского экрана конфигурации, который будет открываться по кнопке конфигурации. Реализуйте метод getModConfigScreenFactory в вашей реализации API для этого.
Предполагаемое использование этого — предоставление модами собственных экранов конфигурации. ID мода для экрана конфигурации автоматически определяется по контейнеру исходного мода, из которого произошла точка входа.
Предоставленные экраны конфигурации
Моды могут предоставлять фабрики экранов для создания пользовательских экранов конфигурации, которые будут открываться по кнопкам конфигурации для других модов. Реализуйте метод getProvidedConfigScreenFactories в вашей реализации API для этого.
Предполагаемое использование этого — для таких модов, как Cloth Config, чтобы предоставлять экраны конфигурации для модов, использующих его API.
Значки модпаков
Моды могут присваивать другим модам значок Modpack, реализуя метод attachModpackBadges, например, следующим образом:
@Override
public void attachModpackBadges(Consumer consumer) {
consumer.accept("modmenu"); // Указывает, что 'modmenu' является частью модпака
} Обратите внимание, что 'внутренним' модам, таким как сам Minecraft и загрузчик модов, нельзя присвоить значок модпака, так как они не распространяются в составе типичного модпака.
Статические вспомогательные методы
ModMenuApi также предлагает несколько вспомогательных методов для модов, которые хотят лучше работать с Mod Menu, например, для создания собственных кнопок модов.
Создание экземпляра экрана модов
Вы можете вызвать этот метод, чтобы получить экземпляр экрана модов:
Screen createModsScreen(Screen previous)Создание текста Text для кнопки модов
Вы можете вызвать этот метод, чтобы получить текст, который будет отображаться на кнопке модов Mod Menu:
Text createModsButtonText()


