Пишем моды для minecraft — статья 1
И здравствуйте, уважаемые.
С вами ZigTheHedge и, по вашим просьбам, я попробую начать серию уроков по созданию модов под minecraft forge для версии 1.12.2. Сразу хочу обратить внимание, что под 1.13 и 1.14 общая концепция остается той же, однако очень многое поменялось как в самом майнкрафте, так и в forge. Возможно, было бы логичнее сразу делать руководство на 1.14, однако, у меня самого еще не дошли руки изучить все изменения, которые появились в 27-ой версии forge.
Чтож, начну с общей информации, которая просто крайне необходима для того, чтобы начать моддинг.
— Во-первых: minecraft java-edition (а это именно тот майнкрафт, в который мы с вами играем) официально не имеет поддержки модов. Вы, конечно, можете изменить модели любого блока, текстуры, звуки, даже рецепты и списки дропов с мобов и лута в данжах, однако, на этом возможности расширения ваниллы заканчиваются.
— Что же делать, если вы хотите, скажем, добавить какой-то блок (будь то строительный блок, или какая-нибудь модная быстрая печка), предмет, моба или даже собственное измерение в майнкрафт? Вам придется дополнить сам майнкрафт при помощи одного из API. API - это библиотека инструментов, которые позволяют делать с майнкрафтом все, что в голову взбредет. На данный момент существуют несколько вариантов этого самого API. Одним из старейших является Forge. И именно используя возможности Forge мы будем учиться писать моды в этом руководстве.
— Minecraft java-edition, как видно из названия, написан на языке программирования Java. И, что логично, Forge так же написан на Java. Угадайте, на каком языке программирования нам придется писать моды? Верно! На Java! (по совести сказать, помимо Java можно так же использовать Scala, который является родственным для Java языком, и даже работает в той же "виртуальной машине", но это уже детали, обсуждение которых выходит за пределы этого руководства) И, сразу скажу, чтобы начать писать моды, вам придется худо-бедно знать Java. В этом я вам не помогу, но существует куча учебников, самоучителей и руководств, к которым вам просто необходимо будет обратиться ПЕРЕД тем, как пытаться начать писать мод. С другой стороны, если вы умеете писать, скажем, на C#, привыкнуть к Java будет легко. Да и вообще, если вы хотя бы раз писали на Си-подобных языках, и знаете, что такое Объектно-Ориентированное Программирование (ООП), вам будет несложно. Конечно, некоторые моменты специфичны для Java, но структура языка процентов на 80 совпадает с Си++. Я вообще отношусь к Java (и к C#) как к Си++ для лентяев, так как вам не придется следить за освобождением выделенной памяти. За вас все сделает магический процесс под названием Garbage Collector (он же "сборщик мусора", он же GC).
— Для разработки модов не нужна лицензия майнкрафта! И никаких пиратских лаунчеров тоже не нужно! При должном рвении и желании, вы сможете даже запустить полноценную сборку со своим модом прямо из среды разработки.
Окей, с основными моментами, вроде, разобрались. Теперь давайте определим, что нам нужно для того, чтобы начать писать мод:
— Библиотеки для java-разработки:
Учитывая, что мы с вами будем не просто использовать уже готовые программы, но и писать свои, нам понадобится набор для разработки на JAVA. Называется этот набор JDK (Java Development Kit - набор Java-разработчика). Это бесплатный набор программ и библиотек для того, чтобы превратить ваш исходный код на java в бинарный файл, который и представляет собой мод. Когда будете скачивать, выбирайте архитектуру, которая соответствует вашей операционной системе. Например, если у вас 64-битная операционная система, скачивайте 64-битный JDK. Скачать JDK для Windows, Mac OS и Linux можно по ссылке: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Обратите внимание! Если вы думаете, что у вас уже установлена Java, и этого достаточно, то вы на 99% ошибаетесь! Так как для работы уже готовых программ на java (наример, того же майнкрафта) достаточно JRE (Java Runtime Environment - среда запуска Java-приложений), а вот для разработки, нужен именно JDK.
— Удобная среда разработки.
Конечно, можно писать моды в "блокноте". Ведь, в конце-концов, код - это просто текстовый документ. Но если, скажем, писать веб-странички, или скрипты для OpenComputers, или в принципе какие-то несложные проекты, которые состоят из одного-двух файлов, можно хоть на листике бумаги, то любой мало-мальски сложный проект (а моды относятся к "сложным" проектам) лучше в специальной среде разработки, которая называется IDE (Integrated Development Environment - интегрированная среда разработки). Это избавит вас от необходимости помнить, какой из сотен тысяч классов предоставляет какие методы, и какие параметры, в какой последовательности, и каких типов должны быть в этот метод переданы. И, конечно же, не стоит забывать про отладку и подсветку синтаксиса. Выбор среды разработки - дело вкуса. У всех есть свои плюсы и минусы, так что, выбирайте, какая понравится. Я использую бесплатную IDE от JetBrains под названием IntelliJ IDEA Community Edition. Главное, не перепутайте. У JetBrains есть и платная версия IDE, функционал которой не понадобится для написания модов под майнкрафт. Существуют версии под Windows, Mac OS и Linux, так что - вы сможете разрабатывать на своей привычной платформе. Скачать IDEA можно по ссылке: https://www.jetbrains.com/idea/download/
— Создайте отдельный каталог подо все свои проекты.
Учитывая, что мод представляет собой набор файлов и каталогов, крайне не рекомендую держать все это добро где-нибудь на "рабочем столе". Создайте себе отдельный каталог, назовите его каким-нибудь понятным именем (Например, каталог на диске D: с именем Development), и приучите себя держать все разрабатываемые моды в одном месте. Поверьте, так будет проще. Единственное: озаботьтесь заранее тем, чтобы в пути к вашему моду, не было русских символов! Особенно, если у вас Windows. Я не буду сейчас плевать кислотой в сторону Microsoft, но просто последуйте этому совету - таким образом вы избавите себя от потенциальных проблем, которые чертовски сложно обнаружить.
— Освободите около 10 гигабайт.
При установке всего великолепия, необходимого для нормальной работы Forge в среде разработки, системе понадобится место для хранения общего кеша данных из репозиториев. Если вы используете Windows, место необходимо на системном разделе (диске, где установлена операционная система, как правило это диск C:). Если вы используете Mac OS или Linux, свободное место необходимо обеспечить в /home-разделе пользователя.
— Скачайте набор для разработки модов.
Ну вот теперь мы от общих шагов для начала разработки на java подошли к конкретике, необходимой именно для написания модов для майнкрафта. Чтобы начать писать мод, нам необходим "набор мододела" от Forge - он же MDK (Mod Development Kit). Скачать его можно там же, где и всем привычный Forge. То-есть, по ссылке: https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.12.2.html
Выбирайте MDK в списке ссылок под желаемую версию Forge.
Кстати, пара слов о версиях Forge: чем новее версия - тем больше возможностей для моддинга вам открывается! Но есть и обратная сторона медали: чтобы ваш мод заработал у игроков, их версия Forge должна быть НЕ НИЖЕ той, которую вы используете для разработки. А, хотя Forge разрабатывает очень талантливая команда, от багов на 100% не застрахован никто. Поэтому, не спешите ставить самую последнюю версию. Лучше взять ту, которая помечена как "релиз" - то-есть, протестирована временем на отсутствие багов. В любом случае, если вы не бородатый мододел, вы с 99% вероятностью не будете использовать новые возможности свежих версий Forge.
— Установка
Теперь у вас есть все необходимое для начала разработки мода. Осталось только все это правильно установить. Порядок установки следующий:
1. Установите JDK. Куда вы его установите не имеет большого значения.
2. Установите IDE.
3. В каталоге для разработки, создайте еще один каталог с "техническим именем" вашего мода (ВНИМАНИЕ! Пробелы в "техническом имени" мода не допускаются!). Мы с вами будем создавать мод под названием "tutorial", так что, создайте каталог "tutorial" в каталоге "D:\Development" (или где вы там создали каталог для проектов, ась?).
Кстати, пару слов о пробелах и национальных символах: При любой разработке просто забудьте о существовании пробелов и о существовании какого-либо алфавита, кроме латинского. Ни в именах файлов, ни в названиях функций и переменных, нигде, кроме описательной информации, не должно быть пробелов и не должно быть любых букв не из латинского алфавита. Если плохо знаете английский, воспользуйтесь транслитом, если хотите сделать код более читаемым, используйте snake_case или CamelCase чтобы заменить пробелы. Более подробно о snake_case и CamelCase можно почитать здесь: https://ru.wikipedia.org/wiki/Snake_case и https://ru.wikipedia.org/wiki/CamelCase
4. Распакуйте содержимое архива с MDK в только что созданный каталог "tutorial".
5. Найдите файл build.gradle в каталоге "tutorial" и отредактируйте его следующим образом:
— В строке "version" укажите версию мода. Допустим, "1.0"
— В строке "group" укажите обратную нотацию вашего доменного имени (если оно у вас есть) плюс техническое имя мода через точку. Например, "com.cwelth.tutorial". Если у вас нет своего доменного имени, укажите здесь свой ник с приставкой региона, например "ru.zigthehedge.tutorial".
- В строке "archivesBaseName" укажите техническое имя мода. В нашем случае "tutorial".
6. В распакованном MDK вы так же найдете каталог src. В нем содержится самый базовый мод, который ничего не делает, но работает. Первым делом, советую вам переименовать этот каталог во что-нибудь понятное, чтобы, в случае необходимости, вы знали, как правильно должен быть структурирован мод. Давайте переименуем в "src_original". А теперь нам придется создать необходимую структуру каталогов самостоятельно. Нужно это для того, чтобы вы запомнили, как, что, где и зачем создается. Итак, создайте следующее дерево каталогов внутри нашего "tutorial":
src
|--- main
| |------ java
| | |--------- ru (префикс региона, как указано в build.gradle)
| | | |------------ zigthehedge (или что вы там указали в build.gradle в качестве домена)
| | | | |--------------- tutorial (техническое имя мода)
| |------ resources
Если не уверены, что все сделали правильно, перепроверьте по структуре из src_original.
7. Запустите командную строку (Пуск -> Выполнить -> cmd), если вы пользователь Windows, Terminal — для Mac OS, любимый шелл — для Linux.
8. Перейдите в командной строке в каталог с модом:
Для Windows:
> D: (сменить диск)
> cd Development\tutorial (сменить каталог)
Для Mac OS и Linux, думаю, разберетесь сами ;)
9. Запустите Gradle. В двух словах, Gradle - это универсальный механизм для разработки на Java. Он позволяет автоматизировать очень многие задачи, и всю "грязную работу" делает за вас. Вам нужно запомнить лишь пару аргументов, когда будете писать моды.
Для Windows:
> gradlew setupDecompWorkspace
Для Mac OS и Linux:
$ ./gradlew setupDecompWorkspace (возможно, потребуется повышение привелегий до super-user)
Выполнение этой команды затянется минут на 10, в зависимости от скорости вашего интернета и отзывчивости компьютера в целом, так как мы попросили Gradle скачать майнкрафт и Forge, скачать все библиотеки, от которых они зависят, декомпилировать майнкрафт и переименовать классы, методы и переменные согласно указанному маппингу (соответствие ужасных названий, полученных при декомпиляции майнкрафта с человеческими названиями). По окончании выполнения вы должны увидеть надпись "BUILD SUCCESSFUL".
10. Если вы выбрали IDEA, то пришло время ее запустить. На главном экране IDEA, выберите "Import project..." и укажите на файл build.gradle, который расположен в каталоге с модом. Если вы выбрали другую IDE, обратитесь к документации по этой IDE, каким образом импортировать gradle-проект.
11. После загрузки проекта в IDE, сохраните его и закройте IDE. Вернитесь в командную строку и выполните команду (если у вас IDEA):
Для Windows:
> gradlew genIntellijRuns
Для Mac OS и Linux
$ ./gradlew genIntellijRuns
Команда может выдать различные простыни ошибок. Если это произошло, вам придется выполнить следующее:
- запустите IDEA (у вас автоматически загрузится последний открытый проект)
- под главным меню справа сверху найдите иконку молотка и выпадающий список с надписью "Add configuration..." либо "Edit configurations...". Нажмите на эту надпись.
- в открывшемся окне нажмите на иконку "плюса" слева вверху и из выпавшего списка выберите "Application"
- В поле "Name" напишите "Minecraft Client", в "Main Class" напишите "GradleStart", в "Use classpath of module" выберите "название_вашего_мода.main" (в нашем случае, "tutorial.main"). Нажмите "Apply". Теперь эту же процедуру необходимо повторить для серверной части:
- Нажмите на иконку "плюса" слева вверху и из выпавшего списка выберите "Application"
- В поле "Name" напишите "Minecraft Server", в "Main Class" напишите "GradleStartServer", в "Use classpath of module" выберите "название_вашего_мода.main" (в нашем случае, "tutorial.main"). Нажмите "Ok".
Поздравляю! Вы только что руками проделали те шаги, которые должен был сделать Gradle, но не смог. А не смог, скорее всего, из-за того, что у вас слишком новая версия IDEA.
Автоматически или нет, но после шага 11 у вас справа сверху рядом с иконкой молоточка, в выпадающем списке должны появиться две строки: "Minecraft Client" и "Minecraft Server". Если вы их там нашли, значит вы все сделали правильно, и вообще - вы молодец! Но это, к сожалению, только начало.
На этом моменте, я завершаю первую статью. Очень хочу увидеть комментарии по поводу этой статьи: насколько понятен такой формат? Не пропало ли желание после вводной статьи заниматься мододельством? Ну и слова благодарности, разумеется, тоже :)
