Skip to content

Commit 412b06d

Browse files
committed
Add permutation data to ModMetadata
1 parent 4e1e8ec commit 412b06d

2 files changed

Lines changed: 33 additions & 5 deletions

File tree

build-logic/api/src/main/kotlin/net/xolt/freecam/model/ModMetadata.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ package net.xolt.freecam.model
33
import kotlinx.serialization.SerialName
44
import kotlinx.serialization.Serializable
55

6-
interface ModMetadata {
6+
interface ModMetadata : StaticModMetadata {
7+
val mc: String
8+
val loader: String
9+
}
10+
11+
interface StaticModMetadata {
712
val id: String
813
val name: String
914
val group: String
@@ -52,4 +57,4 @@ data class ModMetadataToml(
5257
override val modrinthId: String,
5358
@SerialName("crowdin")
5459
override val crowdinUrl: UrlString,
55-
) : ModMetadata
60+
) : StaticModMetadata

build-logic/settings/src/main/kotlin/net/xolt/freecam/gradle/ModMetadataSettingsPlugin.kt

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,53 @@
11
package net.xolt.freecam.gradle
22

33
import dev.eav.tomlkt.Toml
4+
import dev.kikugie.stonecutter.build.StonecutterBuildExtension
45
import kotlinx.serialization.Serializable
56
import kotlinx.serialization.decodeFromString
67
import net.xolt.freecam.model.ModMetadata
78
import net.xolt.freecam.model.ModMetadataToml
9+
import net.xolt.freecam.model.StaticModMetadata
810
import org.gradle.api.Plugin
11+
import org.gradle.api.Project
912
import org.gradle.api.initialization.Settings
1013
import org.gradle.kotlin.dsl.add
14+
import org.gradle.kotlin.dsl.findByType
1115

1216
@Serializable
1317
private data class MetadataToml(
1418
val mod: ModMetadataToml,
1519
)
1620

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+
1740
class ModMetadataSettingsPlugin : Plugin<Settings> {
1841
override fun apply(settings: Settings) {
1942
val name = "meta"
2043
val file = settings.rootDir.resolve("metadata.toml")
2144
val toml = file.readText()
22-
val metadata = Toml.decodeFromString<MetadataToml>(toml)
45+
val metadata = Toml.decodeFromString<MetadataToml>(toml).mod
2346

24-
settings.extensions.add<ModMetadata>(name, metadata.mod)
47+
settings.extensions.add<StaticModMetadata>(name, metadata)
2548
settings.gradle.settingsEvaluated {
2649
gradle.allprojects {
27-
extensions.add(name, metadata.mod)
50+
extensions.add<ModMetadata>(name, ProjectModMetadata(this, metadata))
2851
}
2952
}
3053
}

0 commit comments

Comments
 (0)