2023-07-09 16:47:13 +02:00
|
|
|
package io.gitlab.jfronny.scripts
|
|
|
|
|
|
|
|
import org.gradle.api.Action
|
|
|
|
import org.gradle.api.Project
|
|
|
|
import org.gradle.api.provider.ListProperty
|
|
|
|
import org.gradle.api.provider.Property
|
|
|
|
import org.gradle.api.tasks.Nested
|
2023-07-18 16:55:51 +02:00
|
|
|
import org.jetbrains.annotations.ApiStatus.Internal
|
2023-07-09 16:47:13 +02:00
|
|
|
|
|
|
|
interface JfModExtension: LomExtension {
|
|
|
|
val libJfVersion: Property<String>
|
2024-03-08 18:33:27 +01:00
|
|
|
val fabricApiVersion: Property<String>
|
2023-07-09 16:47:13 +02:00
|
|
|
@get:Nested val curseforge: CurseForge
|
|
|
|
@get:Nested val modrinth: Modrinth
|
|
|
|
|
2023-07-18 16:55:51 +02:00
|
|
|
@Internal
|
2023-07-09 16:47:13 +02:00
|
|
|
override fun check(proj: Project) {
|
|
|
|
super.check(proj)
|
|
|
|
libJfVersion.finalizeValue()
|
2024-03-08 18:33:27 +01:00
|
|
|
fabricApiVersion.finalizeValue()
|
2023-07-09 16:47:13 +02:00
|
|
|
modrinth.check(proj)
|
|
|
|
curseforge.check(proj)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun isMod(proj: Project) = proj.extensions.findByName("jfModule") != null
|
2024-03-21 12:08:59 +01:00
|
|
|
fun isFabric(proj: Project) = (proj.extensions.findByName("lom") as? LomExtension)?.isFabric ?: false
|
|
|
|
fun isForge(proj: Project) = (proj.extensions.findByName("lom") as? LomExtension)?.isForge ?: false
|
2023-07-09 16:47:13 +02:00
|
|
|
fun curseforge(closure: Action<CurseForge>) = closure.execute(curseforge)
|
|
|
|
fun modrinth(closure: Action<Modrinth>) = closure.execute(modrinth)
|
|
|
|
|
|
|
|
interface CurseForge {
|
|
|
|
val projectId: Property<String>
|
|
|
|
val requiredDependencies: ListProperty<String>
|
|
|
|
val optionalDependencies: ListProperty<String>
|
|
|
|
|
2023-07-18 16:55:51 +02:00
|
|
|
@Internal
|
2023-07-09 16:47:13 +02:00
|
|
|
fun check(proj: Project) {
|
|
|
|
projectId.finalizeValue()
|
|
|
|
requiredDependencies.finalizeValue()
|
|
|
|
optionalDependencies.finalizeValue()
|
|
|
|
if (!projectId.isPresent) {
|
|
|
|
require(requiredDependencies.map { it.isEmpty() }.getOrElse(true)) { "curseforge is not configured for a project id but has dependencies" }
|
|
|
|
require(optionalDependencies.map { it.isEmpty() }.getOrElse(true)) { "curseforge is not configured for a project id but has dependencies" }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
interface Modrinth {
|
|
|
|
val projectId: Property<String>
|
|
|
|
val requiredDependencies: ListProperty<String>
|
|
|
|
val optionalDependencies: ListProperty<String>
|
|
|
|
|
2023-07-18 16:55:51 +02:00
|
|
|
@Internal
|
2023-07-09 16:47:13 +02:00
|
|
|
fun check(proj: Project) {
|
|
|
|
projectId.finalizeValue()
|
|
|
|
requiredDependencies.finalizeValue()
|
|
|
|
optionalDependencies.finalizeValue()
|
|
|
|
if (!projectId.isPresent) {
|
|
|
|
require(requiredDependencies.map { it.isEmpty() }.getOrElse(true)) { "modrinth is not configured for a project id but has dependencies" }
|
|
|
|
require(optionalDependencies.map { it.isEmpty() }.getOrElse(true)) { "modrinth is not configured for a project id but has dependencies" }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|