Просмотр исходного кода

Kotlin DSL, swap to CurseForgeGradle

Jared 3 лет назад
Родитель
Сommit
3cb3a046a1
12 измененных файлов с 553 добавлено и 463 удалено
  1. 0 62
      Common/build.gradle
  2. 48 0
      Common/build.gradle.kts
  3. 0 139
      Fabric/build.gradle
  4. 124 0
      Fabric/build.gradle.kts
  5. 0 177
      Forge/build.gradle
  6. 183 0
      Forge/build.gradle.kts
  7. 1 1
      Jenkinsfile
  8. 0 50
      build.gradle
  9. 157 0
      build.gradle.kts
  10. 14 17
      gradle.properties
  11. 0 17
      settings.gradle
  12. 26 0
      settings.gradle.kts

+ 0 - 62
Common/build.gradle

@@ -1,62 +0,0 @@
-import com.blamejared.modtemplate.Utils
-
-buildscript {
-    repositories {
-        maven {
-            name = "BlameJared"
-            url = 'https://maven.blamejared.com'
-        }
-        maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
-    }
-    dependencies {
-        classpath group: 'com.blamejared', name: 'ModTemplate', version: '2.+', changing: true
-    }
-}
-plugins {
-    id('java')
-    id('org.spongepowered.gradle.vanilla') version '0.2.1-SNAPSHOT'
-    id 'maven-publish'
-}
-
-apply plugin: 'com.blamejared.modtemplate'
-
-import com.blamejared.modtemplate.Utils
-
-archivesBaseName = "${mod_name}-common-${minecraft_version}"
-version = Utils.updatingVersion(mod_version)
-
-minecraft {
-    version(minecraft_version)
-    runs {   
-        if (project.hasProperty('common_runs_enabled') ? project.findProperty('common_runs_enabled').toBoolean() : true) {
-        
-            server(project.hasProperty('common_server_run_name') ? project.findProperty('common_server_run_name') : 'vanilla_server') {
-                workingDirectory(this.file("run"))
-            }
-            client(project.hasProperty('common_client_run_name') ? project.findProperty('common_client_run_name') : 'vanilla_client') {
-                workingDirectory(this.file("run"))
-            }
-        }
-    }
-}
-
-dependencies {
-     compileOnly group:'org.spongepowered', name:'mixin', version:'0.8.4'
-}
-
-publishing {
-    publications {
-        mavenJava(MavenPublication) {
-            groupId project.group
-            artifactId project.archivesBaseName
-            version project.version
-            from components.java
-        }
-    }
-
-    repositories {
-        maven {
-            url "file://" + System.getenv("local_maven")
-        }
-    }
-}

+ 48 - 0
Common/build.gradle.kts

@@ -0,0 +1,48 @@
+import com.blamejared.modtemplate.Utils
+
+val minecraftVersion: String by project
+val modName: String by project
+val modVersion: String by project
+
+plugins {
+    `java-library`
+    `maven-publish`
+    id("com.blamejared.modtemplate")
+    id("org.spongepowered.gradle.vanilla") version "0.2.1-SNAPSHOT"
+}
+
+val baseArchiveName = "${modName}-common-${minecraftVersion}"
+version = Utils.updatingSemVersion(modVersion)
+
+base {
+    archivesName.set(baseArchiveName)
+}
+
+minecraft {
+    version(minecraftVersion)
+    runs {
+        client("Common Client") {
+            workingDirectory(project.file("run"))
+        }
+        server("Common Server") {
+            workingDirectory(project.file("run_server"))
+        }
+    }
+}
+
+dependencies {
+    compileOnly("org.spongepowered:mixin:0.8.5")
+}
+
+publishing {
+    publications {
+        register("mavenJava", MavenPublication::class) {
+            artifactId = baseArchiveName
+            from(components["java"])
+        }
+    }
+
+    repositories {
+        maven("file://${System.getenv("local_maven")}")
+    }
+}

+ 0 - 139
Fabric/build.gradle

