-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathPluginConfigurationPlugin.kt
More file actions
69 lines (56 loc) · 2.32 KB
/
PluginConfigurationPlugin.kt
File metadata and controls
69 lines (56 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package ru.endlesscode.bukkitgradle.plugin
import com.charleskorn.kaml.SequenceStyle
import com.charleskorn.kaml.Yaml
import com.charleskorn.kaml.YamlConfiguration
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.CopySpec
import org.gradle.api.file.DuplicatesStrategy
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.register
import ru.endlesscode.bukkitgradle.bukkit
import ru.endlesscode.bukkitgradle.extensions.java
import ru.endlesscode.bukkitgradle.plugin.extension.PluginConfigurationImpl
import ru.endlesscode.bukkitgradle.plugin.task.MergePluginYaml
import ru.endlesscode.bukkitgradle.plugin.task.ParsePluginYaml
import java.io.File
public class PluginConfigurationPlugin : Plugin<Project> {
override fun apply(project: Project) {
val yaml = Yaml(
configuration = YamlConfiguration(
encodeDefaults = false,
sequenceStyle = SequenceStyle.Flow
)
)
val parsePluginYaml = project.tasks.register<ParsePluginYaml>("parsePluginYaml") {
val bukkit = project.bukkit
this.yaml = yaml
this.plugin = bukkit.plugin as PluginConfigurationImpl
this.pluginYamlFile.set(project.findPluginYaml())
val predicate = bukkit.plugin.generatePluginYaml
onlyIf { predicate.get() }
}
val mergePluginYaml = project.tasks.register<MergePluginYaml>("mergePluginYaml") {
val bukkit = project.bukkit
this.yaml = yaml
this.plugin = bukkit.plugin
pluginYaml.set(parsePluginYaml.map { it.pluginYaml.get() })
val predicate = bukkit.plugin.generatePluginYaml
onlyIf { predicate.get() }
}
project.tasks.named<CopySpec>("processResources") {
from(mergePluginYaml)
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
}
/** Finds and returns project's plugin.yaml if it exists. */
private fun Project.findPluginYaml(): File? {
val mainSourceSet = java.sourceSets["main"]
val resourceDir = mainSourceSet.resources.srcDirs.first()
return File(resourceDir, FILE_NAME).takeIf { it.isFile }
}
internal companion object {
const val FILE_NAME: String = "plugin.yml"
}
}