From 2c92e3e215e67ab20a5f7417504f520735a0c700 Mon Sep 17 00:00:00 2001 From: Tim203 Date: Sun, 11 Dec 2022 21:34:47 +0100 Subject: [PATCH] Remove Blossom and use templates --- build-logic/build.gradle.kts | 1 + .../floodgate.generate-templates.gradle.kts | 93 +++++++++++++++++++ core/build.gradle.kts | 15 ++- .../geysermc/floodgate/util/Constants.java | 10 +- settings.gradle.kts | 3 - 5 files changed, 106 insertions(+), 16 deletions(-) create mode 100644 build-logic/src/main/kotlin/floodgate.generate-templates.gradle.kts rename core/src/main/{java => templates}/org/geysermc/floodgate/util/Constants.java (92%) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 64ac14db..75f6eda2 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -12,6 +12,7 @@ dependencies { implementation("net.kyori", "indra-common", "2.0.6") implementation("org.jfrog.buildinfo", "build-info-extractor-gradle", "4.26.1") implementation("gradle.plugin.com.github.johnrengelman", "shadow", "7.1.1") + implementation("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext", "gradle-idea-ext", "1.1.7") } tasks.withType { diff --git a/build-logic/src/main/kotlin/floodgate.generate-templates.gradle.kts b/build-logic/src/main/kotlin/floodgate.generate-templates.gradle.kts new file mode 100644 index 00000000..5f89b302 --- /dev/null +++ b/build-logic/src/main/kotlin/floodgate.generate-templates.gradle.kts @@ -0,0 +1,93 @@ +import org.apache.tools.ant.filters.ReplaceTokens +import org.gradle.plugins.ide.eclipse.model.EclipseModel +import org.gradle.plugins.ide.idea.model.IdeaModel +import org.jetbrains.gradle.ext.ProjectSettings +import org.jetbrains.gradle.ext.TaskTriggersConfig + +plugins { + id("org.jetbrains.gradle.plugin.idea-ext") +} + +registerGenerateTemplateTasks() + +fun Project.registerGenerateTemplateTasks() { + // main and test + extensions.getByType().all { + val javaDestination = layout.buildDirectory.dir("generated/sources/templates/$name") + val javaSrcDir = layout.projectDirectory.dir("src/$name/templates") + val javaGenerateTask = tasks.register( + getTaskName("template", "sources") + ) { + filteringCharset = Charsets.UTF_8.name() + from(javaSrcDir) + into(javaDestination) + filter("tokens" to replacements()) + } + java.srcDir(javaGenerateTask.map { it.outputs }) + + val resourcesDestination = layout.buildDirectory.dir("generated/resources/templates/$name") + val resourcesSrcDir = layout.projectDirectory.dir("src/$name/resourceTemplates") + val resourcesGenerateTask = tasks.register( + getTaskName("template", "resources") + ) { + filteringCharset = Charsets.UTF_8.name() + from(resourcesSrcDir) + into(resourcesDestination) + filter("tokens" to replacements()) + } + resources.srcDir(resourcesGenerateTask.map { it.outputs }) + } + + return configureIdeSync( + tasks.register("allTemplateSources") { + dependsOn(tasks.withType()) + }, + tasks.register("allTemplateResources") { + dependsOn(tasks.withType()) + } + ) +} + +fun Project.configureIdeSync(vararg generateAllTasks: TaskProvider) { + extensions.findByType { + synchronizationTasks(generateAllTasks) + } + + extensions.findByType { + if (project != null) { + (project as ExtensionAware).extensions.configure { + (this as ExtensionAware).extensions.configure { + afterSync(generateAllTasks) + } + } + } + } + + //todo wasn't able to find something for VS(Code) +} + +inline fun ExtensionContainer.findByType(noinline action: T.() -> Unit) { + val extension = findByType(T::class) + if (extension != null) { + action.invoke(extension) + } +} + +abstract class GenerateAnyTemplates : Copy() { + private val replacements = mutableMapOf() + + fun replaceToken(key: String, value: () -> Any) { + replaceToken(key, value.invoke()) + } + + fun replaceToken(key: String, value: Any) { + replacements[key] = value.toString() + } + + fun replacements(): Map { + return replacements + } +} + +open class GenerateResourceTemplates : GenerateAnyTemplates() +open class GenerateSourceTemplates : GenerateAnyTemplates() diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 6a4eb0bc..d7d48737 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,7 +1,5 @@ -import net.kyori.blossom.BlossomExtension - plugins { - id("net.kyori.blossom") + id("floodgate.generate-templates") } dependencies { @@ -26,9 +24,10 @@ provided("io.netty", "netty-codec", Versions.nettyVersion) relocate("org.bstats") -configure { - val constantsFile = "src/main/java/org/geysermc/floodgate/util/Constants.java" - replaceToken("\${floodgateVersion}", fullVersion(), constantsFile) - replaceToken("\${branch}", branchName(), constantsFile) - replaceToken("\${buildNumber}", buildNumber(), constantsFile) +tasks { + templateSources { + replaceToken("floodgateVersion", fullVersion()) + replaceToken("branch", branchName()) + replaceToken("buildNumber", buildNumber()) + } } diff --git a/core/src/main/java/org/geysermc/floodgate/util/Constants.java b/core/src/main/templates/org/geysermc/floodgate/util/Constants.java similarity index 92% rename from core/src/main/java/org/geysermc/floodgate/util/Constants.java rename to core/src/main/templates/org/geysermc/floodgate/util/Constants.java index 5e97aba3..b79a610f 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/Constants.java +++ b/core/src/main/templates/org/geysermc/floodgate/util/Constants.java @@ -26,12 +26,12 @@ package org.geysermc.floodgate.util; public final class Constants { - public static final String VERSION = "${floodgateVersion}"; - public static final int BUILD_NUMBER = Integer.parseInt("${buildNumber}"); - public static final String GIT_BRANCH = "${branch}"; + public static final String VERSION = "@floodgateVersion@"; + public static final int BUILD_NUMBER = Integer.parseInt("@buildNumber@"); + public static final String GIT_BRANCH = "@branch@"; public static final int METRICS_ID = 14649; - public static final char COLOR_CHAR = 'ยง'; + public static final char COLOR_CHAR = '\u00A7'; public static final boolean DEBUG_MODE = false; public static final boolean PRINT_ALL_PACKETS = false; @@ -55,7 +55,7 @@ public final class Constants { public static final String NTP_SERVER = "time.cloudflare.com"; public static final String INTERNAL_ERROR_MESSAGE = - "An internal error happened while handling Floodgate data." + + "An internal error happened while handling Floodgate data." + " Try logging in again or contact a server administrator if the issue persists."; public static final String UNSUPPORTED_DATA_VERSION = "Received an unsupported Floodgate data version." + diff --git a/settings.gradle.kts b/settings.gradle.kts index bcd33b65..dadaef35 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -54,9 +54,6 @@ pluginManagement { repositories { gradlePluginPortal() } - plugins { - id("net.kyori.blossom") version "1.2.0" - } includeBuild("build-logic") }