@@ -1,139 +0,0 @@
-buildscript {
-    repositories {
-        maven {
-            name = "BlameJared"
-            url = 'https://maven.blamejared.com'
-        }
-        maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
-    }
-    dependencies {
-        classpath group: 'com.blamejared', name: 'ModTemplate', version: '2.+', changing: true
-    }
-}
-plugins {
-    id 'fabric-loom' version '0.10-SNAPSHOT'
-    id 'maven-publish'
-    id 'idea'
-    id 'com.matthewprenger.cursegradle' version '1.4.0'
-}
-apply plugin: 'com.blamejared.modtemplate'
-import com.blamejared.modtemplate.Utils
-
-archivesBaseName = "${mod_name}-fabric-${minecraft_version}"
-version = Utils.updatingVersion(mod_version)
-
-dependencies {
-    minecraft "com.mojang:minecraft:${minecraft_version}"
-    mappings loom.officialMojangMappings()
-    modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
-    modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
-    implementation project(":Common")
-}
-
-loom {
-    runs {
-        client {
-            client()
-            setConfigName("Fabric Client")
-            ideConfigGenerated(true)
-            runDir("run")
-        }
-        server {
-            server()
-            setConfigName("Fabric Server")
-            ideConfigGenerated(true)
-            runDir("run")
-        }
-    }
-}
-
-modTemplate {
-    mcVersion minecraft_version
-    curseHomepage curse_homepage
-    displayName mod_name
-    modLoader "Fabric"
-    changelog {
-        enabled true
-        firstCommit git_first_commit
-        repo git_repo
-    }
-    versionTracker {
-        enabled true
-        author mod_author
-        projectName mod_name
-    }
-    webhook {
-        enabled true
-        curseId curse_project_id
-        avatarUrl mod_avatar
-    }
-}
-
-
-processResources {
-    from project(":Common").sourceSets.main.resources
-    inputs.property "version", project.version
-
-    filesMatching("fabric.mod.json") {
-        expand "version": project.version
-    }
-
-    filesMatching('*.mixins.json') {
-        expand "refmap_target": "${archivesBaseName}-"
-    }
-}
-
-tasks.withType(JavaCompile) {
-    source(project(":Common").sourceSets.main.allSource)
-}
-
-jar {
-    from("LICENSE") {
-        rename { "${it}_${mod_name}" }
-    }
-}
-
-publishing {
-    publications {
-        mavenJava(MavenPublication) {
-            groupId project.group
-            artifactId project.archivesBaseName
-            version project.version
-            from components.java
-        }
-    }
-
-    repositories {
-        maven {
-            url "file://" + System.getenv("local_maven")
-        }
-    }
-}
-
-curseforge {
-
-    apiKey = findProperty('curseforge_api_token') ?: 0
-    def versions = [minecraft_version]
-
-    project {
-        id = curse_project_id
-        releaseType = 'release'
-        changelog = file("changelog.md")
-        changelogType = 'markdown'
-        addGameVersion "Fabric"
-
-        versions.each {
-
-            addGameVersion "${it}"
-        }
-
-        mainArtifact(file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar"))
-
-        afterEvaluate {
-            uploadTask.dependsOn(remapJar)
-        }
-    }
-    options {
-        forgeGradleIntegration = false;
-    }
-}

+ 124 - 0
Fabric/build.gradle.kts

@@ -0,0 +1,124 @@
+import com.blamejared.modtemplate.Utils
+import net.darkhax.curseforgegradle.TaskPublishCurseForge
+import net.darkhax.curseforgegradle.Constants as CFG_Constants
+
+plugins {
+    `maven-publish`
+    id("fabric-loom") version "0.10-SNAPSHOT"
+    id("com.blamejared.modtemplate")
+    id("net.darkhax.curseforgegradle") version ("1.0.8")
+}
+
+val modVersion: String by project
+val minecraftVersion: String by project
+val fabricLoaderVersion: String by project
+val fabricVersion: String by project
+val modName: String by project
+val modAuthor: String by project
+val modId: String by project
+val modAvatar: String by project
+val curseProjectId: String by project
+val curseHomepageLink: String by project
+val gitFirstCommit: String by project
+val gitRepo: String by project
+val modJavaVersion: String by project
+
+val baseArchiveName = "${modName}-fabric-${minecraftVersion}"
+
+version = Utils.updatingSemVersion(modVersion)
+base {
+    archivesName.set(baseArchiveName)
+}
+
+dependencies {
+    minecraft("com.mojang:minecraft:${minecraftVersion}")
+    mappings(loom.layered {
+        officialMojangMappings()
+        parchment("org.parchmentmc.data:parchment-1.18.1:2021.12.19@zip")
+    })
+    modImplementation("net.fabricmc:fabric-loader:${fabricLoaderVersion}")
+    modImplementation("net.fabricmc.fabric-api:fabric-api:${fabricVersion}")
+    implementation(project(":Common"))
+}
+
+loom {
+    runs {
+        named("client") {
+            client()
+            setConfigName("Fabric Client")
+            ideConfigGenerated(true)
+            runDir("run")
+        }
+        named("server") {
+            server()
+            setConfigName("Fabric Server")
+            ideConfigGenerated(true)
+            runDir("run_server")
+        }
+    }
+}
+
+modTemplate {
+    mcVersion(minecraftVersion)
+    curseHomepage(curseHomepageLink)
+    displayName(modName)
+    modLoader("Fabric")
+    changelog {
+        enabled(true)
+        firstCommit(gitFirstCommit)
+        repo(gitRepo)
+    }
+    versionTracker {
+        enabled(true)
+        author(modAuthor)
+        projectName("${modName}-Fabric")
+        homepage(curseHomepageLink)
+    }
+}
+
+tasks.processResources {
+    outputs.upToDateWhen { false }
+    from(project(":Common").sourceSets.main.get().resources)
+
+    inputs.property("version", project.version)
+
+    filesMatching("fabric.mod.json") {
+        expand("version" to project.version)
+    }
+
+    filesMatching("*.mixins.json") {
+        expand("refmap_target" to "$baseArchiveName-")
+    }
+}
+
+tasks.withType<JavaCompile> {
+    source(project(":Common").sourceSets.main.get().allSource)
+}
+
+publishing {
+    publications {
+        register("mavenJava", MavenPublication::class) {
+            artifactId = baseArchiveName
+            from(components["java"])
+        }
+    }
+
+    repositories {
+        maven("file://${System.getenv("local_maven")}")
+    }
+}
+
+tasks.create<TaskPublishCurseForge>("publishCurseForge") {
+    apiToken = Utils.locateProperty(project, "curseforge_api_token")
+
+    val mainFile = upload(curseProjectId, file("${project.buildDir}/libs/$baseArchiveName-$version.jar"))
+    mainFile.changelogType = "markdown"
+    mainFile.changelog = Utils.getFullChangelog(project)
+    mainFile.releaseType = CFG_Constants.RELEASE_TYPE_RELEASE
+    mainFile.addJavaVersion("Java $modJavaVersion")
+    mainFile.addGameVersion(minecraftVersion)
+
+    doLast {
+        project.ext.set("curse_file_url", "${curseHomepageLink}/files/${mainFile.curseFileId}")
+    }
+}

+ 0 - 177
Forge/build.gradle

@@ -1,177 +0,0 @@
-buildscript {
-    repositories {
-        maven { url = 'https://maven.minecraftforge.net' }
-        maven { url = 'https://maven.blamejared.com' }
-        maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
-        mavenCentral()
-    }
-    dependencies {
-        classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
-        classpath 'gradle.plugin.com.matthewprenger:CurseGradle:1.4.0'
-        classpath group: 'com.blamejared', name: 'ModTemplate', version: '2.+', changing: true
-        classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
-    }
-}
-apply plugin: 'java'
-apply plugin: 'net.minecraftforge.gradle'
-apply plugin: 'com.blamejared.modtemplate'
-apply plugin: 'eclipse'
-apply plugin: 'org.spongepowered.mixin'
-apply plugin: 'maven-publish'
-apply plugin: 'com.matthewprenger.cursegradle'
-
-import com.blamejared.modtemplate.Utils
-
-archivesBaseName = "${mod_name}-forge-${minecraft_version}"
-version = Utils.updatingVersion(mod_version)
-
-mixin {
-    add sourceSets.main, "${mod_id}.refmap.json"
-
-    config "${mod_id}.mixins.json"
-    config "${mod_id}.forge.mixins.json"
-}
-
-minecraft {
-    mappings channel: 'official', version: minecraft_version
-
-    if (project.hasProperty('forge_ats_enabled') && project.findProperty('forge_ats_enabled').toBoolean()) {
-        // This location is hardcoded in Forge and can not be changed.
-        // https://github.com/MinecraftForge/MinecraftForge/blob/be1698bb1554f9c8fa2f58e32b9ab70bc4385e60/fmlloader/src/main/java/net/minecraftforge/fml/loading/moddiscovery/ModFile.java#L123
-        accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
-        project.logger.debug('Forge Access Transformers are enabled for this project.')
-    }
-
-    runs {
-        client {
-            workingDirectory project.file('run')
-            ideaModule "${rootProject.name}.${project.name}.main"
-            taskName 'Client'
-            args "-mixin.config=${mod_id}.mixins.json", "-mixin.config=${mod_id}.forge.mixins.json"
-            mods {
-                modClientRun {
-                    source sourceSets.main
-                    source project(":Common").sourceSets.main
-                }
-            }
-        }
-
-        server {
-            workingDirectory project.file('run')
-            ideaModule "${rootProject.name}.${project.name}.main"
-            taskName 'Server'
-            args "-mixin.config=${mod_id}.mixins.json", "-mixin.config=${mod_id}.forge.mixins.json"
-            mods {
-                modServerRun {
-                    source sourceSets.main
-                    source project(":Common").sourceSets.main
-                }
-            }
-        }
-
-        data {
-            workingDirectory project.file('run')
-            ideaModule "${rootProject.name}.${project.name}.main"
-            args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
-            taskName 'Data'
-            args "-mixin.config=${mod_id}.mixins.json", "-mixin.config=${mod_id}.forge.mixins.json"
-            mods {
-                modDataRun {
-                    source sourceSets.main
-                    source project(":Common").sourceSets.main
-                }
-            }
-        }
-    }
-}
-
-modTemplate {
-    mcVersion minecraft_version
-    curseHomepage curse_homepage
-    displayName mod_name
-    modLoader "Forge"
-    changelog {
-        enabled true
-        firstCommit git_first_commit
-        repo git_repo
-    }
-    versionTracker {
-        enabled true
-        author mod_author
-        projectName mod_name
-    }
-    webhook {
-        enabled true
-        curseId curse_project_id
-        avatarUrl mod_avatar
-    }
-}
-
-
-sourceSets.main.resources.srcDir 'src/generated/resources'
-
-dependencies {
-    minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
-    compileOnly project(":Common")
-    annotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor'
-}
-
-tasks.withType(JavaCompile) {
-    source(project(":Common").sourceSets.main.allSource)
-}
-
-processResources {
-    from project(":Common").sourceSets.main.resources
-
-    filesMatching('*.mixins.json') {
-        expand "refmap_target": "${mod_id}."
-    }
-}
-
-jar {
-    manifest {
-        attributes([
-                "Specification-Title"     : mod_name,
-                "Specification-Vendor"    : mod_author,
-                "Specification-Version"   : "1",
-                "Implementation-Title"    : project.name,
-                "Implementation-Version"  : project.jar.archiveVersion,
-                "Implementation-Vendor"   : mod_author,
-                "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
-                "MixinConfigs"            : "controlling.mixins.json"
-        ])
-    }
-}
-
-jar.finalizedBy('reobfJar')
-
-publishing {
-    publications {
-        mavenJava(MavenPublication) {
-            groupId project.group
-            artifactId project.archivesBaseName
-            version project.version
-            artifact jar
-        }
-    }
-    repositories {
-        maven {
-            url "file://" + System.getenv("local_maven")
-        }
-    }
-}
-
-
-
-curseforge {
-
-    apiKey = findProperty('curseforge_api_token') ?: 0
-    project {
-        id = curse_project_id
-        releaseType = 'release'
-        changelog = file("changelog.md")
-        changelogType = 'markdown'
-        addGameVersion "Forge"
-        addGameVersion minecraft_version
-    }
-}

+ 183 - 0
Forge/build.gradle.kts

@@ -0,0 +1,183 @@
+import com.blamejared.modtemplate.Utils
+import groovy.namespace.QName
+import groovy.util.Node
+import groovy.util.NodeList
+import net.darkhax.curseforgegradle.TaskPublishCurseForge
+import net.darkhax.curseforgegradle.Constants as CFG_Constants
+
+plugins {
+    `maven-publish`
+    id("net.minecraftforge.gradle") version ("5.1.+")
+    id("org.parchmentmc.librarian.forgegradle") version ("1.+")
+    id("org.spongepowered.mixin") version ("0.7-SNAPSHOT")
+    id("com.blamejared.modtemplate")
+    id("net.darkhax.curseforgegradle") version ("1.0.8")
+}
+
+val modVersion: String by project
+val minecraftVersion: String by project
+val forgeVersion: String by project
+val forgeAtsEnabled: String by project
+val modName: String by project
+val modAuthor: String by project
+val modId: String by project
+val modAvatar: String by project
+val curseProjectId: String by project
+val curseHomepageLink: String by project
+val gitFirstCommit: String by project
+val gitRepo: String by project
+val modJavaVersion: String by project
+
+val baseArchiveName = "${modName}-forge-${minecraftVersion}"
+
+version = Utils.updatingSemVersion(modVersion)
+base {
+    archivesName.set(baseArchiveName)
+}
+
+mixin {
+    add(sourceSets.main.get(), "${modId}.refmap.json")
+    config("${modId}.mixins.json")
+    config("${modId}.forge.mixins.json")
+}
+
+minecraft {
+    mappings("parchment", "2021.12.19-1.18.1")
+
+    runs {
+        create("client") {
+            taskName("Client")
+            workingDirectory(project.file("run"))
+            ideaModule("${rootProject.name}.${project.name}.main")
+            args("-mixin.config=${modId}.mixins.json")
+            mods {
+                create(modId) {
+                    source(sourceSets.main.get())
+                    source(project(":Common").sourceSets.main.get())
+                }
+            }
+        }
+        create("server") {
+            taskName("Server")
+            workingDirectory(project.file("run_server"))
+            ideaModule("${rootProject.name}.${project.name}.main")
+            args("-mixin.config=${modId}.mixins.json", "nogui")
+            mods {
+                create(modId) {
+                    source(sourceSets.main.get())
+                    source(project(":Common").sourceSets.main.get())
+                }
+            }
+        }
+
+        create("data") {
+            taskName("Data")
+            workingDirectory(project.file("run"))
+            ideaModule("${rootProject.name}.${project.name}.main")
+            args(
+                    "--mod",
+                    modId,
+                    "--all",
+                    "--output",
+                    file("src/generated/resources/"),
+                    "--existing",
+                    file("src/main/resources/")
+            )
+            args("-mixin.config=${modId}.mixins.json")
+            mods {
+                create(modId) {
+                    source(sourceSets.main.get())
+                    source(project(":Common").sourceSets.main.get())
+                }
+            }
+        }
+    }
+}
+
+modTemplate {
+    mcVersion(minecraftVersion)
+    curseHomepage(curseHomepageLink)
+    displayName(modName)
+    modLoader("Forge")
+    changelog {
+        enabled(true)
+        firstCommit(gitFirstCommit)
+        repo(gitRepo)
+    }
+    versionTracker {
+        enabled(true)
+        author(modAuthor)
+        projectName("${modName}-Forge")
+        homepage(curseHomepageLink)
+    }
+}
+
+sourceSets.main.get().resources.srcDir("src/generated/resources")
+
+dependencies {
+    "minecraft"("net.minecraftforge:forge:${minecraftVersion}-${forgeVersion}")
+    compileOnly(project(":Common"))
+    annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor")
+}
+
+tasks.withType<JavaCompile> {
+    source(project(":Common").sourceSets.main.get().allSource)
+}
+
+tasks.processResources {
+    outputs.upToDateWhen { false }
+    from(project(":Common").sourceSets.main.get().resources)
+
+    filesMatching("*.mixins.json") {
+        expand("refmap_target" to "${modId}.")
+    }
+}
+
+tasks {
+    jar {
+        finalizedBy("reobfJar")
+    }
+}
+
+publishing {
+    publications {
+        register("mavenJava", MavenPublication::class) {
+            artifactId = baseArchiveName
+            from(components["java"])
+
+            pom.withXml {
+                val depNodeList = asNode()["dependencies"] as NodeList
+                depNodeList.map { it as Node }.forEach { depList ->
+                    val deps = depList.getAt(QName("http://maven.apache.org/POM/4.0.0", "dependency"))
+                    deps.map { it as Node }.forEach { dep ->
+                        val versionList = dep.getAt(QName("http://maven.apache.org/POM/4.0.0", "version"))
+                        versionList.map { it as Node }.map { it.value() as NodeList }.map { it.text() }
+                                .forEach { version ->
+                                    if (version.contains("_mapped_")) {
+                                        dep.parent().remove(dep)
+                                    }
+                                }
+                    }
+                }
+            }
+        }
+    }
+
+    repositories {
+        maven("file://${System.getenv("local_maven")}")
+    }
+}
+
+tasks.create<TaskPublishCurseForge>("publishCurseForge") {
+    apiToken = Utils.locateProperty(project, "curseforge_api_token") ?: 0
+
+    val mainFile = upload(curseProjectId, file("${project.buildDir}/libs/$baseArchiveName-$version.jar"))
+    mainFile.changelogType = "markdown"
+    mainFile.changelog = Utils.getFullChangelog(project)
+    mainFile.releaseType = CFG_Constants.RELEASE_TYPE_RELEASE
+    mainFile.addJavaVersion("Java $modJavaVersion")
+
+    doLast {
+        project.ext.set("curse_file_url", "${curseHomepageLink}/files/${mainFile.curseFileId}")
+    }
+}

+ 1 - 1
Jenkinsfile

@@ -41,7 +41,7 @@ pipeline {
                     sh './gradlew publish'
 
                     echo 'Deploying to CurseForge'
-                    sh './gradlew curseforge'
+                    sh './gradlew publishCurseForge postDiscord'
                 }
             }
         }

