|
1 | 1 | package net.xolt.freecam.gradle |
2 | 2 |
|
3 | 3 | import dev.eav.tomlkt.Toml |
| 4 | +import dev.kikugie.stonecutter.build.StonecutterBuildExtension |
4 | 5 | import kotlinx.serialization.Serializable |
5 | 6 | import kotlinx.serialization.decodeFromString |
6 | 7 | import net.xolt.freecam.model.ModMetadata |
7 | 8 | import net.xolt.freecam.model.ModMetadataToml |
| 9 | +import net.xolt.freecam.model.StaticModMetadata |
8 | 10 | import org.gradle.api.Plugin |
| 11 | +import org.gradle.api.Project |
9 | 12 | import org.gradle.api.initialization.Settings |
10 | 13 | import org.gradle.kotlin.dsl.add |
| 14 | +import org.gradle.kotlin.dsl.findByType |
11 | 15 |
|
12 | 16 | @Serializable |
13 | 17 | private data class MetadataToml( |
14 | 18 | val mod: ModMetadataToml, |
15 | 19 | ) |
16 | 20 |
|
| 21 | +private class ProjectModMetadata( |
| 22 | + private val project: Project, |
| 23 | + private val meta: StaticModMetadata, |
| 24 | +) |
| 25 | +: StaticModMetadata by meta, ModMetadata |
| 26 | +{ |
| 27 | + private val sc get() = project.extensions.findByType<StonecutterBuildExtension>() |
| 28 | + |
| 29 | + override val mc: String |
| 30 | + get() = requireNotNull(sc) { |
| 31 | + "${project.path} without `stonecutter` extension cannot read `mc` " |
| 32 | + }.current.version |
| 33 | + |
| 34 | + override val loader: String |
| 35 | + get() = requireNotNull(sc) { |
| 36 | + "${project.path} without `stonecutter` extension cannot read `loader` " |
| 37 | + }.branch.id |
| 38 | +} |
| 39 | + |
17 | 40 | class ModMetadataSettingsPlugin : Plugin<Settings> { |
18 | 41 | override fun apply(settings: Settings) { |
19 | 42 | val name = "meta" |
20 | 43 | val file = settings.rootDir.resolve("metadata.toml") |
21 | 44 | val toml = file.readText() |
22 | | - val metadata = Toml.decodeFromString<MetadataToml>(toml) |
| 45 | + val metadata = Toml.decodeFromString<MetadataToml>(toml).mod |
23 | 46 |
|
24 | | - settings.extensions.add<ModMetadata>(name, metadata.mod) |
| 47 | + settings.extensions.add<StaticModMetadata>(name, metadata) |
25 | 48 | settings.gradle.settingsEvaluated { |
26 | 49 | gradle.allprojects { |
27 | | - extensions.add(name, metadata.mod) |
| 50 | + extensions.add<ModMetadata>(name, ProjectModMetadata(this, metadata)) |
28 | 51 | } |
29 | 52 | } |
30 | 53 | } |
|
0 commit comments