@@ -7,13 +7,10 @@ import org.gradle.api.artifacts.dsl.DependencyHandler
7
7
import org.gradle.api.artifacts.dsl.RepositoryHandler
8
8
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
9
9
import org.gradle.api.plugins.ExtraPropertiesExtension
10
- import org.gradle.api.provider.Provider
11
- import org.gradle.kotlin.dsl.KotlinClosure0
12
10
import org.gradle.kotlin.dsl.extra
13
11
import org.gradle.kotlin.dsl.maven
14
- import ru.endlesscode.bukkitgradle.Bukkit
12
+ import ru.endlesscode.bukkitgradle.BukkitExtension
15
13
import ru.endlesscode.bukkitgradle.plugin.util.MinecraftVersion
16
- import ru.endlesscode.bukkitgradle.plugin.util.parsedApiVersion
17
14
18
15
private typealias RepositoryClosure = Closure <MavenArtifactRepository >
19
16
@@ -29,42 +26,40 @@ internal object Dependencies {
29
26
const val URL_AIKAR = " https://repo.aikar.co/content/groups/aikar/"
30
27
const val URL_CODEMC = " https://repo.codemc.org/repository/maven-public/"
31
28
32
- private lateinit var apiVersion : Provider < String >
33
- private lateinit var parsedApiVersion : Provider < MinecraftVersion >
29
+ const val BUKKIT_VERSION_PLACEHOLDER = " {bukkit.apiVersion} "
30
+ const val BUKKIT_VERSION_SUFFIX = " -R0.1-SNAPSHOT "
34
31
35
- private lateinit var repoHandler : RepositoryHandler
36
- private lateinit var depHandler : DependencyHandler
32
+ const val PAPER_GROUP = " io.papermc.paper "
33
+ const val PAPER_OLD_GROUP = " com.destroystokyo.paper "
37
34
38
35
private val RepositoryHandler .extra: ExtraPropertiesExtension
39
36
get() = InvokerHelper .getProperty(this , " ext" ) as ExtraPropertiesExtension
40
37
41
38
@JvmStatic
42
- fun Project.configureDependencyExtensions (bukkit : Bukkit ) {
43
- apiVersion = bukkit.apiVersion
44
- parsedApiVersion = bukkit.parsedApiVersion
39
+ fun Project.configureDependencyExtensions (bukkit : BukkitExtension ) {
40
+ repositories.addGroovyExtensions()
41
+ dependencies.addGroovyExtensions()
45
42
46
- repoHandler = repositories
47
- depHandler = dependencies
48
- addGroovyExtensions()
43
+ configureResolutionStrategy(bukkit)
49
44
}
50
45
51
- private fun addGroovyExtensions () {
52
- val repoExtra = repoHandler.extra
53
- repoExtra[ " spigot " ] = repoHandler. repositoryClosure(" Spigot " , URL_SPIGOT )
54
- repoExtra[ " sk89q " ] = repoHandler. repositoryClosure(" sk89q " , URL_SK89Q )
55
- repoExtra[ " papermc " ] = repoHandler. repositoryClosure(" PaperMC " , URL_PAPERMC )
56
- repoExtra[ " dmulloy2 " ] = repoHandler. repositoryClosure(" dmulloy2 " , URL_DMULLOY2 )
57
- repoExtra[ " md5 " ] = repoHandler. repositoryClosure(" md5 " , URL_MD5 )
58
- repoExtra[ " jitpack " ] = repoHandler. repositoryClosure(" jitpack " , URL_JITPACK )
59
- repoExtra[ " placeholderapi " ] = repoHandler. repositoryClosure(" PlaceholderAPI " , URL_PLACEHOLDERAPI )
60
- repoExtra[ " aikar " ] = repoHandler. repositoryClosure(" aikar " , URL_AIKAR )
61
- repoExtra[ " codemc " ] = repoHandler.repositoryClosure( " codemc " , URL_CODEMC )
62
-
63
- val depExtra = depHandler.extra
64
- depExtra [" spigot" ] = depClosureOf { depHandler.api (" org.spigotmc" , " spigot" ) }
65
- depExtra [" spigotApi" ] = depClosureOf { depHandler.api (" org.spigotmc" , " spigot-api" ) }
66
- depExtra [" bukkitApi" ] = depClosureOf { depHandler.api (" org.bukkit" , " bukkit" ) }
67
- depExtra [" paperApi" ] = depClosureOf { depHandler.api(resolvePaperGroupId() , " paper-api" ) }
46
+ private fun RepositoryHandler. addGroovyExtensions () {
47
+ extra[ " spigot " ] = repositoryClosure( " Spigot " , URL_SPIGOT )
48
+ extra[ " sk89q " ] = repositoryClosure(" sk89q " , URL_SK89Q )
49
+ extra[ " papermc " ] = repositoryClosure(" PaperMC " , URL_PAPERMC )
50
+ extra[ " dmulloy2 " ] = repositoryClosure(" dmulloy2 " , URL_DMULLOY2 )
51
+ extra[ " md5 " ] = repositoryClosure(" md5 " , URL_MD5 )
52
+ extra[ " jitpack " ] = repositoryClosure(" jitpack " , URL_JITPACK )
53
+ extra[ " placeholderapi " ] = repositoryClosure(" PlaceholderAPI " , URL_PLACEHOLDERAPI )
54
+ extra[ " aikar " ] = repositoryClosure(" aikar " , URL_AIKAR )
55
+ extra[ " codemc " ] = repositoryClosure(" codemc " , URL_CODEMC )
56
+ }
57
+
58
+ private fun DependencyHandler. addGroovyExtensions () {
59
+ extra [" spigot" ] = withBukkitVersion (" org.spigotmc" , " spigot" )
60
+ extra [" spigotApi" ] = withBukkitVersion (" org.spigotmc" , " spigot-api" )
61
+ extra [" bukkitApi" ] = withBukkitVersion (" org.bukkit" , " bukkit" )
62
+ extra [" paperApi" ] = withBukkitVersion( PAPER_GROUP , " paper-api" )
68
63
}
69
64
70
65
private fun RepositoryHandler.repositoryClosure (name : String , url : String ): RepositoryClosure =
@@ -84,20 +79,39 @@ internal object Dependencies {
84
79
}
85
80
}
86
81
87
- @Suppress(" unused" ) // Receiver required for scope
88
- fun DependencyHandler.api (groupId : String , artifactId : String ): String {
89
- val version = " ${apiVersion.get()} -R0.1-SNAPSHOT"
90
- return dep(groupId, artifactId, version)
91
- }
92
-
93
- private fun dep (groupId : String , artifactId : String , version : String ): String {
94
- return " $groupId :$artifactId :$version "
82
+ fun withBukkitVersion (groupId : String , artifactId : String ): String {
83
+ return " $groupId :$artifactId :$BUKKIT_VERSION_PLACEHOLDER "
95
84
}
96
85
97
- internal fun resolvePaperGroupId (): String {
98
- val useNewGroup = parsedApiVersion.get() >= MinecraftVersion .V1_17_0
99
- return if (useNewGroup) " io.papermc.paper" else " com.destroystokyo.paper"
86
+ private fun Project.configureResolutionStrategy (bukkit : BukkitExtension ) {
87
+ val bukkitVersion = bukkit.finalApiVersion
88
+ .map { " $it$BUKKIT_VERSION_SUFFIX " }
89
+
90
+ configurations.configureEach {
91
+ resolutionStrategy.eachDependency {
92
+ val version = if (requested.version == BUKKIT_VERSION_PLACEHOLDER ) {
93
+ bukkitVersion.get()
94
+ } else {
95
+ requested.version
96
+ }
97
+
98
+ val shouldUseOldPaperGroup by lazy {
99
+ version != null && MinecraftVersion .parse(version) < MinecraftVersion .V1_17_0
100
+ }
101
+ val group = when (requested.group) {
102
+ PAPER_GROUP -> if (shouldUseOldPaperGroup) PAPER_OLD_GROUP else requested.group
103
+ PAPER_OLD_GROUP -> if (! shouldUseOldPaperGroup) PAPER_GROUP else requested.group
104
+ else -> requested.group
105
+ }
106
+
107
+ if (requested.group != group) {
108
+ useTarget(" $group :${requested.name} :$version " )
109
+ because(" Fix paper group as it was changed in 1.17" )
110
+ } else if (requested.version != version && version != null ) {
111
+ useVersion(version)
112
+ because(" Substitute bukkit version" )
113
+ }
114
+ }
115
+ }
100
116
}
101
-
102
- private fun depClosureOf (body : () -> String ) = KotlinClosure0 (body)
103
117
}
0 commit comments