+ 0 - 50
build.gradle

@@ -1,50 +0,0 @@
-subprojects {
-
-    apply plugin: 'java'
-
-    java.toolchain.languageVersion = JavaLanguageVersion.of(17)
-    java.withSourcesJar()
-    java.withJavadocJar()
-
-    jar {
-        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,
-                    'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
-                    'Timestampe'              : System.currentTimeMillis(),
-                    'Built-On-Java'           : "${System.getProperty('java.vm.version')} (${System.getProperty('java.vm.vendor')})",
-                    'Build-On-Minecraft'      : minecraft_version
-            ])
-        }
-    }
-
-    repositories {
-
-        mavenCentral()
-
-        maven {
-            name = 'Sponge / Mixin'
-            url = 'https://repo.spongepowered.org/repository/maven-public/'
-        }
-
-        maven {
-            name = 'BlameJared Maven (CrT / Bookshelf)'
-            url = 'https://maven.blamejared.com'
-        }
-    }
-
-    dependencies {
-        implementation 'org.jetbrains:annotations:21.0.1'
-    }
-
-    tasks.withType(JavaCompile).configureEach {
-
-        it.options.encoding = 'UTF-8'
-        it.options.release = 17
-    }
-}

+ 157 - 0
build.gradle.kts

@@ -0,0 +1,157 @@
+import com.blamejared.modtemplate.Utils
+import com.diluv.schoomp.Webhook
+import com.diluv.schoomp.message.Message
+import com.diluv.schoomp.message.embed.Embed
+import java.io.IOException
+import java.text.SimpleDateFormat
+import java.util.*
+
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath("com.diluv.schoomp:Schoomp:1.2.5")
+    }
+}
+
+plugins {
+    `java-library`
+    idea
+    id("com.blamejared.modtemplate") version ("3.0.0.37")
+}
+
+val minecraftVersion: String by project
+val modName: String by project
+val modAuthor: String by project
+val modJavaVersion: String by project
+val modAvatar: String by project
+val modVersion: String by project
+val gitRepo: String by project
+
+version = Utils.updatingSemVersion(modVersion)
+
+subprojects {
+
+    apply(plugin = "java")
+
+    extensions.configure<JavaPluginExtension> {
+        toolchain.languageVersion.set(JavaLanguageVersion.of(modJavaVersion))
+        withJavadocJar()
+        withSourcesJar()
+    }
+
+    tasks.withType<JavaCompile> {
+        options.encoding = "UTF-8"
+        options.release.set(modJavaVersion.toInt())
+    }
+
+    tasks {
+
+        jar {
+            manifest {
+                attributes(
+                        "Specification-Title" to modName,
+                        "Specification-Vendor" to modAuthor,
+                        "Specification-Version" to archiveVersion,
+                        "Implementation-Title" to project.name,
+                        "Implementation-Version" to archiveVersion,
+                        "Implementation-Vendor" to modAuthor,
+                        "Implementation-Timestamp" to SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(Date()),
+                        "Timestamp" to System.currentTimeMillis(),
+                        "Built-On-Java" to "${System.getProperty("java.vm.version")} (${System.getProperty("java.vm.vendor")})",
+                        "Build-On-Minecraft" to minecraftVersion
+                )
+            }
+        }
+    }
+
+    repositories {
+
+        mavenCentral()
+
+        maven("https://repo.spongepowered.org/repository/maven-public/") {
+            name = "Sponge / Mixin"
+        }
+
+        maven("https://maven.blamejared.com") {
+            name = "BlameJared Maven (CrT / Bookshelf)"
+        }
+    }
+
+    dependencies {
+        implementation("org.jetbrains:annotations:21.0.1")
+    }
+
+    tasks.withType<GenerateModuleMetadata>() {
+
+        enabled = false
+    }
+}
+
+tasks.create("postDiscord") {
+
+    doLast {
+        try {
+
+            // Create a new webhook instance for Discord
+            val webhook = Webhook(Utils.locateProperty(project, "discordCFWebhook"), "$modName CurseForge Gradle Upload")
+
+            // Craft a message to send to Discord using the webhook.
+            val message = Message()
+            message.username = modName
+            message.avatarUrl = modAvatar
+            message.content = "$modName $version for Minecraft $minecraftVersion has been published!"
+
+            val embed = Embed()
+            val downloadSources = StringJoiner("\n")
+
+            if (project(":Fabric").ext.has("curse_file_url")) {
+
+                downloadSources.add("<:fabric:932163720568782878> [Fabric](${project(":Fabric").ext.get("curse_file_url")})")
+            }
+
+            if (project(":Forge").ext.has("curse_file_url")) {
+
+                downloadSources.add("<:forge:932163698003443804> [Forge](${project(":Forge").ext.get("curse_file_url")})")
+            }
+
+            downloadSources.add(
+                    "<:maven:932165250738970634> `\"${project(":Common").group}:${project(":Common").base.archivesName.get()}:${
+                        project(":Common").version
+                    }\"`"
+            )
+            downloadSources.add(
+                    "<:maven:932165250738970634> `\"${project(":Fabric").group}:${project(":Fabric").base.archivesName.get()}:${
+                        project(":Fabric").version
+                    }\"`"
+            )
+            downloadSources.add(
+                    "<:maven:932165250738970634> `\"${project(":Forge").group}:${project(":Forge").base.archivesName.get()}:${
+                        project(":Forge").version
+                    }\"`"
+            )
+
+            // Add Curseforge DL link if available.
+            val downloadString = downloadSources.toString()
+
+            if (downloadString.isNotEmpty()) {
+
+                embed.addField("Download", downloadString, false)
+            }
+
+            // Just use the Forge changelog for now, the files are the same anyway.
+            embed.addField("Changelog", Utils.getCIChangelog(project, gitRepo).take(1000), false)
+
+            embed.color = 0xF16436
+            message.addEmbed(embed)
+
+            webhook.sendMessage(message)
+        } catch (e: IOException) {
+
+            project.logger.error("Failed to push CF Discord webhook.")
+            project.file("post_discord_error.log").writeText(e.stackTraceToString())
+        }
+    }
+
+}

