buildscript { repositories { // Эти репозитории предназначены только для Gradle-плагинов, другие репозитории размещайте в блоке ниже maven { url = 'https://repo.spongepowered.org/repository/maven-public/' } mavenCentral() } dependencies { // После удаления Mixin здесь больше не требуется зависимостей classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' } } plugins { id 'eclipse' id 'idea' id 'net.minecraftforge.gradle' version '[6.0.16,6.2)' } apply plugin: 'org.spongepowered.mixin' group = mod_group_id version = mod_version base { archivesName = mod_id } java { toolchain.languageVersion = JavaLanguageVersion.of(17) } minecraft { // Маппинги могут быть изменены в любое время и должны быть в следующем формате. // Канал: Версия: // official MCVersion Официальные имена полей/методов из файлов маппингов Mojang // parchment YYYY.MM.DD-MCVersion Открытые имена параметров и javadocs, созданные сообществом, на основе official // Вы должны быть в курсе лицензии Mojang при использовании 'official' или 'parchment' маппингов. // Дополнительная информация здесь: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md // Parchment — неофициальный проект, поддерживаемый ParchmentMC, отдельный от MinecraftForge // Дополнительная настройка необходима для использования их маппингов: https://parchmentmc.org/docs/getting-started // Используйте неофициальные маппинги на свой риск. Они могут не всегда работать. // Просто повторно запустите задачу настройки после изменения маппингов для обновления рабочей области. mappings channel: mapping_channel, version: mapping_version // Когда true, это свойство будет заставлять все конфигурации запуска Eclipse/IntelliJ IDEA выполнять задачу "prepareX" для данной конфигурации запуска перед запуском игры. // В большинстве случаев нет необходимости включать. // enableEclipsePrepareRuns = true // enableIdeaPrepareRuns = true // Это свойство позволяет настроить задачи ProcessResources Gradle для запуска в IDE перед запуском игры. // Должно быть установлено в true для корректной работы шаблона. // См. https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html copyIdeResources = true // Когда true, это свойство добавит имя папки всех объявленных конфигураций запуска в сгенерированные конфигурации IDE. // Имя папки можно установить в конфигурации запуска с помощью свойства "folderName". // По умолчанию имя папки конфигурации запуска — это имя Gradle-проекта, содержащего его. // generateRunFolders = true // Это свойство включает трансформеры доступа для использования в разработке. // Они будут применены к артефакту Minecraft. // Файл трансформера доступа может быть в любом месте проекта. // Однако он должен находиться в "META-INF/accesstransformer.cfg" в финальном jar моде, чтобы быть загруженным Forge. // Это расположение по умолчанию — лучшая практика для автоматического размещения файла в правильном месте в финальном jar. // См. https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ для дополнительной информации. // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Конфигурации запуска по умолчанию. // Их можно настроить, удалить или дублировать по мере необходимости. runs { // применяется ко всем конфигурациям запуска ниже configureEach { workingDirectory project.file('run') // Рекомендуемые данные логирования для среды разработки // Маркеры могут быть добавлены/удалены по мере необходимости, разделенные запятыми. // "SCAN": Для сканирования модов. // "REGISTRIES": Для срабатывания событий реестра. // "REGISTRYDUMP": Для получения содержимого всех реестров. property 'forge.logging.markers', 'REGISTRIES' // Рекомендуемый уровень логирования для консоли // Вы можете установить различные уровни здесь. // Пожалуйста, прочитайте: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' mods { "${mod_id}" { source sourceSets.main } } } client { // Список пространств имен, из которых загружаются gametest'ы. Пустой = все пространства имен. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } // Эта конфигурация запускает GameTestServer и выполняет все зарегистрированные gametest'ы, затем выходит. // По умолчанию сервер упадет, если не предоставлены gametest'ы. // Система gametest также включена по умолчанию для других конфигураций запуска через команду /test. gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { // пример переопределения workingDirectory, установленного в configureEach выше workingDirectory project.file('run-data') // Укажите modid для генерации данных, куда выводить результирующий ресурс и где искать существующие ресурсы. args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } mixin { add sourceSets.main, "${mod_id}.refmap.json" config "${mod_id}.mixins.json" } // Включите ресурсы, сгенерированные генераторами данных. sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { // Добавляйте репозитории для зависимостей здесь // ForgeGradle автоматически добавляет Forge maven и Maven Central для вас // Если у вас есть зависимости модов в ./libs, вы можете объявить их как репозиторий следующим образом. // См. https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver // flatDir { // dir 'libs' // } } dependencies { // Укажите версию Minecraft для использования. // Любой артефакт может быть предоставлен, пока у него есть артефакт с классификатором "userdev" и он является совместимым патчером. // Классификатор "userdev" будет запрошен и настроен ForgeGradle. // Если groupId "net.minecraft" и artifactId один из ["client", "server", "joined"], // то выполняется специальная обработка для настройки зависимости на ваниль без использования внешнего репозитория. minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" // Пример зависимости мода с JEI - использование fg.deobf() обеспечивает ремаппинг зависимости на ваши маппинги разработки // API JEI объявлен для использования во время компиляции, в то время как полный артефакт JEI используется во время выполнения // compileOnly fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}") // compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}") // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}") // Пример зависимости мода, использующего jar мода из ./libs с плоским репозиторием // Это соответствует ./libs/coolmod-${mc_version}-${coolmod_version}.jar // groupId игнорируется при поиске — в данном случае это "blank" // implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}") // Для дополнительной информации: // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' } tasks.named('processResources', ProcessResources).configure { var replaceProperties = [ minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range, forge_version : forge_version, forge_version_range: forge_version_range, loader_version_range: loader_version_range, mod_id : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, mod_authors : mod_authors, mod_description: mod_description, ] inputs.properties replaceProperties filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) { expand replaceProperties + [project: project] } } // Пример того, как получить свойства в манифест для чтения во время выполнения. tasks.named('jar', Jar).configure { manifest { attributes([ "Specification-Title" : mod_id, "Specification-Vendor" : mod_authors, "Specification-Version" : "1", // Мы версия 1 самих себя "Implementation-Title" : project.name, "Implementation-Version" : project.jar.archiveVersion, "Implementation-Vendor" : mod_authors, "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) } // Это предпочтительный метод для переобфускации вашего jar файла finalizedBy 'reobfJar' } tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' // Используйте кодировку UTF-8 для компиляции Java } // Определите путь к вашей целевой папке def targetModsDir = "D:/server_sandbox/ForgeCreate/mods" // Задача для копирования JAR-файла tasks.register('copyJarToMods', Copy) { // Указывает, откуда копировать файл (из build/libs) from jar.archiveFile // Указывает, куда копировать файл into targetModsDir // Фильтр для выбора нужных файлов, если необходимо //include "${project.name}-${project.version}.jar" // Можно добавить переименование файла, если требуется // rename "${project.name}-${project.version}.jar", "${project.name}.jar" } // Убедитесь, что задача `copyJarToMods` выполняется после сборки JAR jar.finalizedBy(copyJarToMods) // (Опционально) Добавьте зависимость на задачу `copyJarToMods` к задаче `build` build.dependsOn(copyJarToMods)