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 import org.jetbrains.annotations.ApiStatus.Internal interface JfModExtension: LomExtension { val libJfVersion: Property val fabricApiVersion: Property @get:Nested val curseforge: CurseForge @get:Nested val modrinth: Modrinth @Internal override fun check(proj: Project) { super.check(proj) libJfVersion.finalizeValue() fabricApiVersion.finalizeValue() modrinth.check(proj) curseforge.check(proj) } fun isMod(proj: Project) = proj.extensions.findByName("jfModule") != null fun curseforge(closure: Action) = closure.execute(curseforge) fun modrinth(closure: Action) = closure.execute(modrinth) interface CurseForge { val projectId: Property val requiredDependencies: ListProperty val optionalDependencies: ListProperty @Internal 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 val requiredDependencies: ListProperty val optionalDependencies: ListProperty @Internal 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" } } } } }