mirror of
https://github.com/GayPizzaSpecifications/concrete.git
synced 2025-08-04 13:41:33 +00:00
Sample project which dumbs down everything.
This commit is contained in:
@ -4,5 +4,6 @@ import org.gradle.api.provider.Property
|
||||
|
||||
interface ConcreteExtension {
|
||||
val paperVersionGroup: Property<String>
|
||||
val paperApiVersion: Property<String>
|
||||
val minecraftServerPath: Property<String>
|
||||
}
|
||||
|
@ -1,8 +1,20 @@
|
||||
package lgbt.mystic.foundation.concrete
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.api.JavaVersion
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.JavaPluginExtension
|
||||
import org.gradle.api.tasks.compile.JavaCompile
|
||||
import org.gradle.kotlin.dsl.get
|
||||
import org.gradle.kotlin.dsl.getByType
|
||||
import org.gradle.kotlin.dsl.repositories
|
||||
import org.gradle.kotlin.dsl.withType
|
||||
import org.gradle.language.jvm.tasks.ProcessResources
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import java.net.URI
|
||||
|
||||
@Suppress("UnstableApiUsage")
|
||||
class ConcreteProjectPlugin : Plugin<Project> {
|
||||
override fun apply(project: Project) {
|
||||
val versionWithBuild = if (System.getenv("CI_PIPELINE_IID") != null) {
|
||||
@ -11,6 +23,52 @@ class ConcreteProjectPlugin : Plugin<Project> {
|
||||
"DEV"
|
||||
}
|
||||
|
||||
project.plugins.apply("org.jetbrains.kotlin.jvm")
|
||||
project.plugins.apply("org.jetbrains.kotlin.plugin.serialization")
|
||||
project.plugins.apply("com.github.johnrengelman.shadow")
|
||||
|
||||
project.version = versionWithBuild
|
||||
|
||||
project.repositories {
|
||||
maven {
|
||||
name = "papermc"
|
||||
url = URI.create("https://papermc.io/repo/repository/maven-public/")
|
||||
}
|
||||
}
|
||||
|
||||
val paperApiVersion = project.rootProject.extensions.getByType<ConcreteExtension>().paperApiVersion.get()
|
||||
|
||||
project.dependencies.add("compileOnly", "io.papermc.paper:paper-api:${paperApiVersion}")
|
||||
|
||||
project.extensions.getByType<JavaPluginExtension>().apply {
|
||||
val javaVersion = JavaVersion.toVersion(17)
|
||||
sourceCompatibility = javaVersion
|
||||
targetCompatibility = javaVersion
|
||||
}
|
||||
|
||||
(project.tasks.getByName("processResources") as ProcessResources).apply {
|
||||
val props = mapOf("version" to project.version.toString())
|
||||
inputs.properties(props)
|
||||
filteringCharset = "UTF-8"
|
||||
filesMatching("plugin.yml") {
|
||||
expand(props)
|
||||
}
|
||||
}
|
||||
|
||||
(project.tasks["shadowJar"] as ShadowJar).apply {
|
||||
archiveClassifier.set("plugin")
|
||||
}
|
||||
|
||||
project.tasks["assemble"].dependsOn(project.tasks["shadowJar"])
|
||||
|
||||
project.tasks.withType<KotlinCompile>().forEach {
|
||||
it.apply {
|
||||
kotlinOptions.apply {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
project.rootProject.tasks["setupPaperServer"].dependsOn(project.tasks["shadowJar"])
|
||||
}
|
||||
}
|
||||
|
@ -2,20 +2,14 @@ package lgbt.mystic.foundation.concrete
|
||||
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.kotlin.dsl.apply
|
||||
import org.gradle.kotlin.dsl.create
|
||||
|
||||
class ConcreteGradlePlugin : Plugin<Project> {
|
||||
class ConcreteRootPlugin : Plugin<Project> {
|
||||
override fun apply(project: Project) {
|
||||
project.apply(plugin = "java")
|
||||
project.extensions.create<ConcreteExtension>("concrete")
|
||||
val setupPaperServer = project.tasks.create<SetupPaperServer>("setupPaperServer")
|
||||
project.afterEvaluate { ->
|
||||
setupPaperServer.dependsOn(*project.subprojects
|
||||
// TODO: Foundation specific
|
||||
.filter { it.isFoundationPlugin() }
|
||||
.map { it.tasks.getByName("shadowJar") }
|
||||
.toTypedArray()
|
||||
)
|
||||
}
|
||||
val runPaperServer = project.tasks.create<RunPaperServer>("runPaperServer")
|
||||
runPaperServer.dependsOn(setupPaperServer)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package lgbt.mystic.foundation.concrete
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
@ -39,17 +40,15 @@ open class SetupPaperServer : DefaultTask() {
|
||||
paperPluginsDirectory.mkdirs()
|
||||
}
|
||||
|
||||
for (project in project.subprojects) {
|
||||
if (!project.isFoundationPlugin()) {
|
||||
for (project in project.allprojects) {
|
||||
if (!project.isPluginProject()) {
|
||||
continue
|
||||
}
|
||||
|
||||
val pluginJarFile = project.buildDir.resolve("libs/${project.name}-DEV-plugin.jar")
|
||||
val task = project.tasks.getByName("shadowJar") as ShadowJar
|
||||
val pluginJarFile = task.outputs.files.first()
|
||||
val pluginLinkFile = paperPluginsDirectory.resolve("${project.name}.jar")
|
||||
if (pluginLinkFile.exists()) {
|
||||
pluginLinkFile.delete()
|
||||
}
|
||||
|
||||
pluginLinkFile.delete()
|
||||
Files.createSymbolicLink(pluginLinkFile.toPath(), pluginJarFile.toPath())
|
||||
}
|
||||
}
|
||||
|
@ -5,9 +5,8 @@ import org.gradle.api.tasks.TaskOutputs
|
||||
import java.nio.file.FileSystems
|
||||
import java.nio.file.Path
|
||||
|
||||
fun Project.isFoundationPlugin() = name.startsWith("foundation-")
|
||||
|
||||
fun Project.findPluginProjects() = rootProject.subprojects.filter { project -> project.isFoundationPlugin() }
|
||||
fun Project.isPluginProject() = project.tasks.names.contains("shadowJar")
|
||||
fun Project.findPluginProjects() = rootProject.allprojects.filter { project -> project.isPluginProject() }
|
||||
|
||||
val Project.shadowJarOutputs: TaskOutputs
|
||||
get() = project.tasks.getByName("shadowJar").outputs
|
||||
|
Reference in New Issue
Block a user