Add a concept of a concrete-library which has access to Bukkit but is not a plugin.

This commit is contained in:
Alex Endfinger
2022-07-10 19:35:50 -04:00
parent 39a7b50a07
commit 58356c27f3
13 changed files with 68 additions and 32 deletions

View File

@ -33,7 +33,12 @@ gradlePlugin {
create("concrete-plugin") { create("concrete-plugin") {
id = "lgbt.mystic.foundation.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"
} }
} }
} }

View File

@ -0,0 +1,3 @@
plugins {
id("lgbt.mystic.foundation.concrete-library")
}

View File

@ -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")

View File

@ -1,3 +1,7 @@
plugins { plugins {
id("lgbt.mystic.foundation.concrete-plugin") id("lgbt.mystic.foundation.concrete-plugin")
} }
dependencies {
implementation(project(":bukkit-plugins:common-library"))
}

View File

@ -1,13 +1,15 @@
package lgbt.mystic.foundation.concrete.sample.goodbyeworld 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 import org.bukkit.plugin.java.JavaPlugin
class GoodbyeWorldPlugin : JavaPlugin() { class GoodbyeWorldPlugin : JavaPlugin() {
override fun onEnable() { override fun onEnable() {
slF4JLogger.info("Enabled Goodbye World") logOnEnable("Goodbye World")
} }
override fun onDisable() { override fun onDisable() {
slF4JLogger.info("Disabled Goodbye World") logOnDisable("Goodbye World")
} }
} }

View File

@ -4,4 +4,5 @@ plugins {
dependencies { dependencies {
implementation(project(":other-library")) implementation(project(":other-library"))
implementation(project(":bukkit-plugins:common-library"))
} }

View File

@ -1,14 +1,16 @@
package lgbt.mystic.foundation.concrete.sample.helloworld package lgbt.mystic.foundation.concrete.sample.helloworld
import lgbt.mystic.foundation.concrete.other.OtherLibrary 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 import org.bukkit.plugin.java.JavaPlugin
class HelloWorldPlugin : JavaPlugin() { class HelloWorldPlugin : JavaPlugin() {
override fun onEnable() { override fun onEnable() {
slF4JLogger.info("Enabled Hello World (Constant is ${OtherLibrary.SOME_CONSTANT})") logOnEnable(OtherLibrary.HELLO_WORLD)
} }
override fun onDisable() { override fun onDisable() {
slF4JLogger.info("Disabled Hello World (Constant is ${OtherLibrary.SOME_CONSTANT})") logOnDisable(OtherLibrary.HELLO_WORLD)
} }
} }

View File

@ -1,5 +1,5 @@
package lgbt.mystic.foundation.concrete.other; package lgbt.mystic.foundation.concrete.other;
public class OtherLibrary { public class OtherLibrary {
public static final String SOME_CONSTANT = "HelloWorld"; public static final String HELLO_WORLD = "Hello World";
} }

View File

@ -2,4 +2,5 @@ includeBuild("../..")
include(":bukkit-plugins") include(":bukkit-plugins")
include(":bukkit-plugins:hello-world") include(":bukkit-plugins:hello-world")
include(":bukkit-plugins:goodbye-world") include(":bukkit-plugins:goodbye-world")
include(":bukkit-plugins:common-library")
include(":other-library") include(":other-library")

View File

@ -0,0 +1,3 @@
package lgbt.mystic.foundation.concrete
class ConcreteLibraryPlugin : ConcreteProjectPlugin()

View File

@ -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"])
}
}

View File

@ -4,16 +4,13 @@ import org.gradle.api.JavaVersion
import org.gradle.api.Plugin import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.repositories import org.gradle.kotlin.dsl.repositories
import org.gradle.kotlin.dsl.withType import org.gradle.kotlin.dsl.withType
import org.gradle.language.jvm.tasks.ProcessResources
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.net.URI import java.net.URI
@Suppress("UnstableApiUsage") open class ConcreteProjectPlugin : Plugin<Project> {
class ConcreteProjectPlugin : Plugin<Project> {
override fun apply(project: Project) { override fun apply(project: Project) {
val versionWithBuild = if (System.getenv("CI_PIPELINE_IID") != null) { val versionWithBuild = if (System.getenv("CI_PIPELINE_IID") != null) {
project.rootProject.version.toString() + ".${System.getenv("CI_PIPELINE_IID")}" project.rootProject.version.toString() + ".${System.getenv("CI_PIPELINE_IID")}"
@ -21,11 +18,10 @@ class ConcreteProjectPlugin : Plugin<Project> {
"DEV" "DEV"
} }
project.version = versionWithBuild
project.plugins.apply("org.jetbrains.kotlin.jvm") project.plugins.apply("org.jetbrains.kotlin.jvm")
project.plugins.apply("org.jetbrains.kotlin.plugin.serialization") project.plugins.apply("org.jetbrains.kotlin.plugin.serialization")
project.plugins.apply("com.github.johnrengelman.shadow")
project.version = versionWithBuild
project.repositories { project.repositories {
maven { maven {
@ -35,7 +31,6 @@ class ConcreteProjectPlugin : Plugin<Project> {
} }
val paperApiVersion = project.concreteRootExtension.paperApiVersion.get() val paperApiVersion = project.concreteRootExtension.paperApiVersion.get()
project.dependencies.add("compileOnly", "io.papermc.paper:paper-api:${paperApiVersion}") project.dependencies.add("compileOnly", "io.papermc.paper:paper-api:${paperApiVersion}")
project.extensions.getByType<JavaPluginExtension>().apply { project.extensions.getByType<JavaPluginExtension>().apply {
@ -44,21 +39,6 @@ class ConcreteProjectPlugin : Plugin<Project> {
targetCompatibility = 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.shadowJarTask!!.apply {
archiveClassifier.set("plugin")
}
project.tasks["assemble"].dependsOn(project.tasks["shadowJar"])
project.tasks.withType<KotlinCompile>().forEach { project.tasks.withType<KotlinCompile>().forEach {
it.apply { it.apply {
kotlinOptions.apply { kotlinOptions.apply {
@ -66,7 +46,5 @@ class ConcreteProjectPlugin : Plugin<Project> {
} }
} }
} }
project.concreteRootProject.tasks["setupPaperServer"].dependsOn(project.tasks["shadowJar"])
} }
} }

View File

@ -6,7 +6,7 @@ import org.gradle.api.tasks.TaskOutputs
import java.nio.file.FileSystems import java.nio.file.FileSystems
import java.nio.file.Path 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 fun Project.findPluginProjects() = allprojects.filter { project -> project.isPluginProject() }
internal val Project.shadowJarTask: ShadowJar? internal val Project.shadowJarTask: ShadowJar?