plugins { id 'net.neoforged.moddev' version '2.0.141' id "com.matthewprenger.cursegradle" version "1.4.0" id "me.modmuss50.mod-publish-plugin" version "0.5.1" } base { archivesName = mod_id } version = "${mod_version}+1.21.1-neoforge" java { toolchain { languageVersion = JavaLanguageVersion.of(21) } withSourcesJar() } // Add common-1.21.1's sources directly — this module compiles them itself. sourceSets { main { java { srcDirs project(':common-1.21.1').sourceSets.main.java.srcDirs } resources { srcDir project(':common-1.21.1').sourceSets.main.resources.srcDirs } } } neoForge { version = neoforge_version_1_21_1 mods { create(mod_id) { sourceSet sourceSets.main } } runs { client { client() } server { server() } data { data() programArguments.addAll("--all", "--mod", mod_id) programArguments.addAll("--existing", file("src/main/resources").absolutePath) programArguments.addAll("--output", file("src/main/generated/resources").absolutePath) } } } dependencies { if (providers.gradleProperty('antarchySodiumCompatTest').orNull == 'true') { runtimeOnly(files(rootProject.file("infinite_dimensions_jars/sodium-neoforge-0.8.13+mc1.21.1.jar"))) } // Sodium — compile-only, for portal live views drawn through Sodium's renderer // (content/client/renderer/sodium, mixins/compat/sodium). Never bundled; that code only // loads when Sodium is installed. The published jar nests the mod jar, so compile against it. compileOnly(files(zipTree(rootProject.file("infinite_dimensions_jars/sodium-neoforge-0.8.13+mc1.21.1.jar")) .matching { include "META-INF/jarjar/net.caffeinemc.sodium-neoforge-*-mod.jar" })) compileOnly(files(rootProject.file("infinite_dimensions_jars/antos-neoforge-1.21.1-${antos_version}.jar"))) runtimeOnly(files(rootProject.file("infinite_dimensions_jars/antos-neoforge-1.21.1-${antos_version}.jar"))) compileOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_neoforge}") runtimeOnly("curse.maven:intapi-${intapi_curseforge_id}:${intapi_curseforge_file_id_neoforge}") implementation "software.bernie.geckolib:geckolib-neoforge-1.21.1:${geckolib_version}" compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.3+1.21.1-neoforge.jar"))) compileOnly(files(rootProject.file("infinite_dimensions_jars/stellarview-1.21.1-0.5.3-neoforge.jar"))) runtimeOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.3+1.21.1-neoforge.jar"))) runtimeOnly("dev.architectury:architectury-neoforge:${architectury_api_version}") compileOnly(files(rootProject.file("sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))) runtimeOnly(files(rootProject.file("sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))) runtimeOnly("com.telepathicgrunt:CommandStructures-Neoforge:${commandstructures_neoforge}") runtimeOnly("com.telepathicgrunt:StructureVoidToggle-Neoforge:${structurevoidtoggle_neoforge}") compileOnly "mezz.jei:jei-1.21.1-common-api:${jei_version}" compileOnly "mezz.jei:jei-1.21.1-neoforge-api:${jei_version}" runtimeOnly "mezz.jei:jei-1.21.1-neoforge:${jei_version}" // Configured — optional, gives players an in-game config screen for Antarchy's // ModConfigSpec-based settings (AntarchyMobsConfig/AntarchyToolsConfig/AntarchyMiscConfig) // with zero Java code on this side: NeoForge's own config system is auto-discovered. // No compileOnly needed since nothing here references Configured's classes directly. // Has no Modrinth release, hence cursemaven (repo already declared in the root build.gradle). runtimeOnly("curse.maven:configured-${configured_curseforge_id}:${configured_curseforge_file_id_neoforge}") implementation(annotationProcessor("io.github.llamalad7:mixinextras-common:${mixin_extras_1_21_1}")) } tasks.withType(ProcessResources).configureEach { duplicatesStrategy = DuplicatesStrategy.EXCLUDE var replaceProperties = [ version: project.version, architectury_api_version: architectury_api_version ] inputs.properties replaceProperties filesMatching('META-INF/neoforge.mods.toml') { expand replaceProperties } } tasks.matching { it.name in ["runClient", "runServer", "runData"] }.configureEach { doFirst { def infinityConfigPrefix = "config/common/" zipTree(rootProject.file("infinite_dimensions_jars/infinity-2.7.3+1.21.1-neoforge.jar")).visit { details -> if (!details.directory && details.relativePath.pathString.startsWith(infinityConfigPrefix)) { def targetPath = details.relativePath.pathString.substring(infinityConfigPrefix.length()) file("run/config/infinity/${targetPath}").parentFile.mkdirs() } } } } tasks.withType(Copy).configureEach { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } tasks.withType(Jar).configureEach { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } publishing { publications { mavenJava(MavenPublication) { groupId = rootProject.group artifactId = "${mod_id}-neoforge-1.21.1" version = project.version artifact jar artifact sourcesJar pom { name = "${mod_name} (NeoForge 1.21.1)" description = mod_description } } } }