Forge-воркспейс для разработки модов на 1.7.10/1.12.2

Forge-воркспейс для разработки модов на 1.7.10/1.12.2

Версия(и) 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 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;
  • Пример подключения другого мода в качестве зависимости к проекту, в виде локального файла.
Облагороженный ExampleMod:
  • В главном классе создаётся базовый логгер;
  • Включает пример регистрации 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 (за дополнительной информацией - сюда), на фоне богатой истории косяков полагаться на ребят из кузни уже не особо хочется. Да и концепт всегда есть куда расширить.

Фичи:
  • По дефолту используется 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;
  • Пример подключения другого мода в качестве зависимости к проекту, в виде локального файла.
Облагороженный ExampleMod:
  • В главном классе создаётся базовый логгер;
  • Включает пример регистрации 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

Пару примеров из собственной практики:
1626709300734.png

1626709253247.png


Причина у всех этих проблем одна - огромный болт, который 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#-конвенциями, как раньше).
Что касается 1.12 и используемого там ForgeGradle 2.3 - до недавних пор я надеялся, что хотя бы его форкать не придётся. Однако, на фоне отключения MCPBot'а там возникла та же проблема при подключении кастомных маппингов что и с FG 1.2, и на момент внесения последних поправок в данную статью она до сих пор не исправлена. Кроме того, есть ещё несколько изменений, которые хотелось внести туда с самого начала. Конкретный список текущих отличий приведён ниже:
  • Исправлен нерабочий линк на 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 в сетапе.
Автор
Aizistral
Просмотры
11,709
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Aizistral

Последние обновления

  1. Обновление ссылок на репозиторий и архивы

    В связи с переходом репозитория ForgeWorkspaceSetup из владения огранизации CrucibleMC во...
  2. Неполадки в работе jcenter

    Последние несколько дней jcenter.bintray.com периодически тильтует, в результате чего вы могли...
  3. Исправление отвала MCP-маппингов

    С радостью сообщаю, что проблемы описанные в предыдущем обновлении (Отвал MCP-маппингов) были...
Назад
Сверху