From 58356c27f3c54215e172432d784e707dcfe7dc08 Mon Sep 17 00:00:00 2001 From: Alex Endfinger Date: Sun, 10 Jul 2022 19:35:50 -0400 Subject: [PATCH] Add a concept of a concrete-library which has access to Bukkit but is not a plugin. --- build.gradle.kts | 7 ++++- .../common-library/build.gradle.kts | 3 ++ .../conrete/sample/common/CommonExtensions.kt | 6 ++++ .../goodbye-world/build.gradle.kts | 4 +++ .../sample/goodbyeworld/GoodbyeWorldPlugin.kt | 6 ++-- .../hello-world/build.gradle.kts | 1 + .../sample/helloworld/HelloWorldPlugin.kt | 6 ++-- .../concrete/other/OtherLibrary.java | 2 +- samples/mixed/settings.gradle.kts | 1 + .../concrete/ConcreteLibraryPlugin.kt | 3 ++ .../concrete/ConcretePluginPlugin.kt | 31 +++++++++++++++++++ .../concrete/ConcreteProjectPlugin.kt | 28 ++--------------- .../mystic/foundation/concrete/extensions.kt | 2 +- 13 files changed, 68 insertions(+), 32 deletions(-) create mode 100644 samples/mixed/bukkit-plugins/common-library/build.gradle.kts create mode 100644 samples/mixed/bukkit-plugins/common-library/src/main/kotlin/lgbt/mystic/foundation/conrete/sample/common/CommonExtensions.kt create mode 100644 src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteLibraryPlugin.kt create mode 100644 src/main/kotlin/lgbt/mystic/foundation/concrete/ConcretePluginPlugin.kt diff --git a/build.gradle.kts b/build.gradle.kts index aaa17f4..510de78 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,7 +33,12 @@ gradlePlugin { create("concrete-plugin") { id = "lgbt.mystic.foundation.concrete-plugin" - implementationClass = "lgbt.mystic.foundation.concrete.ConcreteProjectPlugin" + implementationClass = "lgbt.mystic.foundation.concrete.ConcretePluginPlugin" + } + + create("concrete-library") { + id = "lgbt.mystic.foundation.concrete-library" + implementationClass = "lgbt.mystic.foundation.concrete.ConcreteLibraryPlugin" } } } diff --git a/samples/mixed/bukkit-plugins/common-library/build.gradle.kts b/samples/mixed/bukkit-plugins/common-library/build.gradle.kts new file mode 100644 index 0000000..10925e6 --- /dev/null +++ b/samples/mixed/bukkit-plugins/common-library/build.gradle.kts @@ -0,0 +1,3 @@ +plugins { + id("lgbt.mystic.foundation.concrete-library") +} diff --git a/samples/mixed/bukkit-plugins/common-library/src/main/kotlin/lgbt/mystic/foundation/conrete/sample/common/CommonExtensions.kt b/samples/mixed/bukkit-plugins/common-library/src/main/kotlin/lgbt/mystic/foundation/conrete/sample/common/CommonExtensions.kt new file mode 100644 index 0000000..45f1959 --- /dev/null +++ b/samples/mixed/bukkit-plugins/common-library/src/main/kotlin/lgbt/mystic/foundation/conrete/sample/common/CommonExtensions.kt @@ -0,0 +1,6 @@ +package lgbt.mystic.foundation.conrete.sample.common + +import org.bukkit.plugin.java.JavaPlugin + +fun JavaPlugin.logOnEnable(name: String) = slF4JLogger.info("Enabled $name") +fun JavaPlugin.logOnDisable(name: String) = slF4JLogger.info("Disabled $name") diff --git a/samples/mixed/bukkit-plugins/goodbye-world/build.gradle.kts b/samples/mixed/bukkit-plugins/goodbye-world/build.gradle.kts index af92cdf..e545dd3 100644 --- a/samples/mixed/bukkit-plugins/goodbye-world/build.gradle.kts +++ b/samples/mixed/bukkit-plugins/goodbye-world/build.gradle.kts @@ -1,3 +1,7 @@ plugins { id("lgbt.mystic.foundation.concrete-plugin") } + +dependencies { + implementation(project(":bukkit-plugins:common-library")) +} diff --git a/samples/mixed/bukkit-plugins/goodbye-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/goodbyeworld/GoodbyeWorldPlugin.kt b/samples/mixed/bukkit-plugins/goodbye-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/goodbyeworld/GoodbyeWorldPlugin.kt index b474bcd..d9f0226 100644 --- a/samples/mixed/bukkit-plugins/goodbye-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/goodbyeworld/GoodbyeWorldPlugin.kt +++ b/samples/mixed/bukkit-plugins/goodbye-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/goodbyeworld/GoodbyeWorldPlugin.kt @@ -1,13 +1,15 @@ package lgbt.mystic.foundation.concrete.sample.goodbyeworld +import lgbt.mystic.foundation.conrete.sample.common.logOnDisable +import lgbt.mystic.foundation.conrete.sample.common.logOnEnable import org.bukkit.plugin.java.JavaPlugin class GoodbyeWorldPlugin : JavaPlugin() { override fun onEnable() { - slF4JLogger.info("Enabled Goodbye World") + logOnEnable("Goodbye World") } override fun onDisable() { - slF4JLogger.info("Disabled Goodbye World") + logOnDisable("Goodbye World") } } diff --git a/samples/mixed/bukkit-plugins/hello-world/build.gradle.kts b/samples/mixed/bukkit-plugins/hello-world/build.gradle.kts index 1ba9a1b..faa219d 100644 --- a/samples/mixed/bukkit-plugins/hello-world/build.gradle.kts +++ b/samples/mixed/bukkit-plugins/hello-world/build.gradle.kts @@ -4,4 +4,5 @@ plugins { dependencies { implementation(project(":other-library")) + implementation(project(":bukkit-plugins:common-library")) } diff --git a/samples/mixed/bukkit-plugins/hello-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/helloworld/HelloWorldPlugin.kt b/samples/mixed/bukkit-plugins/hello-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/helloworld/HelloWorldPlugin.kt index e8a29a1..55941a4 100644 --- a/samples/mixed/bukkit-plugins/hello-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/helloworld/HelloWorldPlugin.kt +++ b/samples/mixed/bukkit-plugins/hello-world/src/main/kotlin/lgbt/mystic/foundation/concrete/sample/helloworld/HelloWorldPlugin.kt @@ -1,14 +1,16 @@ package lgbt.mystic.foundation.concrete.sample.helloworld import lgbt.mystic.foundation.concrete.other.OtherLibrary +import lgbt.mystic.foundation.conrete.sample.common.logOnDisable +import lgbt.mystic.foundation.conrete.sample.common.logOnEnable import org.bukkit.plugin.java.JavaPlugin class HelloWorldPlugin : JavaPlugin() { override fun onEnable() { - slF4JLogger.info("Enabled Hello World (Constant is ${OtherLibrary.SOME_CONSTANT})") + logOnEnable(OtherLibrary.HELLO_WORLD) } override fun onDisable() { - slF4JLogger.info("Disabled Hello World (Constant is ${OtherLibrary.SOME_CONSTANT})") + logOnDisable(OtherLibrary.HELLO_WORLD) } } diff --git a/samples/mixed/other-library/src/main/java/lgbt/mystic/foundation/concrete/other/OtherLibrary.java b/samples/mixed/other-library/src/main/java/lgbt/mystic/foundation/concrete/other/OtherLibrary.java index c529dd0..1327d68 100644 --- a/samples/mixed/other-library/src/main/java/lgbt/mystic/foundation/concrete/other/OtherLibrary.java +++ b/samples/mixed/other-library/src/main/java/lgbt/mystic/foundation/concrete/other/OtherLibrary.java @@ -1,5 +1,5 @@ package lgbt.mystic.foundation.concrete.other; public class OtherLibrary { - public static final String SOME_CONSTANT = "HelloWorld"; + public static final String HELLO_WORLD = "Hello World"; } diff --git a/samples/mixed/settings.gradle.kts b/samples/mixed/settings.gradle.kts index 1b321b3..ffe8853 100644 --- a/samples/mixed/settings.gradle.kts +++ b/samples/mixed/settings.gradle.kts @@ -2,4 +2,5 @@ includeBuild("../..") include(":bukkit-plugins") include(":bukkit-plugins:hello-world") include(":bukkit-plugins:goodbye-world") +include(":bukkit-plugins:common-library") include(":other-library") diff --git a/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteLibraryPlugin.kt b/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteLibraryPlugin.kt new file mode 100644 index 0000000..8ad4c32 --- /dev/null +++ b/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteLibraryPlugin.kt @@ -0,0 +1,3 @@ +package lgbt.mystic.foundation.concrete + +class ConcreteLibraryPlugin : ConcreteProjectPlugin() diff --git a/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcretePluginPlugin.kt b/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcretePluginPlugin.kt new file mode 100644 index 0000000..5caa317 --- /dev/null +++ b/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcretePluginPlugin.kt @@ -0,0 +1,31 @@ +package lgbt.mystic.foundation.concrete + +import org.gradle.api.Project +import org.gradle.kotlin.dsl.get +import org.gradle.language.jvm.tasks.ProcessResources + +@Suppress("UnstableApiUsage") +class ConcretePluginPlugin : ConcreteProjectPlugin() { + override fun apply(project: Project) { + super.apply(project) + + project.plugins.apply("com.github.johnrengelman.shadow") + + (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.shadowJarTask!!.apply { + archiveClassifier.set("plugin") + } + + project.tasks["assemble"].dependsOn(project.tasks["shadowJar"]) + + project.concreteRootProject.tasks["setupPaperServer"].dependsOn(project.tasks["shadowJar"]) + } +} diff --git a/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteProjectPlugin.kt b/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteProjectPlugin.kt index 3a5ab5a..1fc19a2 100644 --- a/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteProjectPlugin.kt +++ b/src/main/kotlin/lgbt/mystic/foundation/concrete/ConcreteProjectPlugin.kt @@ -4,16 +4,13 @@ import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaPluginExtension -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 { +open class ConcreteProjectPlugin : Plugin { override fun apply(project: Project) { val versionWithBuild = if (System.getenv("CI_PIPELINE_IID") != null) { project.rootProject.version.toString() + ".${System.getenv("CI_PIPELINE_IID")}" @@ -21,11 +18,10 @@ class ConcreteProjectPlugin : Plugin { "DEV" } + project.version = versionWithBuild + 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 { @@ -35,7 +31,6 @@ class ConcreteProjectPlugin : Plugin { } val paperApiVersion = project.concreteRootExtension.paperApiVersion.get() - project.dependencies.add("compileOnly", "io.papermc.paper:paper-api:${paperApiVersion}") project.extensions.getByType().apply { @@ -44,21 +39,6 @@ class ConcreteProjectPlugin : Plugin { 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.shadowJarTask!!.apply { - archiveClassifier.set("plugin") - } - - project.tasks["assemble"].dependsOn(project.tasks["shadowJar"]) - project.tasks.withType().forEach { it.apply { kotlinOptions.apply { @@ -66,7 +46,5 @@ class ConcreteProjectPlugin : Plugin { } } } - - project.concreteRootProject.tasks["setupPaperServer"].dependsOn(project.tasks["shadowJar"]) } } diff --git a/src/main/kotlin/lgbt/mystic/foundation/concrete/extensions.kt b/src/main/kotlin/lgbt/mystic/foundation/concrete/extensions.kt index 9af5881..33b2e25 100644 --- a/src/main/kotlin/lgbt/mystic/foundation/concrete/extensions.kt +++ b/src/main/kotlin/lgbt/mystic/foundation/concrete/extensions.kt @@ -6,7 +6,7 @@ import org.gradle.api.tasks.TaskOutputs import java.nio.file.FileSystems import java.nio.file.Path -internal fun Project.isPluginProject() = plugins.hasPlugin(ConcreteProjectPlugin::class.java) +internal fun Project.isPluginProject() = plugins.hasPlugin(ConcretePluginPlugin::class.java) internal fun Project.findPluginProjects() = allprojects.filter { project -> project.isPluginProject() } internal val Project.shadowJarTask: ShadowJar?