+ 14 - 17
gradle.properties

@@ -1,30 +1,27 @@
 # Project
-mod_version=9.0
+modVersion=9.0
 group=com.blamejared.controlling
+modJavaVersion=17
 
 # Common
-minecraft_version=1.18.1
-common_runs_enabled=true
-common_client_run_name=Common Client
-common_server_run_name=Common Server
+minecraftVersion=1.18.1
 
 # Forge
-forge_version=39.0.7
-//forge_ats_enabled=true
+forgeVersion=39.0.7
 
 # Fabric
-fabric_version=0.44.0+1.18
-fabric_loader_version=0.12.12
+fabricVersion=0.46.2+1.18
+fabricLoaderVersion=0.12.12
 
 # Mod options
-mod_name=Controlling
-mod_author=Jaredlll08
-mod_id=controlling
-mod_avatar=https://media.forgecdn.net/avatars/49/603/636079972364045115.png
-curse_project_id=250398
-curse_homepage=https://www.curseforge.com/minecraft/mc-mods/controlling
-git_first_commit=b0ebaace2f1b7602c789ac71758fd8879cf43a5c
-git_repo=https://github.com/jaredlll08/controlling
+modName=Controlling
+modAuthor=Jaredlll08
+modId=controlling
+modAvatar=https://media.forgecdn.net/avatars/49/603/636079972364045115.png
+curseProjectId=250398
+curseHomepageLink=https://www.curseforge.com/minecraft/mc-mods/controlling
+gitFirstCommit=b0ebaace2f1b7602c789ac71758fd8879cf43a5c
+gitRepo=https://github.com/jaredlll08/controlling
 
 # Gradle
 org.gradle.jvmargs=-Xmx3G

