2024-10-21 10:05:56 +02:00
buildscript {
repositories {
// Эти репозитории предназначены только для Gradle-плагинов, другие репозитории размещайте в блоке ниже
2024-10-31 15:26:18 +01:00
maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
2024-10-21 10:05:56 +02:00
mavenCentral ( )
}
dependencies {
// После удаления Mixin здесь больше не требуется зависимостей
2024-10-31 15:26:18 +01:00
classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
2024-10-21 10:05:56 +02:00
}
}
plugins {
id 'eclipse'
id 'idea'
id 'net.minecraftforge.gradle' version '[6.0.16,6.2)'
}
2024-10-31 15:26:18 +01:00
apply plugin: 'org.spongepowered.mixin'
2024-10-21 10:05:56 +02:00
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/' )
}
}
}
2024-10-31 15:26:18 +01:00
mixin {
add sourceSets . main , "${mod_id}.refmap.json"
config "${mod_id}.mixins.json"
}
2024-10-21 10:05:56 +02:00
// Включите ресурсы, сгенерированные генераторами данных.
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
2024-10-31 15:26:18 +01:00
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
2024-10-21 10:05:56 +02:00
}
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
}
2024-10-31 15:26:18 +01:00
// Определите путь к вашей целевой папке
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 )