def versionKeyPrefix = project.name.replace('-', '_').replace('.', '_') def versionProperty = { String suffix -> providers.gradleProperty("${versionKeyPrefix}_${suffix}") .orElse(providers.gradleProperty(suffix)) .get() } def optionalVersionProperty = { String suffix -> providers.gradleProperty("${versionKeyPrefix}_${suffix}") .orElse(providers.gradleProperty(suffix).orElse('')) .get() } def dataRunMethod = optionalVersionProperty('data_run_method') if (!dataRunMethod) { dataRunMethod = 'clientData' } tasks.withType(Wrapper).configureEach { distributionType = Wrapper.DistributionType.BIN } version = providers.gradleProperty('mod_version').get() group = providers.gradleProperty('mod_group_id').get() sourceSets.main.java.srcDir(rootProject.file('common/src/main/java')) sourceSets.main.resources { srcDir(rootProject.file('common/src/main/resources')) srcDir('src/generated/resources') exclude("**/*.bbmodel") exclude("src/generated/**/.cache") } repositories { exclusiveContent { forRepository { maven { name = "Modrinth" url = "https://api.modrinth.com/maven" } } filter { includeGroup "maven.modrinth" } } } base { archivesName = "${providers.gradleProperty('mod_id').get()}-${project.name}" } java.toolchain.languageVersion = JavaLanguageVersion.of(21) neoForge { version = versionProperty('neo_version') parchment { mappingsVersion = versionProperty('parchment_mappings_version') minecraftVersion = versionProperty('parchment_minecraft_version') } runs { client { client() systemProperty 'neoforge.enabledGameTestNamespaces', providers.gradleProperty('mod_id').get() } server { server() programArgument '--nogui' systemProperty 'neoforge.enabledGameTestNamespaces', providers.gradleProperty('mod_id').get() } gameTestServer { type = "gameTestServer" systemProperty 'neoforge.enabledGameTestNamespaces', providers.gradleProperty('mod_id').get() } data { delegate."${dataRunMethod}"() programArguments.addAll '--mod', providers.gradleProperty('mod_id').get(), '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() } configureEach { systemProperty 'forge.logging.markers', 'REGISTRIES' logLevel = org.slf4j.event.Level.DEBUG } } mods { "${providers.gradleProperty('mod_id').get()}" { sourceSet(sourceSets.main) } } } configurations { runtimeClasspath.extendsFrom localRuntime } dependencies { def jeiCompile = optionalVersionProperty('jei_compile_dependency') def jadeRuntime = optionalVersionProperty('jade_runtime_dependency') def jeiRuntime = optionalVersionProperty('jei_runtime_dependency') def powerRuntime = optionalVersionProperty('power_test_runtime_dependency') compileOnly "org.jspecify:jspecify:1.0.0" if (jeiCompile) { compileOnly jeiCompile } if (jadeRuntime) { localRuntime jadeRuntime } if (jeiRuntime) { localRuntime jeiRuntime } if (powerRuntime) { localRuntime powerRuntime } } var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) { var replaceProperties = [ minecraft_version : versionProperty('minecraft_version'), minecraft_version_range: versionProperty('minecraft_version_range'), neo_version : versionProperty('neo_version'), mod_id : providers.gradleProperty('mod_id').get(), mod_name : providers.gradleProperty('mod_name').get(), mod_license : providers.gradleProperty('mod_license').get(), mod_version : providers.gradleProperty('mod_version').get(), ] inputs.properties replaceProperties expand replaceProperties from "src/main/templates" into "build/generated/sources/modMetadata" } sourceSets.main.resources.srcDir generateModMetadata neoForge.ideSyncTask generateModMetadata if (versionProperty('minecraft_version') == '1.21.1') { def syncModMetadataToClasses = tasks.register("syncModMetadataToClasses", Copy) { dependsOn generateModMetadata from(generateModMetadata) { include 'META-INF/neoforge.mods.toml' } into layout.buildDirectory.dir('classes/java/main') } tasks.named('classes').configure { dependsOn syncModMetadataToClasses } tasks.named('compileJava').configure { finalizedBy syncModMetadataToClasses } } publishing { publications { register('mavenJava', MavenPublication) { from components.java } } repositories { maven { url "file://${project.projectDir}/repo" } } } tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } idea { module { downloadSources = true downloadJavadoc = true } }