build.gradle.kts 5.5 KB

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