Сегодня опять обзорный пост, пока я вожусь с рефакторингом)
Поговорить я бы хотел насчёт Gradle, инструмента для компиляции и сборки
.jar файлов. Если вы делаете моды или хотя бы смотрели исходники других проектов, то часто могли заметить там файлик вроде build.gradle или build.gradle.kts, это - скрипт сборки, который собирает файлы зависимостей и проекта(ов) в один архив .jar. И по сути это всё, конец, всем спасибо за внимание, пока!Ну, а если серьёзно, то за простой сборкой проекта кроется ещё тонна разных интересных задач, в рамках создания модов, самое простое, что можно вспомнить - это декомпиляция и деобфускация Minecraft для разработки, а также реобфускация вашего кода после компиляции (чтобы он работал с обфусцированным Minecraft). Также с его помощью, можно обрабатывать файлы в вашем проекте, например, часто в
mods.toml, название мода напрямую берётся из конфига, а не прописывается вручную (особенно в мультиплатформенных модах).В HollowEngine я использую несколько кастомных скриптов для Gradle с достаточно уникальным функционалом, который я пока не видел в других модах, так что хочу поделиться)
- Автоматическая генерация
mods.toml / neoforge.mods.toml / fabric.mod.json - Заполнять эти шаблоны под каждую версию и загрузчик было бы довольно неудобно, поэтому я создал скрипт, который автоматически создаёт эти файлы на основе параметров проекта!- Автоматическая генерация констант для всех ресурсов. Однажды я просто з**бался писать очередной раз
hollowengine:textures/gui/icons/[texture].png, и тогда я подумал, почему бы мне не генерировать класс со всеми такими ресурсами, тогда IDE всегда сможет мне подсказать все файлы в нужной папке. Идея получилась очень удобная и имеет куда больше возможностей, о которых я раньше не задумывался - теперь я сразу вижу, какие ассеты в моде не используются. А если я удалю ассет, который уже используется в движке - мод просто не скомпилируется. В особенности это важно, когда допустил опечатку в названии текстуры, потом её переименовал, но заменил не все места, где она использовалась.
- Ну и последняя фича, которую я ввёл буквально на днях, это аналогичный генератор для ключей перевода. По сути логика та же, что и писал выше, но его пока "не обкатал" 🙃
Но думаю аналогично, куда проще будет отслеживать мёртвые ключи, которые когда-то были в моде, а потом были из него удалены)
И благодаря Gradle это всё работает перед компиляцией, тем самым само обновляется при добавлении новых ресурсов и перекомпиляции проекта 🤔