@@ -3,108 +3,126 @@ package dev.mythicdrops.gradle.spigot
33import org.gradle.api.DefaultTask
44import org.gradle.api.file.FileSystemOperations
55import org.gradle.api.file.RegularFileProperty
6+ import org.gradle.api.plugins.JavaPluginExtension
67import org.gradle.api.provider.Property
78import org.gradle.api.services.ServiceReference
89import org.gradle.api.tasks.Input
910import org.gradle.api.tasks.InputFile
11+ import org.gradle.api.tasks.Nested
1012import org.gradle.api.tasks.TaskAction
13+ import org.gradle.jvm.toolchain.JavaLauncher
14+ import org.gradle.jvm.toolchain.JavaToolchainService
15+ import org.gradle.kotlin.dsl.getByType
1116import org.gradle.process.ExecOperations
1217import java.io.File
1318import java.nio.file.Paths
1419import javax.inject.Inject
1520
16- abstract class RunSpigotBuildToolsTask
17- @Inject
18- constructor (
19- private val execOperations: ExecOperations ,
20- private val fileSystemOperations: FileSystemOperations ,
21- ) : DefaultTask () {
22- @get:ServiceReference(SyncTaskBuildService .NAME )
23- abstract val syncTask: Property <SyncTaskBuildService >
21+ abstract class RunSpigotBuildToolsTask : DefaultTask () {
22+ @get:ServiceReference(SyncTaskBuildService .NAME )
23+ abstract val syncTask: Property <SyncTaskBuildService >
2424
25- @get:InputFile
26- abstract val buildToolsLocation: RegularFileProperty
25+ @get:InputFile
26+ abstract val buildToolsLocation: RegularFileProperty
2727
28- @get:Input
29- abstract val includeRemapped: Property <Boolean >
28+ @get:Input
29+ abstract val includeRemapped: Property <Boolean >
3030
31- @get:Input
32- abstract val version: Property <String >
31+ @get:Input
32+ abstract val version: Property <String >
3333
34- init {
35- description = " Runs Spigot BuildTools.jar for a specific Minecraft version"
36- group = " spigot"
34+ @get:Nested
35+ abstract val launcher: Property <JavaLauncher >
36+
37+ @get:Inject
38+ abstract val execOperations: ExecOperations
39+
40+ @get:Inject
41+ abstract val fileSystemOperations: FileSystemOperations
42+
43+ @get:Inject
44+ abstract val javaToolchainService: JavaToolchainService
45+
46+ init {
47+ description = " Runs Spigot BuildTools.jar for a specific Minecraft version"
48+ group = " spigot"
49+
50+ val toolchain = project.extensions.getByType<JavaPluginExtension >().toolchain
51+ val defaultLauncher = javaToolchainService.launcherFor(toolchain)
52+ launcher.convention(defaultLauncher)
53+ }
54+
55+ @TaskAction
56+ fun runSpigotBuildTools () {
57+ val version = version.getOrElse(" " )
58+ if (version.isBlank()) {
59+ logger.lifecycle(" Not running Spigot build tools as the version is blank" )
60+ return
3761 }
3862
39- @TaskAction
40- fun runSpigotBuildTools () {
41- val version = version.getOrElse(" " )
42- if (version.isBlank()) {
43- logger.lifecycle(" Not running Spigot build tools as the version is blank" )
44- return
45- }
46-
47- val mavenLocalDirectory = Paths .get(project.repositories.mavenLocal().url).toFile()
48- if (! mavenLocalDirectory.exists()) {
49- logger.lifecycle(" Creating Maven Local repository at ${mavenLocalDirectory.absolutePath} " )
50- mavenLocalDirectory.mkdirs()
51- }
52-
53- normalVersion(mavenLocalDirectory, version)
54- if (includeRemapped.getOrElse(false )) {
55- remappedVersion(mavenLocalDirectory, version)
56- }
63+ val mavenLocalDirectory = Paths .get(project.repositories.mavenLocal().url).toFile()
64+ if (! mavenLocalDirectory.exists()) {
65+ logger.lifecycle(" Creating Maven Local repository at ${mavenLocalDirectory.absolutePath} " )
66+ mavenLocalDirectory.mkdirs()
5767 }
5868
59- private fun normalVersion (
60- mavenLocalDirectory : File ,
61- version : String ,
62- ) {
63- val versionJar =
64- mavenLocalDirectory.resolve(
65- " org/spigotmc/spigot/$version -R0.1-SNAPSHOT/spigot-$version -R0.1-SNAPSHOT.jar" ,
66- )
67- if (versionJar.exists()) {
68- logger.lifecycle(" Skipping $version as Spigot JAR is found at ${versionJar.absolutePath} " )
69- return
70- }
71- val jar = buildToolsLocation.get().asFile
72- val versionDir = jar.parentFile.resolve(version)
73- fileSystemOperations.copy {
74- from(jar)
75- into(versionDir)
76- }
77- execOperations.javaexec {
78- args(listOf (" --rev" , version))
79- workingDir = versionDir.absoluteFile
80- jvmArgs = listOf (" -Xmx1024M" )
81- classpath(buildToolsLocation)
82- }
69+ normalVersion(mavenLocalDirectory, version)
70+ if (includeRemapped.getOrElse(false )) {
71+ remappedVersion(mavenLocalDirectory, version)
8372 }
73+ }
8474
85- private fun remappedVersion (
86- mavenLocalDirectory : File ,
87- version : String ,
88- ) {
89- val versionJar =
90- mavenLocalDirectory.resolve(
91- " org/spigotmc/spigot/$version -R0.1-SNAPSHOT/spigot-$version -R0.1-SNAPSHOT-remapped-mojang.jar" ,
92- )
93- if (versionJar.exists()) {
94- logger.lifecycle(" Skipping $version as Spigot remapped JAR is found at ${versionJar.absolutePath} " )
95- return
96- }
97- val jar = buildToolsLocation.get().asFile
98- val versionDir = jar.parentFile.resolve(version)
99- fileSystemOperations.copy {
100- from(jar)
101- into(versionDir)
102- }
103- execOperations.javaexec {
104- args(listOf (" --rev" , version, " --remapped" ))
105- workingDir = versionDir.absoluteFile
106- jvmArgs = listOf (" -Xmx1024M" )
107- classpath(buildToolsLocation)
108- }
75+ private fun normalVersion (
76+ mavenLocalDirectory : File ,
77+ version : String ,
78+ ) {
79+ val versionJar =
80+ mavenLocalDirectory.resolve(
81+ " org/spigotmc/spigot/$version -R0.1-SNAPSHOT/spigot-$version -R0.1-SNAPSHOT.jar" ,
82+ )
83+ if (versionJar.exists()) {
84+ logger.lifecycle(" Skipping $version as Spigot JAR is found at ${versionJar.absolutePath} " )
85+ return
86+ }
87+ val jar = buildToolsLocation.get().asFile
88+ val versionDir = jar.parentFile.resolve(version)
89+ fileSystemOperations.copy {
90+ from(jar)
91+ into(versionDir)
92+ }
93+ execOperations.javaexec {
94+ args(listOf (" --rev" , version))
95+ workingDir = versionDir.absoluteFile
96+ jvmArgs = listOf (" -Xmx1024M" )
97+ classpath(buildToolsLocation)
98+ executable(launcher.get().executablePath)
99+ }
100+ }
101+
102+ private fun remappedVersion (
103+ mavenLocalDirectory : File ,
104+ version : String ,
105+ ) {
106+ val versionJar =
107+ mavenLocalDirectory.resolve(
108+ " org/spigotmc/spigot/$version -R0.1-SNAPSHOT/spigot-$version -R0.1-SNAPSHOT-remapped-mojang.jar" ,
109+ )
110+ if (versionJar.exists()) {
111+ logger.lifecycle(" Skipping $version as Spigot remapped JAR is found at ${versionJar.absolutePath} " )
112+ return
113+ }
114+ val jar = buildToolsLocation.get().asFile
115+ val versionDir = jar.parentFile.resolve(version)
116+ fileSystemOperations.copy {
117+ from(jar)
118+ into(versionDir)
119+ }
120+ execOperations.javaexec {
121+ args(listOf (" --rev" , version, " --remapped" ))
122+ workingDir = versionDir.absoluteFile
123+ jvmArgs = listOf (" -Xmx1024M" )
124+ classpath(buildToolsLocation)
125+ executable(launcher.get().executablePath)
109126 }
110127 }
128+ }
0 commit comments