plugins { id 'fabric-loom' version '1.6-SNAPSHOT' id 'maven-publish' id 'com.matthewprenger.cursegradle' version '1.4.0' id 'org.ajoberstar.grgit' version '3.1.1' id 'com.github.breadmoirai.github-release' version '2.2.9' id 'com.wynprice.cursemaven' version '1.2.3' } java { toolchain { languageVersion = JavaLanguageVersion.of(21) } sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 } // Adds a few utility methods like getProjectProperty apply from: 'https://raw.githubusercontent.com/NerdHubMC/Gradle-Scripts/master/scripts/utilities.gradle' apply from: 'https://raw.githubusercontent.com/NerdHubMC/Gradle-Scripts/master/scripts/fabric/publish/changelog.gradle' archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" } processResources { inputs.property "version", project.version filesMatching("fabric.mod.json") { expand "version": project.version } } // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html tasks.withType(JavaCompile).configureEach { options.encoding = "UTF-8" it.options.release = 21 } jar { from "LICENSE" } // configure the maven publication publishing { publications { mavenJava(MavenPublication) { // add all the jars that should be included when publishing to maven artifact(remapJar) { builtBy remapJar } } } // select the repositories you want to publish to repositories { // uncomment to publish to the local maven // mavenLocal() } } tasks.register('checkGitStatus') { group = 'publishing' description = 'Checks that the git repository is in a state suitable for release' doLast { if (grgit == null) throw new RuntimeException('No git repository') if (!grgit.status().isClean()) { throw new RuntimeException("Git repository not ready for release (${grgit.status()})") } def currentBranch = grgit.branch.current().getName() grgit.fetch() if (grgit.tag.list().any { it.name == project.version }) { throw new RuntimeException("A tag already exists for ${project.version}") } def status = grgit.branch.status(name: currentBranch) if (status.aheadCount != 0) { throw new RuntimeException('Some commits have not been pushed') } if (status.behindCount != 0) { throw new RuntimeException('Some commits have not been pulled') } } } githubRelease { repo "Beem" token "${getProjectProperty('github_releases_token')}" // default owner: last component of maven group // default repo: name of the project tagName = project.version targetCommitish = { grgit.branch.current().name } body = { project.getChangelogText() } FilenameFilter filter = { dir, filename -> filename.contains(project.version) && !filename.contains('-dev.jar') } releaseAssets = { jar.destinationDirectory.asFile.get().listFiles filter } } tasks.githubRelease.dependsOn(checkGitStatus) curseforge { if (project.getProjectProperty('curse_key') != null) { apiKey = project.getProjectProperty('curse_key') } if (project.hasProperty('curseforge_id')) { project { id = findProperty('curseforge_id') releaseType = project.release_type //usually automatically determined by the CurseGradle plugin, but won't work with fabric "${project.curseforge_versions}".split('; ').each { addGameVersion it } addGameVersion 'Fabric' mainArtifact(remapJar) { displayName = "${project.name}-${project.version}.jar" if (project.hasProperty('cf_requirements') || project.hasProperty('cf_optionals') || project.hasProperty('cf_embeddeds') || project.hasProperty('cf_tools') || project.hasProperty('cf_incompatibles') || project.hasProperty('cf_includes')) { relations { if (project.hasProperty('cf_requirements')) { "${project.cf_requirements}".split('; ').each { requiredDependency "${it}" } } if (project.hasProperty('cf_optionals')) { "${project.cf_optionals}".split('; ').each { optionalDependency "${it}" } } if (project.hasProperty('cf_embeddeds')) { "${project.cf_embeddeds}".split('; ').each { embeddedLibrary "${it}" } } if (project.hasProperty('cf_tools')) { "${project.cf_tools}".split('; ').each { tool "${it}" } } if (project.hasProperty('cf_incompatibles')) { "${project.cf_incompatibles}".split('; ').each { incompatible "${it}" } } if (project.hasProperty('cf_includes')) { "${project.cf_includes}".split('; ').each { include "${it}" } } } } } changelogType = 'markdown' changelog = project.getChangelogText() afterEvaluate { uploadTask.dependsOn remapSourcesJar } } options { forgeGradleIntegration = false } } } tasks.curseforge.dependsOn(checkGitStatus) tasks.register('release') { group = 'publishing' description = 'Releases a new version to Github and Curseforge' }