- Версия(и) Minecraft
- 1.7.10/1.12.2
Штош, в данной теме хотелось бы представить вашему вниманию пару базовых сетапов воркспейса для разработки модов с Forge, для 1.7.10 и 1.12.2 соответственно. Идея их - расширить и исправить официальные аналоги, поставляемые Forge. На текущий момент они размещены в публичном доступе на Github, где я их, к тому же, периодически обновляю:
Для 1.7.10 (Github): Aizistral-Studios/ForgeWorkspaceSetup/1.7.10-standalone
Для 1.7.10 (Архив): [Скачать]
Для 1.12.2 (Github): Aizistral-Studios/ForgeWorkspaceSetup/1.12.2-standalone
Для 1.12.2 (Архив): [Скачать]
Если вы соизволите пройтись до репозитория и почитать англоязычный README-файлик интересующего вас сетапа, то в принципе вся остальная информация в этом подобии гайда вам не очень-то и нужна. Но если вы всё-таки не соизволите, или хочется побольше деталей - их я сейчас и попытаюсь изложить.
Облагороженная и исправленная версия последнего официального сетапа, скачать который можно тут. На текущий момент официальная версия более не работает в стандартной конфигурации, ввиду изменений на репозиториях Forge. Наша кастомная версия включает исправления этой самой конфигурации, и немного расширяет сам концепт.
Ещё одна облагороженная и исправленная версия, но уже для 1.12.2; последняя официальная версия - тут. Критических исправлений здесь не так густо, но без кастомного форка ForgeGradle уже не обошлось. Хотя в отличии от 1.7.10, 1.12.2 сейчас является основным приоритетом инициативы RetroGradle, направленной на поддержание работоспособности старых версий Forge (за дополнительной информацией - сюда), на фоне богатой истории косяков полагаться на ребят из кузни уже не особо хочется. Да и концепт всегда есть куда расширить.
Многим из вас, вероятно, уже доводилось сталкиваться с проблемами в работе последней официальной версии ForgeGradle 1.2. Если нет, можете почитать вот этот тред: Разобраться с forge
Пару примеров из собственной практики:
Причина у всех этих проблем одна - огромный болт, который Forge традиционно кладут на поддержку старых версий. Справедливости ради, их конечно тоже можно понять; да и с появлением инициативы RetroGradle появилась и надежда, что когда-то её длань дойдёт и до версии 1.7.10. Но так как всем нам нужно делать свою работу, и едва ли мы можем позволить себе сидеть сложа руки, блаженно предаваясь светлым надеждам - придётся как-то справляться с этим самим.
Используемый в 1.7.10 сетапе форк ForgeGradle, который я пассивно мейнтейню уже какое-то время, представляет собой одно из возможных решений. Поглядеть на него вы можете здесь: juanmuscaria/ForgeGradle
Так как пока он не имеет полноценной документации, ниже я перечислю его основные отличия от официальной версии:
Для 1.7.10 (Github): Aizistral-Studios/ForgeWorkspaceSetup/1.7.10-standalone
Для 1.7.10 (Архив): [Скачать]
Для 1.12.2 (Github): Aizistral-Studios/ForgeWorkspaceSetup/1.12.2-standalone
Для 1.12.2 (Архив): [Скачать]
Если вы соизволите пройтись до репозитория и почитать англоязычный README-файлик интересующего вас сетапа, то в принципе вся остальная информация в этом подобии гайда вам не очень-то и нужна. Но если вы всё-таки не соизволите, или хочется побольше деталей - их я сейчас и попытаюсь изложить.
Forge Workspace Setup: Standalone 1.7.10
Облагороженная и исправленная версия последнего официального сетапа, скачать который можно тут. На текущий момент официальная версия более не работает в стандартной конфигурации, ввиду изменений на репозиториях Forge. Наша кастомная версия включает исправления этой самой конфигурации, и немного расширяет сам концепт.Forge Workspace Setup: Standalone 1.7.10
Исправления:
Возьму на себя смелость предположить, что забредшие сюда души уже более-менее знакомы с процессом сетапа воркспейса с Forge, и не буду разжёвывать всё в мельчайших деталях. Однако, вот все основные шаги, которые вам нужно не забыть выполнить:
- Используется кастомная версия ForgeGradle. Обеспечивает компатибельность с Gradle 5.+, исправляет целый ряд багов и даже имеет дополнительные фичи. Подробнее о ней будет отдельно чуть ниже;
- Используется кастомный maven-репозиторий для подключения всех базовых зависимостей;
- Билдскрипт по дефолту устанавливает совместимость с Java 8 и
UTF-8
кодировку для всех файлов.
- По дефолту используется Gradle 5.6.4;
- Билдскрипт содержит таски для сборки
dev
иsources
артефактов мода, и автоматически выполняет их при выполнении командыgradlew build
; - Все данные в файле
mcmod.info
заполняются при копировании в процессе билдинга. Служит как демонстрация возможности расширения текстовых файлов при билдинге, а также в качестве примера объявления свойств вgradle.properties
; - Пример подключения другого мода в качестве зависимости к проекту, в виде локального файла.
- В главном классе создаётся базовый логгер;
- Включает пример регистрации
SimpleNetworkWrapper
'а, а также пример пакета, который сервер отсылает каждому клиенту при входе. При получении выводит сообщение в чат игроку, чисто чтобы показать, что пакет успешно достиг точки назначения; - Имеет единственный метод, взаимодействующий с Baubles -
BaublesHelper#hasEquipped
. Служит в качестве демонстрации что наш пример с зависимостью от локального модфайла, которым в данном случае является модфайл Baubles, действительно работает; - Версия мода в главном классе (
ExampleMod.VERSION
) определена как токен, который автоматически заменяется версией проекта при сборке; - Включает базовую реализацию
CommonProxy/ClientProxy
, которая также служит как пример имплементацииIGuiHandler
; - Включает базовый обработчик событий, с единственным ресивером для события
EntityJoinWorldEvent
; - Демонстрирует как создать файл конфигурации с использованием предоставляемой кузней
Configuration
; - Создаёт кастомную вкладку в креативном инвентаре.
Возьму на себя смелость предположить, что забредшие сюда души уже более-менее знакомы с процессом сетапа воркспейса с Forge, и не буду разжёвывать всё в мельчайших деталях. Однако, вот все основные шаги, которые вам нужно не забыть выполнить:
- Убедитесь что у вас установлена JDK 8 (не просто JRE), и что переменная
JAVA_HOME
задана в вашей системе, указывая на расположение этой самой JDK; - Скачайте сетап в качестве архива (клац), создайте папку, которая послужит воркспейсом для вашего конкретного мода, и распакуйте туда содержимое папки
ForgeWorkspaceSetup-1.7.10-standalone
из архива; - Откройте в этой папке командную строку, и выполните команду
gradlew setupDecompWorkspace
. По завершению выполните специфичную для вашей IDE команду, которая сгенирует проект под эту самую IDE -gradlew eclipse
илиgradlew idea
; - Если используете Eclipse, не забудьте что воркспейс нужно открыть выбрав папку
eclipse
внутри папки с воркспейсом в качестве расположения Eclipse-воркспейса. Если используете Idea... не знаю, вам виднее как быть; - Как будет нужда, используйте
gradlew build
для сборки .jar-файла с вашим модом. По завершению выполнения он очутится в папкеbuild/libs
вашего воркспейса.
Forge Workspace Setup: Standalone 1.12.2
Ещё одна облагороженная и исправленная версия, но уже для 1.12.2; последняя официальная версия - тут. Критических исправлений здесь не так густо, но без кастомного форка ForgeGradle уже не обошлось. Хотя в отличии от 1.7.10, 1.12.2 сейчас является основным приоритетом инициативы RetroGradle, направленной на поддержание работоспособности старых версий Forge (за дополнительной информацией - сюда), на фоне богатой истории косяков полагаться на ребят из кузни уже не особо хочется. Да и концепт всегда есть куда расширить.Forge Workspace Setup: Standalone 1.12.2
Фичи:
Возьму на себя смелость предположить, что забредшие сюда души уже более-менее знакомы с процессом сетапа воркспейса с Forge, и не буду разжёвывать всё в мельчайших деталях. Однако, вот все основные шаги, которые вам нужно не забыть выполнить:
- По дефолту используется Gradle 4.9.0;
- Используется кастомный форк ForgeGradle 2.3. Хотя ForgeGradle 3.+ уже частично поддерживает проекты на 1.12.2, в нём отсутствует враппер
GradleStart
, который на версиях 1.12.2 и ранее выполняет функции поиска и загрузки кормодов на classpath'е. Без него кормоды эффективно неспособны загружаться в среде разработки, что является критической проблемой для многих проектов; - По дефолту установлены маппинги
mcp_stable_39
, зарекомендовавшие себя как лучшее доступное для 1.12 издание; - Возвращена папка
eclipse
с её встроенным воркспейсом и конфигурациями запуска для Eclipse-проектов; - Установлена
UTF-8
кодировка для всех файлов; - Билдскрипт содержит таски для сборки
dev
иsources
артефактов мода, и автоматически выполняет их при выполнении командыgradlew build
; - Все данные в файле
mcmod.info
заполняются при копировании в процессе билдинга. Служит как демонстрация возможности расширения текстовых файлов при билдинге, а также в качестве примера объявления свойств вgradle.properties
; - Пример подключения другого мода в качестве зависимости к проекту, в виде локального файла.
- В главном классе создаётся базовый логгер;
- Включает пример регистрации
SimpleNetworkWrapper
'а, а также пример пакета, который сервер отсылает каждому клиенту при входе. При получении выводит сообщение в чат игроку, чисто чтобы показать, что пакет успешно достиг точки назначения; - Имеет единственный метод, взаимодействующий с Baubles -
BaublesHelper#hasEquipped
. Служит в качестве демонстрации что наш пример с зависимостью от локального модфайла, которым в данном случае является модфайл Baubles, действительно работает; - Версия мода в главном классе (
ExampleMod.VERSION
) определена как токен, который автоматически заменяется версией проекта при сборке; - Включает базовую реализацию
CommonProxy/ClientProxy
, которая также служит как пример имплементацииIGuiHandler
; - Включает базовый обработчик событий с парой ресиверов;
- Демонстрирует как создать файл конфигурации с использованием предоставляемой кузней
Configuration
; - Создаёт кастомную вкладку в креативном инвентаре.
Возьму на себя смелость предположить, что забредшие сюда души уже более-менее знакомы с процессом сетапа воркспейса с Forge, и не буду разжёвывать всё в мельчайших деталях. Однако, вот все основные шаги, которые вам нужно не забыть выполнить:
- Убедитесь что у вас установлена JDK 8 (не просто JRE), и что переменная
JAVA_HOME
задана в вашей системе, указывая на расположение этой самой JDK; - Скачайте сетап в качестве архива (клац), создайте папку, которая послужит воркспейсом для вашего конкретного мода, и распакуйте туда содержимое папки
ForgeWorkspaceSetup-1.12.2-standalone
из архива; - Откройте в этой папке командную строку, и выполните команду
gradlew setupDecompWorkspace
. По завершению выполните специфичную для вашей IDE команду, которая сгенирует проект под эту самую IDE -gradlew eclipse
илиgradlew idea
; - Если используете Eclipse, не забудьте что воркспейс нужно открыть выбрав папку
eclipse
внутри папки с воркспейсом в качестве расположения Eclipse-воркспейса. Если используете Idea... не знаю, вам виднее как быть; - Как будет нужда, используйте
gradlew build
для сборки .jar-файла с вашим модом. По завершению выполнения он очутится в папкеbuild/libs
вашего воркспейса.
Повесть о кастомных форках ForgeGradle:
Многим из вас, вероятно, уже доводилось сталкиваться с проблемами в работе последней официальной версии ForgeGradle 1.2. Если нет, можете почитать вот этот тред: Разобраться с forgeПовесть о кастомных форках ForgeGradle:
Пару примеров из собственной практики:
Причина у всех этих проблем одна - огромный болт, который Forge традиционно кладут на поддержку старых версий. Справедливости ради, их конечно тоже можно понять; да и с появлением инициативы RetroGradle появилась и надежда, что когда-то её длань дойдёт и до версии 1.7.10. Но так как всем нам нужно делать свою работу, и едва ли мы можем позволить себе сидеть сложа руки, блаженно предаваясь светлым надеждам - придётся как-то справляться с этим самим.
Используемый в 1.7.10 сетапе форк ForgeGradle, который я пассивно мейнтейню уже какое-то время, представляет собой одно из возможных решений. Поглядеть на него вы можете здесь: juanmuscaria/ForgeGradle
Так как пока он не имеет полноценной документации, ниже я перечислю его основные отличия от официальной версии:
- Внесён ряд изменений для совместимости с Gradle 5.+. К сожалению, ввиду этих изменений утрачена совместимость с граблями третьей и более ранних версий; но судя по тестам, с четвёртыми всё ещё работает исправно. Имейте ввиду, что Gradle 6.+ также не поддерживается;
- Исправлены встроенные ссылки на ряд репозиториев и артефактов, из-за которых в некоторых случаях фейлился сетап проекта (как на скринах выше);
- Исправлен нерабочий линк на
versions.json
при проверке маппингов, и добавлен репозиторий MCP Archive для обеспечения их доступности в будущем; - Слегка костыльные поправки, вносимые в файл
.classpath
при генерации Eclipse-проекта. Исправляет проблемы с дубликацией указаний путей к папкам исходников/ресурсов; - Кэш ресурсов и скомпилированных классов чистится перед каждой компиляцией. Исправляет "застревание" удалённых классов и замещённых токенов при билдинге;
- Используется исправленная версия jAstyle, устраняющая проблему с избыточными табами в статических внутренних классах;
- Привязываемые к рекомпилированному артефакту со сплавленным кодом Minecraft/Forge исходники форматируются в соответствии с Java-конвенциями (а не C#-конвенциями, как раньше).
- Исправлен нерабочий линк на
versions.json
при проверке маппингов, и добавлен репозиторий MCP Archive для обеспечения их доступности в будущем; - Убрано предупреждение об использовании устаревшей версии ForgeGradle с просьбой мигрировать на ForgeGradle 5 (так как ни одна версия FG выше второй до сих пор не имеет полной совместимости с 1.12);
- Исправлено предупреждение вида
"This mapping stable_39 was designed for MC 1.12! Use at your own peril"
в случае маппингов для 1.12, так как все версии маппингов доступные на 1.12.2 имеют целевую версию 1.12; - Убрана автогенерация
.launch
-конфигураций при выполнении таскаgradlew eclipse
, так как необходимость в них устраняется присутствием папкиeclipse
в сетапе.