Skip to content

Commit 77aa485

Browse files
committed
feat: Uze lazy API for BukkitExtension fields
Fixes #59
1 parent c52f290 commit 77aa485

File tree

10 files changed

+54
-23
lines changed

10 files changed

+54
-23
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- Set the default [JVM toolchain](https://docs.gradle.org/current/userguide/toolchains.html) version
1010
instead of setting JVM target and source compatibility to 1.8.
1111
The default JVM version depends on [Paper requirements](https://docs.papermc.io/paper/getting-started#requirements).
12+
- Use lazy API for `bukkit.apiVersion` and `bukkit.generateMeta` properties.
1213

1314
### Fixed
1415

src/main/kotlin/Bukkit.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ru.endlesscode.bukkitgradle
22

3+
import org.gradle.api.provider.Provider
34
import ru.endlesscode.bukkitgradle.meta.extension.PluginMeta
45
import ru.endlesscode.bukkitgradle.server.extension.ServerConfiguration
56

@@ -12,8 +13,8 @@ public interface Bukkit {
1213
public val server: ServerConfiguration
1314

1415
/** Bukkit version. */
15-
public val apiVersion: String
16+
public val apiVersion: Provider<String>
1617

1718
/** Plugin Meta generation enabled. */
18-
public val generateMeta: Boolean
19+
public val generateMeta: Provider<Boolean>
1920
}

src/main/kotlin/BukkitExtension.kt

+18-6
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,35 @@ package ru.endlesscode.bukkitgradle
22

33
import org.gradle.api.Action
44
import org.gradle.api.Project
5+
import org.gradle.api.model.ObjectFactory
6+
import org.gradle.api.provider.Property
7+
import org.gradle.api.provider.Provider
8+
import org.gradle.kotlin.dsl.assign
59
import org.gradle.kotlin.dsl.getByType
10+
import org.gradle.kotlin.dsl.property
611
import org.slf4j.LoggerFactory
12+
import ru.endlesscode.bukkitgradle.extensions.finalizedOnRead
713
import ru.endlesscode.bukkitgradle.extensions.warnSyntaxChanged
814
import ru.endlesscode.bukkitgradle.meta.extension.PluginMetaImpl
915
import ru.endlesscode.bukkitgradle.server.ServerConstants
1016
import ru.endlesscode.bukkitgradle.server.extension.ServerConfigurationImpl
1117

1218
// TODO 1.0: Remove deprecated fields on release
13-
public open class BukkitExtension(
19+
public open class BukkitExtension internal constructor(
1420
public final override val meta: PluginMetaImpl,
15-
public final override val server: ServerConfigurationImpl
21+
public final override val server: ServerConfigurationImpl,
22+
objects: ObjectFactory,
1623
) : Bukkit {
1724

18-
public final override var apiVersion: String = ServerConstants.DEFAULT_VERSION
25+
public final override val apiVersion: Property<String> = objects.property<String>()
26+
.convention(ServerConstants.DEFAULT_VERSION)
27+
.finalizedOnRead()
1928

20-
public final override var generateMeta: Boolean = true
21-
private set
29+
private val _generateMeta: Property<Boolean> = objects.property<Boolean>()
30+
.convention(true)
31+
.finalizedOnRead()
32+
33+
public final override val generateMeta: Provider<Boolean> = _generateMeta
2234

2335
private val logger = LoggerFactory.getLogger("BukkitExtension")
2436

@@ -51,7 +63,7 @@ public open class BukkitExtension(
5163

5264
/** Disabled plugin.yml generation. */
5365
public fun disableMetaGeneration() {
54-
generateMeta = false
66+
_generateMeta = false
5567
}
5668
}
5769

src/main/kotlin/BukkitGradlePlugin.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class BukkitGradlePlugin : Plugin<Project> {
4040

4141
extensions.configure<JavaPluginExtension> {
4242
toolchain {
43-
languageVersion.convention(provider { resolveRecommendedJavaVersion(bukkit.parsedApiVersion) })
43+
languageVersion.convention(bukkit.parsedApiVersion.map(::resolveRecommendedJavaVersion))
4444
}
4545
}
4646
}
@@ -51,7 +51,7 @@ public class BukkitGradlePlugin : Plugin<Project> {
5151
description.convention(provider { project.description })
5252
main.convention(name.map { "${project.group}.${StringUtils.toPascalCase(it)}" })
5353
version.convention(provider { project.version.toString() })
54-
apiVersion.convention(provider { resolveDefaultApiVersion(bukkit.parsedApiVersion) })
54+
apiVersion.convention(provider { bukkit.parsedApiVersion.get() }.map(::resolveDefaultApiVersion))
5555
url.convention(provider { providers.gradleProperty("url").orNull })
5656
}
5757
}
@@ -70,9 +70,9 @@ public class BukkitGradlePlugin : Plugin<Project> {
7070
}
7171
}
7272

73-
private fun resolveDefaultApiVersion(version: MinecraftVersion): String? = when {
73+
private fun resolveDefaultApiVersion(version: MinecraftVersion): String = when {
7474
// "API version" has been introduced in Spigot 1.13
75-
version < MinecraftVersion.V1_13_0 -> null
75+
version < MinecraftVersion.V1_13_0 -> ""
7676
// From 1.20.5 and onward, a patch version is supported.
7777
version < MinecraftVersion.V1_20_5 -> version.withoutPatch().toString()
7878
else -> version.toString()

src/main/kotlin/dependencies/Dependencies.kt

+10-4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.gradle.api.artifacts.dsl.DependencyHandler
77
import org.gradle.api.artifacts.dsl.RepositoryHandler
88
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
99
import org.gradle.api.plugins.ExtraPropertiesExtension
10+
import org.gradle.api.provider.Provider
1011
import org.gradle.kotlin.dsl.KotlinClosure0
1112
import org.gradle.kotlin.dsl.closureOf
1213
import org.gradle.kotlin.dsl.extra
@@ -27,7 +28,9 @@ internal object Dependencies {
2728
const val URL_AIKAR = "https://repo.aikar.co/content/groups/aikar/"
2829
const val URL_CODEMC = "https://repo.codemc.org/repository/maven-public/"
2930

30-
private lateinit var project: Project
31+
private lateinit var apiVersion: Provider<String>
32+
private lateinit var parsedApiVersion: Provider<MinecraftVersion>
33+
3134
private lateinit var repoHandler: RepositoryHandler
3235
private lateinit var depHandler: DependencyHandler
3336

@@ -36,7 +39,10 @@ internal object Dependencies {
3639

3740
@JvmStatic
3841
fun configureProject(project: Project) {
39-
Dependencies.project = project
42+
val bukkit = project.bukkit
43+
apiVersion = bukkit.apiVersion
44+
parsedApiVersion = bukkit.parsedApiVersion
45+
4046
repoHandler = project.repositories
4147
depHandler = project.dependencies
4248
addGroovyExtensions()
@@ -74,7 +80,7 @@ internal object Dependencies {
7480

7581
@Suppress("unused") // Receiver required for scope
7682
fun DependencyHandler.api(groupId: String, artifactId: String, vararg requiredRepos: String): String {
77-
val version = "${project.bukkit.apiVersion}-R0.1-SNAPSHOT"
83+
val version = "${apiVersion.get()}-R0.1-SNAPSHOT"
7884
return dep(groupId, artifactId, version, *requiredRepos)
7985
}
8086

@@ -91,7 +97,7 @@ internal object Dependencies {
9197
}
9298

9399
internal fun resolvePaperGroupId(): String {
94-
val useNewGroup = project.bukkit.parsedApiVersion >= MinecraftVersion.V1_17_0
100+
val useNewGroup = parsedApiVersion.get() >= MinecraftVersion.V1_17_0
95101
return if (useNewGroup) "io.papermc.paper" else "com.destroystokyo.paper"
96102
}
97103

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ru.endlesscode.bukkitgradle.extensions
2+
3+
import org.gradle.api.provider.Property
4+
5+
internal fun <T> Property<T>.finalizedOnRead(): Property<T> = apply { finalizeValueOnRead() }

src/main/kotlin/meta/PluginMetaPlugin.kt

+10-4
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,26 @@ public class PluginMetaPlugin : Plugin<Project> {
3030
val metaFile = project.findMetaFile()
3131

3232
val parsePluginMeta = project.tasks.register<ParsePluginMetaFile>("parsePluginMetaFile") {
33+
val bukkit = project.bukkit
34+
3335
this.yaml = yaml
34-
this.meta = project.bukkit.meta as PluginMetaImpl
36+
this.meta = bukkit.meta as PluginMetaImpl
3537
this.metaFile.set(metaFile)
3638

37-
onlyIf { project.bukkit.generateMeta }
39+
val generateMeta = bukkit.generateMeta
40+
onlyIf { generateMeta.get() }
3841
}
3942

4043
val mergePluginMeta = project.tasks.register<MergePluginMeta>("mergePluginMeta") {
44+
val bukkit = project.bukkit
45+
4146
this.yaml = yaml
42-
meta = project.bukkit.meta
47+
this.meta = bukkit.meta
4348
metaYaml.set(parsePluginMeta.map { it.pluginMetaYaml.get() })
4449
dependsOn(parsePluginMeta)
4550

46-
onlyIf { project.bukkit.generateMeta }
51+
val generateMeta = bukkit.generateMeta
52+
onlyIf { generateMeta.get() }
4753
}
4854

4955
project.tasks.named<CopySpec>("processResources").configure {

src/main/kotlin/meta/task/MergePluginMeta.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public abstract class MergePluginMeta @Inject internal constructor(
5353
name = meta.name.get(),
5454
description = meta.description.orNull,
5555
version = meta.version.get(),
56-
apiVersion = meta.apiVersion.orNull,
56+
apiVersion = meta.apiVersion.orNull?.takeIf { it.isNotEmpty() },
5757
website = meta.url.orNull,
5858
authors = meta.authors.get().takeIf { it.isNotEmpty() }
5959
)

src/main/kotlin/meta/util/MinecraftVersion.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ internal value class MinecraftVersion(private val value: Int) : Comparable<Minec
3030
}
3131
}
3232

33-
internal val Bukkit.parsedApiVersion get() = MinecraftVersion.parse(apiVersion)
33+
internal val Bukkit.parsedApiVersion get() = apiVersion.map(MinecraftVersion::parse)

src/main/kotlin/server/DevServerPlugin.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class DevServerPlugin : Plugin<Project> {
4040
bukkit = project.bukkit
4141

4242
val properties = ServerProperties(project.rootDir, project.providers)
43-
val coreVersion = project.provider { serverConfiguration.version ?: bukkit.apiVersion }
43+
val coreVersion = project.provider<String> { serverConfiguration.version }.orElse(bukkit.apiVersion)
4444
val serverDir = project.layout.dir(coreVersion.map { File(properties.devServerDir, it) })
4545
val buildToolsDir = project.provider { properties.buildToolsDir }
4646

0 commit comments

Comments
 (0)