plugins { id 'java-library' id 'maven-publish' } base { archivesName = "${mod_id}-${project.name}-${libs.versions.modern.minecraft.get()}" } java { toolchain.languageVersion = JavaLanguageVersion.of(libs.versions.javaVersion.get()) withSourcesJar() withJavadocJar() } repositories { mavenCentral() // https://docs.gradle.org/current/userguide/declaring_repositories.html#declaring_content_exclusively_found_in_one_repository exclusiveContent { forRepository { maven { name = 'Sponge' url = 'https://repo.spongepowered.org/repository/maven-public' } } filter { includeGroupAndSubgroups("org.spongepowered") } } maven { name = 'BlameJared' url = 'https://maven.blamejared.com' } } dependencies { implementation 'org.jetbrains:annotations:24.1.0' } // Declare capabilities on the outgoing configurations. // Read more about capabilities here: https://docs.gradle.org/current/userguide/component_capabilities.html#sec:declaring-additional-capabilities-for-a-local-component ['apiElements', 'runtimeElements', 'sourcesElements', 'javadocElements'].each { variant -> configurations."$variant".outgoing { capability("$group:$mod_id-${project.name}-${libs.versions.modern.minecraft.get()}:$version") capability("$group:$mod_id:$version") } publishing.publications.configureEach { suppressPomMetadataWarningsFor(variant) } } //TODO undo this tasks.withType(Javadoc) { enabled = false } sourcesJar { from(rootProject.file("LICENSE")) { rename { "${it}_${mod_name}" } } } jar { from(rootProject.file("LICENSE")) { rename { "${it}_${mod_name}" } } manifest { attributes([ 'Specification-Title' : mod_name, 'Specification-Vendor' : mod_author, 'Specification-Version' : project.jar.archiveVersion, 'Implementation-Title' : project.name, 'Implementation-Version': project.jar.archiveVersion, 'Implementation-Vendor' : mod_author, 'Built-On-Minecraft' : libs.versions.modern.minecraft.get() ]) } } processResources { def resolveVersion = { String moduleName -> configurations.runtimeClasspath.resolvedConfiguration.resolvedArtifacts.find { it.moduleVersion.id.name == moduleName }?.moduleVersion?.id?.version } // Define expandProps at configuration time def expandProps = [ "group" : project.group, "minecraft_version" : libs.versions.modern.minecraft.get(), "minecraft_versionsSupported": libs.versions.minecraft.versionSupported.get(), "fabric_api_version" : libs.versions.modern.fabric.api.get(), "fabric_loader_version" : libs.versions.modern.fabric.loader.get(), "mod_name" : mod_name, "mod_id" : mod_id, "mod_version" : libs.versions.modVersion.get(), "java_version" : libs.versions.javaVersion.get() ] // Register inputs at configuration time inputs.properties(expandProps) doFirst { // Function to resolve versions from libs.versions.toml that are set to "latest.release" def resolveLatestReleaseVersions = { -> def resolvedVersions = [:] // Get the version catalogs extension def versionCatalogs = project.getExtensions().findByType(VersionCatalogsExtension.class) if (versionCatalogs != null) { def catalog = versionCatalogs.named("libs") // Get all libraries from the catalog catalog.libraryAliases.each { alias -> def library = catalog.findLibrary(alias).get() def module = library.get().module def version = library.get().versionConstraint.requiredVersion // If version is "latest.release", resolve it if (version == "latest.release") { def moduleName = module.name def resolvedVersion = resolveVersion(moduleName) if (resolvedVersion) { resolvedVersions.put(alias, resolvedVersion) } } } } return resolvedVersions } // Resolve all latest.release versions def resolvedLatestVersions = resolveLatestReleaseVersions() // Add resolved versions to expandProps expandProps.put("hypixel_mod_api_version", resolveVersion("mod-api")) expandProps.put("fabric_kotlin_version", resolveVersion("fabric-language-kotlin")) // Add all resolved latest.release versions to expandProps resolvedLatestVersions.each { alias, version -> expandProps.put(alias + "_version", version) } filesMatching(['pack.mcmeta', 'fabric.mod.json', 'META-INF/mods.toml', 'META-INF/neoforge.mods.toml', '*.mixins.json']) { expand expandProps } } } publishing { publications { register('mavenJava', MavenPublication) { artifactId base.archivesName.get() from components.java } } repositories { maven { url System.getenv("local_maven_url") } } }