Skip to content

Commit 696db9a

Browse files
committed
refactor: Replace DevServerPlugin with a top-level function
1 parent 922173a commit 696db9a

File tree

4 files changed

+93
-116
lines changed

4 files changed

+93
-116
lines changed

src/main/kotlin/BukkitGradlePlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import ru.endlesscode.bukkitgradle.extensions.java
1111
import ru.endlesscode.bukkitgradle.plugin.configurePluginYamlFeature
1212
import ru.endlesscode.bukkitgradle.plugin.util.parsedApiVersion
1313
import ru.endlesscode.bukkitgradle.plugin.util.resolveMinimalJavaVersion
14-
import ru.endlesscode.bukkitgradle.server.DevServerPlugin
14+
import ru.endlesscode.bukkitgradle.server.configureDevServerFeature
1515
import ru.endlesscode.bukkitgradle.server.extension.ServerConfigurationImpl
1616

1717
public class BukkitGradlePlugin : Plugin<Project> {
@@ -39,7 +39,7 @@ public class BukkitGradlePlugin : Plugin<Project> {
3939
)
4040

4141
configurePluginYamlFeature(bukkit)
42-
apply<DevServerPlugin>()
42+
configureDevServerFeature(bukkit)
4343

4444
java.toolchain {
4545
languageVersion.convention(bukkit.parsedApiVersion.map(::resolveMinimalJavaVersion))
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package ru.endlesscode.bukkitgradle.server
2+
3+
import org.gradle.api.Project
4+
import org.gradle.api.file.Directory
5+
import org.gradle.api.provider.Provider
6+
import org.gradle.api.tasks.TaskProvider
7+
import org.gradle.jvm.toolchain.JavaToolchainService
8+
import org.gradle.kotlin.dsl.*
9+
import ru.endlesscode.bukkitgradle.Bukkit
10+
import ru.endlesscode.bukkitgradle.extensions.java
11+
import ru.endlesscode.bukkitgradle.plugin.util.resolveMinimalJavaVersion
12+
import ru.endlesscode.bukkitgradle.server.extension.ServerConfiguration
13+
import ru.endlesscode.bukkitgradle.server.task.CreateIdeaGradleRunConfiguration
14+
import ru.endlesscode.bukkitgradle.server.task.PrepareServer
15+
import xyz.jpenilla.runpaper.RunPaperPlugin
16+
import xyz.jpenilla.runpaper.task.RunServer
17+
18+
internal fun Project.configureDevServerFeature(bukkit: Bukkit) {
19+
apply<RunPaperPlugin>()
20+
val configuredServerDir = resolveConfiguredServerDir()
21+
22+
// Preconfigure the RunServer task
23+
val serverConfiguration = bukkit.server
24+
val serverVersion = provider<String> { serverConfiguration.version }.orElse(bukkit.apiVersion)
25+
val runServer = tasks.named<RunServer>("runServer") {
26+
version.convention(serverVersion)
27+
if (configuredServerDir != null) runDirectory.convention(configuredServerDir)
28+
jvmArgs(serverConfiguration.buildJvmArgs())
29+
args(serverConfiguration.bukkitArgs)
30+
31+
defaultCharacterEncoding = serverConfiguration.encoding
32+
debugOptions {
33+
enabled.convention(serverConfiguration.debug)
34+
suspend.convention(false)
35+
}
36+
}
37+
38+
// RunPaperPlugin uses afterEvaluate under the hood, so we have to use afterEvaluate
39+
// to set our conventions after their ones
40+
afterEvaluate { configureDefaultJvmForServer() }
41+
42+
val prepareServer = registerPrepareServerTask(serverConfiguration, runServer)
43+
runServer.configure { dependsOn(prepareServer) }
44+
45+
registerBuildIdeRunTask(runServer)
46+
}
47+
48+
private fun Project.configureDefaultJvmForServer() {
49+
val toolchains = project.extensions.findByType<JavaToolchainService>() ?: return
50+
val spec = java.toolchain
51+
52+
tasks.withType<RunServer>().configureEach {
53+
javaLauncher.convention(
54+
toolchains.launcherFor {
55+
languageVersion.convention(version.map(::resolveMinimalJavaVersion))
56+
implementation.convention(spec.implementation)
57+
vendor.convention(spec.vendor)
58+
}
59+
)
60+
}
61+
}
62+
63+
private fun Project.resolveConfiguredServerDir(): Provider<Directory>? {
64+
val deprecated = DeprecatedServerProperties(rootDir, providers)
65+
66+
val serverDirProperty = providers.gradleProperty("bukkitgradle.server.dir")
67+
.orElse(provider { deprecated.devServerDir?.absolutePath })
68+
.orNull ?: return null
69+
return layout.dir(provider { file(serverDirProperty) })
70+
}
71+
72+
private fun Project.registerPrepareServerTask(
73+
serverConfiguration: ServerConfiguration,
74+
runServer: Provider<RunServer>,
75+
): TaskProvider<PrepareServer> {
76+
return tasks.register<PrepareServer>("prepareServer") {
77+
serverDir.set(runServer.map { it.runDirectory.get() })
78+
onlineMode = serverConfiguration.onlineMode
79+
}
80+
}
81+
82+
private fun Project.registerBuildIdeRunTask(runServer: TaskProvider<RunServer>) {
83+
tasks.register<CreateIdeaGradleRunConfiguration>("buildIdeaRun") {
84+
configurationName.set("Run Server [${project.name}]")
85+
taskNames.add(runServer.name)
86+
}
87+
}

src/main/kotlin/server/DevServerPlugin.kt

Lines changed: 0 additions & 107 deletions
This file was deleted.

src/main/kotlin/server/task/PrepareServer.kt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ internal abstract class PrepareServer : DefaultTask() {
1616
@get:Internal
1717
abstract val serverDir: DirectoryProperty
1818

19-
@get:Input
20-
var eula: Boolean = false
21-
2219
@get:Input
2320
var onlineMode: Boolean = true
2421

@@ -32,18 +29,18 @@ internal abstract class PrepareServer : DefaultTask() {
3229

3330
@TaskAction
3431
fun prepareServer() {
35-
resolveOnlineMode()
32+
configureOnlineMode()
3633
}
3734

38-
private fun resolveOnlineMode() {
35+
private fun configureOnlineMode() {
3936
val propsFile = propertiesFile.get().asFile
4037
if (!propsFile.exists()) {
4138
propsFile.createNewFile()
4239
}
4340

4441
val properties = Properties()
45-
properties.load(propsFile.reader())
42+
propsFile.reader().use { properties.load(it) }
4643
properties.setProperty("online-mode", "$onlineMode")
47-
properties.store(propsFile.writer(), "Minecraft server properties")
44+
propsFile.writer().use { properties.store(it, "Minecraft server properties") }
4845
}
4946
}

0 commit comments

Comments
 (0)