Skip to content

Commit 0eef34a

Browse files
committed
feat: Set minimal JVM version for RunServer task
1 parent e19d7dc commit 0eef34a

File tree

3 files changed

+37
-14
lines changed

3 files changed

+37
-14
lines changed

src/main/kotlin/BukkitGradlePlugin.kt

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import org.gradle.api.Plugin
44
import org.gradle.api.Project
55
import org.gradle.api.plugins.JavaPluginExtension
66
import org.gradle.api.tasks.compile.JavaCompile
7-
import org.gradle.jvm.toolchain.JavaLanguageVersion
87
import org.gradle.kotlin.dsl.*
98
import ru.endlesscode.bukkitgradle.dependencies.Dependencies
109
import ru.endlesscode.bukkitgradle.meta.PluginMetaPlugin
1110
import ru.endlesscode.bukkitgradle.meta.extension.PluginMetaImpl
1211
import ru.endlesscode.bukkitgradle.meta.util.MinecraftVersion
1312
import ru.endlesscode.bukkitgradle.meta.util.StringUtils
1413
import ru.endlesscode.bukkitgradle.meta.util.parsedApiVersion
14+
import ru.endlesscode.bukkitgradle.meta.util.resolveMinimalJavaVersion
1515
import ru.endlesscode.bukkitgradle.server.DevServerPlugin
1616
import ru.endlesscode.bukkitgradle.server.extension.ServerConfigurationImpl
1717

@@ -77,14 +77,4 @@ public class BukkitGradlePlugin : Plugin<Project> {
7777
version < MinecraftVersion.V1_20_5 -> version.withoutPatch().toString()
7878
else -> version.toString()
7979
}
80-
81-
private fun resolveMinimalJavaVersion(version: MinecraftVersion): JavaLanguageVersion = when {
82-
// https://minecraft.wiki/w/Java_Edition_1.20.5#General_2
83-
version >= MinecraftVersion.V1_20_5 -> JavaLanguageVersion.of(21)
84-
// https://minecraft.wiki/w/Java_Edition_1.18#General_2
85-
version >= MinecraftVersion.V1_18_0 -> JavaLanguageVersion.of(17)
86-
// https://minecraft.wiki/w/Java_Edition_1.17#General_2
87-
version >= MinecraftVersion.V1_17_0 -> JavaLanguageVersion.of(16)
88-
else -> JavaLanguageVersion.of(8)
89-
}
9080
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package ru.endlesscode.bukkitgradle.meta.util
22

3+
import org.gradle.jvm.toolchain.JavaLanguageVersion
34
import ru.endlesscode.bukkitgradle.Bukkit
45

56
@JvmInline
@@ -29,3 +30,15 @@ internal value class MinecraftVersion(private val value: Int) : Comparable<Minec
2930
}
3031

3132
internal val Bukkit.parsedApiVersion get() = apiVersion.map(MinecraftVersion::parse)
33+
34+
internal fun resolveMinimalJavaVersion(version: String) = resolveMinimalJavaVersion(MinecraftVersion.parse(version))
35+
36+
internal fun resolveMinimalJavaVersion(version: MinecraftVersion): JavaLanguageVersion = when {
37+
// https://minecraft.wiki/w/Java_Edition_1.20.5#General_2
38+
version >= MinecraftVersion.V1_20_5 -> JavaLanguageVersion.of(21)
39+
// https://minecraft.wiki/w/Java_Edition_1.18#General_2
40+
version >= MinecraftVersion.V1_18_0 -> JavaLanguageVersion.of(17)
41+
// https://minecraft.wiki/w/Java_Edition_1.17#General_2
42+
version >= MinecraftVersion.V1_17_0 -> JavaLanguageVersion.of(16)
43+
else -> JavaLanguageVersion.of(8)
44+
}

src/main/kotlin/server/DevServerPlugin.kt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package ru.endlesscode.bukkitgradle.server
33
import org.gradle.api.Plugin
44
import org.gradle.api.Project
55
import org.gradle.api.file.Directory
6+
import org.gradle.api.plugins.JavaPluginExtension
67
import org.gradle.api.provider.Provider
78
import org.gradle.api.tasks.TaskContainer
89
import org.gradle.api.tasks.TaskProvider
9-
import org.gradle.kotlin.dsl.apply
10-
import org.gradle.kotlin.dsl.named
11-
import org.gradle.kotlin.dsl.register
10+
import org.gradle.jvm.toolchain.JavaToolchainService
11+
import org.gradle.kotlin.dsl.*
1212
import ru.endlesscode.bukkitgradle.Bukkit
1313
import ru.endlesscode.bukkitgradle.bukkit
14+
import ru.endlesscode.bukkitgradle.meta.util.resolveMinimalJavaVersion
1415
import ru.endlesscode.bukkitgradle.server.extension.ServerConfiguration
1516
import ru.endlesscode.bukkitgradle.server.task.CreateIdeaGradleRunConfiguration
1617
import ru.endlesscode.bukkitgradle.server.task.PrepareServer
@@ -52,12 +53,31 @@ public class DevServerPlugin : Plugin<Project> {
5253
}
5354
}
5455

56+
// RunPaperPlugin uses afterEvaluate under the hood, so we have to use afterEvaluate
57+
// to set our conventions after theirs
58+
project.afterEvaluate { configureDefaultJvmForServer() }
59+
5560
val prepareServer = registerPrepareServerTask(runServer)
5661
runServer.configure { dependsOn(prepareServer) }
5762

5863
registerBuildIdeRunTask(runServer)
5964
}
6065

66+
private fun Project.configureDefaultJvmForServer() {
67+
val toolchains = project.extensions.findByType<JavaToolchainService>() ?: return
68+
val spec = the<JavaPluginExtension>().toolchain
69+
70+
tasks.withType<RunServer>().configureEach {
71+
javaLauncher.convention(
72+
toolchains.launcherFor {
73+
languageVersion.convention(version.map(::resolveMinimalJavaVersion))
74+
implementation.convention(spec.implementation)
75+
vendor.convention(spec.vendor)
76+
}
77+
)
78+
}
79+
}
80+
6181
private fun Project.resolveConfiguredServerDir(): Provider<Directory>? {
6282
val deprecated = DeprecatedServerProperties(rootDir, providers)
6383

0 commit comments

Comments
 (0)