Итак. Запустилось, работает? Отлично. Идём дальше. Тут мы разберём как настроить свой мод, его версию, описание, имя, постер и т.д. Настройка мода, возможно, не самая интересная часть, но теперь вы сможете лично увидеть отклик игры на ваши действия, а это не может не радовать!
Mods.toml
Так как это файл в формате toml, то можете установить специальный плагин для работы с этими файлами. Но это не обязательно, ведь его откроет любой текстовик.
Итак. Mods.toml содержит основную информацию связанную с модом. Помимо него есть пара других файлов, но тут самое интересное. Для начала приберемся. Предлагаю убрать комментарии, так как их тут больше, чем самого кода:
Как мы могли заметить, есть обязательные поля с пометкой mandatory, и есть не обязательные optional.
Разбираем Mods.toml
modLoader=»javafml» #mandatory – отображает какой загрузчик модов мы используем. Это поле трогать не нужно.
loaderVersion=»[37,)» это промежуток совместимых версий загрузчика модов. Т.к. у нас Forge, то и указана его версия:
license=»All rights reserved» – отображает лицензию, под которой распространяется мод. Тут можно найти варианты. А для меня тут выбор очевиден, это будет MIT License.
Скрытая комментарием строка: #issueTrackerURL=»https://change.me.to.your.issue.tracker.example.invalid/» #optional является опциональной и должна представлять ссылку на ресурс, где с вами можно связаться по поводу ошибок/багов. У меня такого нет, так что просто удаляю.
Далее идёт обязательный блок [[mods]]. Его не трогаем, а вот после него идут уже строки с данными мода.
modId=»examplemod» – это id для мода, к которому и будет привязан этот файл. Выбирайте с умом, так как дальше MODID будет использоваться очень часто, и он должен быть уникальным.
version=»${file.jarVersion}» #mandatory – оставляем как есть. Эта конструкция означает, что версия будет взята из build.gradle. Так удобнее, ведь не нужно будет менять версию в двух местах.
displayName=»Example Mod» #mandatory – отображаемое имя мода (уже видели в игре).
#updateJSONURL=»https://change.me.example.invalid/updates.json» #optional – ещё одна опциональная строка со ссылкой на json файл для проверки на наличие новых версий вашего мода.
#displayURL=»https://change.me.to.your.mods.homepage.example.invalid/» #optional – ссылка домашней странички мода (или иного вашего ресурса).
Оба этих поля я пока убираю, они опциональны и мне сейчас не нужны.
logoFile=»examplemod.png» #optional – хранит имя файла, который будет логотипом мода в игре. Опционально, но рекомендую сделать. Картинку нужно закинуть прямо в папку resources.
credits=»Thanks for this example mod goes to Java» #optional – строка для упоминания всяких важностей, не обязательная.
authors=»Love, Cheese and small house plants» #optional – строка с авторами мода, не обязательная.
description=»’
This is a long form description of the mod. You can write whatever you want here
Have ещё текст…
»’ – а этот текст – описание. Как видите, можно использовать и многострочный вариант строки.
И завершают этот файл две зависимости: forge и сама игра.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[[dependencies.examplemod]] #optional modId="forge" #mandatory mandatory=true #mandatory versionRange="[37,)" #mandatory ordering="NONE" side="BOTH" [[dependencies.examplemod]] modId="minecraft" mandatory=true versionRange="[1.17.1,1.18)" ordering="NONE" side="BOTH" |
Тут тоже есть свои modId требуемых модов, обязательные ли они, подходящие версии, сторона, где должен присутствовать мод (BOTH обе, CLIENT/SERVER соответственно) и порядок загрузки. Тут ничего не трогаем, оставляем как есть.
Редактируем поля в соответствии с личными пожеланиями, но не забываем, что [[dependencies.examplemod]] надо заменить на [[dependencies.ваш_modid]].
Результат мой таков:
Build.gradle
Тут лежит больше связанной со сборкой проекта информации и манифест. Манифест — это своего рода паспорт мода (приложения), который сообщает системе определённую информацию о нём. Большая часть файла нас и не интересует, там уже указаны необходимые плагины и параметры. Но нужно отредактировать некоторые из них.
Для начала ищем этот кусочек:
1 2 3 |
version = '1.0' group = 'com.yourname.modid' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'modid' |
И меняем на что-то своё:
1 2 3 |
ersion = '1.0' group = 'dev.astler.gsmod' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'modid' |
Кстати, перейдя по ссылке из комментариев можно узнать больше о правильном нейминге.
И теперь при помощи Ctrl + R ищем все examplemod и заменяем их на свой (у меня gsmod):
И последним открываем ExampleMod.java. Уже видите, что надо изменить?)
Отлично. Можно запускать.
Результат
Вообще всё работает, но что-то с версией непонятный прикол. Не совсем понял, что стряслось, т.к. в предыдущих версиях Forge этот же вариант отрабатывал нормально вроде. При этом былой фикс тоже больше не работает.
Но сейчас это не критично, возможно баг или изменили что-то немного сильнее, чем я заметил. Если найду причину, то исправлю обязательно и допишу тут.
Возможно в вашем билде проблем уже не будет 😊
Cписок всех уроков: Создание модов для Minecraft 1.15-1.17 [Forge/Fabric]
Исходный код проекта на Github