+ 0 - 17
settings.gradle

@@ -1,17 +0,0 @@
-pluginManagement {
-    repositories {
-        maven { url = 'https://maven.blamejared.com' }
-        gradlePluginPortal()
-        maven {
-            name = 'Fabric'
-            url = 'https://maven.fabricmc.net/'
-        }
-        maven {
-            name = 'Sponge Snapshots'
-            url = 'https://repo.spongepowered.org/repository/maven-public/'
-        }
-    }
-}
-
-rootProject.name = 'Controlling'
-include("Common", "Fabric", "Forge")

+ 26 - 0
settings.gradle.kts

@@ -0,0 +1,26 @@
+pluginManagement {
+    repositories {
+        maven("https://maven.blamejared.com")
+        gradlePluginPortal()
+        maven("https://maven.fabricmc.net/") {
+            name = "Fabric"
+        }
+        maven("https://repo.spongepowered.org/repository/maven-public/") {
+            name = "Sponge Snapshots"
+        }
+    }
+    resolutionStrategy {
+        eachPlugin {
+            if (requested.id.id == "net.minecraftforge.gradle") {
+                useModule("${requested.id}:ForgeGradle:${requested.version}")
+            }
+            if (requested.id.id == "org.spongepowered.mixin") {
+                useModule("org.spongepowered:mixingradle:${requested.version}")
+            }
+        }
+    }
+}
+rootProject.name = "Controlling"
+include("Common")
+include("Fabric")
+include("Forge")