build.gradle.kts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import com.blamejared.modtemplate.Utils
  2. import groovy.namespace.QName
  3. import groovy.util.Node
  4. import groovy.util.NodeList
  5. import net.darkhax.curseforgegradle.TaskPublishCurseForge
  6. import net.darkhax.curseforgegradle.Constants as CFG_Constants
  7. plugins {
  8. `maven-publish`
  9. id("net.minecraftforge.gradle") version ("5.1.+")
  10. id("org.parchmentmc.librarian.forgegradle") version ("1.+")
  11. id("org.spongepowered.mixin") version ("0.7-SNAPSHOT")
  12. id("com.blamejared.modtemplate")
  13. id("net.darkhax.curseforgegradle") version ("1.0.8")
  14. }
  15. val modVersion: String by project
  16. val minecraftVersion: String by project
  17. val forgeVersion: String by project
  18. val forgeAtsEnabled: String by project
  19. val modName: String by project
  20. val modAuthor: String by project
  21. val modId: String by project
  22. val modAvatar: String by project
  23. val curseProjectId: String by project
  24. val curseHomepageLink: String by project
  25. val gitFirstCommit: String by project
  26. val gitRepo: String by project
  27. val modJavaVersion: String by project
  28. val baseArchiveName = "${modName}-forge-${minecraftVersion}"
  29. version = Utils.updatingSemVersion(modVersion)
  30. base {
  31. archivesName.set(baseArchiveName)
  32. }
  33. mixin {
  34. add(sourceSets.main.get(), "${modId}.refmap.json")
  35. config("${modId}.mixins.json")
  36. config("${modId}.forge.mixins.json")
  37. }
  38. minecraft {
  39. mappings("parchment", "2021.12.19-1.18.1")
  40. runs {
  41. create("client") {
  42. taskName("Client")
  43. workingDirectory(project.file("run"))
  44. ideaModule("${rootProject.name}.${project.name}.main")
  45. args("-mixin.config=${modId}.mixins.json")
  46. mods {
  47. create(modId) {
  48. source(sourceSets.main.get())
  49. source(project(":Common").sourceSets.main.get())
  50. }
  51. }
  52. }
  53. create("server") {
  54. taskName("Server")
  55. workingDirectory(project.file("run_server"))
  56. ideaModule("${rootProject.name}.${project.name}.main")
  57. args("-mixin.config=${modId}.mixins.json", "nogui")
  58. mods {
  59. create(modId) {
  60. source(sourceSets.main.get())
  61. source(project(":Common").sourceSets.main.get())
  62. }
  63. }
  64. }
  65. create("data") {
  66. taskName("Data")
  67. workingDirectory(project.file("run"))
  68. ideaModule("${rootProject.name}.${project.name}.main")
  69. args(
  70. "--mod",
  71. modId,
  72. "--all",
  73. "--output",
  74. file("src/generated/resources/"),
  75. "--existing",
  76. file("src/main/resources/")
  77. )
  78. args("-mixin.config=${modId}.mixins.json")
  79. mods {
  80. create(modId) {
  81. source(sourceSets.main.get())
  82. source(project(":Common").sourceSets.main.get())
  83. }
  84. }
  85. }
  86. }
  87. }
  88. modTemplate {
  89. mcVersion(minecraftVersion)
  90. curseHomepage(curseHomepageLink)
  91. displayName(modName)
  92. modLoader("Forge")
  93. changelog {
  94. enabled(true)
  95. firstCommit(gitFirstCommit)
  96. repo(gitRepo)
  97. }
  98. versionTracker {
  99. enabled(true)
  100. author(modAuthor)
  101. projectName("${modName}-Forge")
  102. homepage(curseHomepageLink)
  103. }
  104. }
  105. sourceSets.main.get().resources.srcDir("src/generated/resources")
  106. dependencies {
  107. "minecraft"("net.minecraftforge:forge:${minecraftVersion}-${forgeVersion}")
  108. compileOnly(project(":Common"))
  109. annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor")
  110. }
  111. tasks.withType<JavaCompile> {
  112. source(project(":Common").sourceSets.main.get().allSource)
  113. }
  114. tasks.processResources {
  115. outputs.upToDateWhen { false }
  116. from(project(":Common").sourceSets.main.get().resources)
  117. filesMatching("*.mixins.json") {
  118. expand("refmap_target" to "${modId}.")
  119. }
  120. }
  121. tasks {
  122. jar {
  123. finalizedBy("reobfJar")
  124. }
  125. }
  126. publishing {
  127. publications {
  128. register("mavenJava", MavenPublication::class) {
  129. artifactId = baseArchiveName
  130. from(components["java"])
  131. pom.withXml {
  132. val depNodeList = asNode()["dependencies"] as NodeList
  133. depNodeList.map { it as Node }.forEach { depList ->
  134. val deps = depList.getAt(QName("http://maven.apache.org/POM/4.0.0", "dependency"))
  135. deps.map { it as Node }.forEach { dep ->
  136. val versionList = dep.getAt(QName("http://maven.apache.org/POM/4.0.0", "version"))
  137. versionList.map { it as Node }.map { it.value() as NodeList }.map { it.text() }
  138. .forEach { version ->
  139. if (version.contains("_mapped_")) {
  140. dep.parent().remove(dep)
  141. }
  142. }
  143. }
  144. }
  145. }
  146. }
  147. }
  148. repositories {
  149. maven("file://${System.getenv("local_maven")}")
  150. }
  151. }
  152. tasks.create<TaskPublishCurseForge>("publishCurseForge") {
  153. apiToken = Utils.locateProperty(project, "curseforge_api_token") ?: 0
  154. val mainFile = upload(curseProjectId, file("${project.buildDir}/libs/$baseArchiveName-$version.jar"))
  155. mainFile.changelogType = "markdown"
  156. mainFile.changelog = Utils.getFullChangelog(project)
  157. mainFile.releaseType = CFG_Constants.RELEASE_TYPE_RELEASE
  158. mainFile.addJavaVersion("Java $modJavaVersion")
  159. doLast {
  160. project.ext.set("curse_file_url", "${curseHomepageLink}/files/${mainFile.curseFileId}")
  161. }
  162. }