From 6fda8122eac2155c2523957e15fe45c83a4ca169 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 19:02:20 +0200 Subject: [PATCH 01/13] feat: basic structure --- settings.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/settings.gradle.kts b/settings.gradle.kts index 7cabdca..1b5abd5 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,7 @@ +pluginManagement { + includeBuild("build-logic") +} + plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" } From 66f0ef13869967732121eef581ba0727c6cbe414 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 19:02:36 +0200 Subject: [PATCH 02/13] feat: base conventions --- build-logic/build.gradle.kts | 8 +++ build-logic/settings.gradle.kts | 14 ++++++ .../simplecloud.base-conventions.gradle.kts | 45 +++++++++++++++++ build.gradle.kts | 50 ++++--------------- gradle/libs.versions.toml | 5 ++ 5 files changed, 82 insertions(+), 40 deletions(-) create mode 100644 build-logic/build.gradle.kts create mode 100644 build-logic/settings.gradle.kts create mode 100644 build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 0000000..872840a --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `kotlin-dsl` +} + +dependencies { + implementation(libs.kotlin.gradle.plugin) + implementation(libs.shadow.gradle.plugin) +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 0000000..2f210de --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,14 @@ +dependencyResolutionManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } + + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +rootProject.name = "build-logic" diff --git a/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts new file mode 100644 index 0000000..b755edb --- /dev/null +++ b/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts @@ -0,0 +1,45 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion + +plugins { + kotlin("jvm") + id("com.gradleup.shadow") +} + +repositories { + mavenCentral() + mavenLocal() + maven("https://buf.build/gen/maven") + maven("https://repo.spectr.is/snapshots") + maven("https://repo.simplecloud.app/snapshots") + maven("https://repo.papermc.io/repository/maven-public") +} + +dependencies { + testImplementation(kotlin("test")) +} + +kotlin { + jvmToolchain(25) + compilerOptions { + jvmTarget = JvmTarget.JVM_25 + languageVersion = KotlinVersion.KOTLIN_2_4 + apiVersion = KotlinVersion.KOTLIN_2_4 + } +} + +java { + toolchain.languageVersion.set(JavaLanguageVersion.of(25)) +} + +tasks.test { + useJUnitPlatform() +} + +tasks.processResources { + val properties = mapOf("version" to project.version.toString()) + inputs.properties(properties) + filesMatching(listOf("plugin.yml", "paper-plugin.yml")) { + expand(properties) + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 53464ea..10573a7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,9 +1,6 @@ -import org.jetbrains.kotlin.gradle.dsl.JvmTarget -import org.jetbrains.kotlin.gradle.dsl.KotlinVersion - plugins { id("maven-publish") - alias(libs.plugins.kotlin) + id("simplecloud.base-conventions") apply false } val baseVersion = "1.0.0" @@ -15,49 +12,22 @@ val commitHash = providers.exec { allprojects { group = "app.simplecloud.plugin" version = if (isRelease) baseVersion else "$baseVersion-dev.$commitHash" - - repositories { - mavenCentral() - mavenLocal() - maven("https://buf.build/gen/maven") - maven("https://repo.spectr.is/snapshots") - maven("https://repo.simplecloud.app/snapshots") - maven("https://repo.papermc.io/repository/maven-public") - } } subprojects { apply { plugin("maven-publish") - plugin("org.jetbrains.kotlin.jvm") + plugin("simplecloud.base-conventions") } dependencies { - testImplementation(rootProject.libs.kotlin.test) - compileOnly(rootProject.libs.kotlin.jvm) - compileOnly(rootProject.libs.kotlin.coroutines) - compileOnly(rootProject.libs.simplecloud.api) - compileOnly(rootProject.libs.bundles.cloud) - compileOnly(rootProject.libs.bundles.adventure) - compileOnly(rootProject.libs.bundles.configurate) - compileOnly(rootProject.libs.slf4j.api) - } - - kotlin { - jvmToolchain(25) - compilerOptions { - jvmTarget = JvmTarget.JVM_25 - languageVersion = KotlinVersion.KOTLIN_2_4 - apiVersion = KotlinVersion.KOTLIN_2_4 - } - } - - java { - toolchain.languageVersion.set(JavaLanguageVersion.of(25)) - } - - tasks.test { - useJUnitPlatform() + "compileOnly"(rootProject.libs.kotlin.jvm) + "compileOnly"(rootProject.libs.kotlin.coroutines) + "compileOnly"(rootProject.libs.simplecloud.api) + "compileOnly"(rootProject.libs.bundles.cloud) + "compileOnly"(rootProject.libs.bundles.adventure) + "compileOnly"(rootProject.libs.bundles.configurate) + "compileOnly"(rootProject.libs.slf4j.api) } publishing { @@ -79,4 +49,4 @@ subprojects { } } -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index adaa298..53d110a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,6 +18,8 @@ cloud = "2.1.0" cloud-platform = "2.0.0" cloud-minestom = "2.2.0-SNAPSHOT" +shadow = "9.6.1" + [libraries] kotlin-jvm = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } @@ -47,6 +49,9 @@ cloud-bungee = { module = "org.incendo:cloud-bungee", version.ref = "cloud-platf cloud-paper = { module = "org.incendo:cloud-paper", version.ref = "cloud-platform" } cloud-minestom = { module = "org.incendo:cloud-minestom", version.ref = "cloud-minestom" } +kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +shadow-gradle-plugin = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "shadow" } + [bundles] adventure = ["adventure", "adventure-text-minimessage"] configurate = ["configurate-yaml", "configurate-gson", "configurate-extra-kotlin"] From 40ff7cdfcc8a6f3b1c73eb8b9c2a770ae458f29a Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 19:36:58 +0200 Subject: [PATCH 03/13] feat: spotless --- build-logic/build.gradle.kts | 1 + .../simplecloud.base-conventions.gradle.kts | 1 + .../simplecloud.spotless-conventions.gradle.kts | 15 +++++++++++++++ gradle/libs.versions.toml | 2 ++ 4 files changed, 19 insertions(+) create mode 100644 build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 872840a..75fdb05 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -5,4 +5,5 @@ plugins { dependencies { implementation(libs.kotlin.gradle.plugin) implementation(libs.shadow.gradle.plugin) + implementation(libs.spotless.gradle.plugin) } diff --git a/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts index b755edb..d1b39bc 100644 --- a/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts @@ -4,6 +4,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { kotlin("jvm") id("com.gradleup.shadow") + id("simplecloud.spotless-conventions") } repositories { diff --git a/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts new file mode 100644 index 0000000..8203617 --- /dev/null +++ b/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts @@ -0,0 +1,15 @@ +plugins { + id("com.diffplug.spotless") +} + +val ktfmtVersion = "0.65" + +spotless { + kotlin { + ktfmt(ktfmtVersion).kotlinlangStyle() + } + + kotlinGradle { + ktfmt(ktfmtVersion).kotlinlangStyle() + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 53d110a..fdd3eca 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,6 +19,7 @@ cloud-platform = "2.0.0" cloud-minestom = "2.2.0-SNAPSHOT" shadow = "9.6.1" +spotless = "8.10.4" [libraries] kotlin-jvm = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } @@ -51,6 +52,7 @@ cloud-minestom = { module = "org.incendo:cloud-minestom", version.ref = "cloud-m kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } shadow-gradle-plugin = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "shadow" } +spotless-gradle-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version.ref = "spotless" } [bundles] adventure = ["adventure", "adventure-text-minimessage"] From 48364b84d2b2727908d277d61bab5c422a86f48e Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 19:39:49 +0200 Subject: [PATCH 04/13] feat: apply spotless --- .../bungeecord/command/BungeeCloudSender.kt | 5 +- .../command/BungeeCloudSenderMapper.kt | 1 - .../permission/BungeeCordPermissionChecker.kt | 1 - .../text/BungeeComponentConverter.kt | 12 +- .../minestom/command/MinestomCloudSender.kt | 5 +- .../command/MinestomCloudSenderMapper.kt | 3 +- .../permission/MinestomPermissionChecker.kt | 4 +- .../permission/MinestomPermissions.kt | 7 +- .../api/paper/command/PaperCloudSender.kt | 3 +- .../paper/command/PaperCloudSenderMapper.kt | 1 - .../permission/PaperPermissionChecker.kt | 1 - .../api/shared/adventure/AdventureExt.kt | 32 +- .../plugin/api/shared/command/CloudSender.kt | 23 +- .../api/shared/command/CloudSuggestions.kt | 278 +++++++++--------- .../shared/config/AbstractMessageConfig.kt | 10 +- .../api/shared/config/ConfigMigrator.kt | 40 ++- .../api/shared/config/ConfigurationFactory.kt | 28 +- .../shared/config/DefaultConfigInstaller.kt | 28 +- .../api/shared/config/VersionedConfig.kt | 4 +- .../shared/config/YamlDirectoryRepository.kt | 35 +-- .../api/shared/config/YamlFileConfigurator.kt | 28 +- .../serializer/GenericEnumSerializer.kt | 7 +- .../api/shared/matcher/OperationType.kt | 34 +-- .../matcher/ServerMatcherConfiguration.kt | 8 +- .../operation/NumericOperationMatcher.kt | 2 +- .../matcher/operation/OperationMatcher.kt | 3 +- .../impl/ContainsOperationMatcher.kt | 3 +- .../impl/EndsWithOperationMatcher.kt | 3 +- .../operation/impl/EqualsOperationMatcher.kt | 3 +- .../impl/GreaterThanOperationMatcher.kt | 3 +- .../operation/impl/PatternOperationMatcher.kt | 5 +- .../operation/impl/RegexOperationMatcher.kt | 3 +- .../impl/StartsWithOperationMatcher.kt | 3 +- .../shared/pattern/ServerPatternIdentifier.kt | 31 +- .../shared/permission/PermissionChecker.kt | 9 +- .../shared/placeholder/PlaceholderProvider.kt | 8 +- .../placeholder/argument/ArgumentsResolver.kt | 13 +- .../argument/EnvironmentArgumentsResolver.kt | 8 +- .../argument/PropertiesArgumentsResolver.kt | 10 +- .../group/PlayerCountArgumentsResolver.kt | 1 - .../group/ServerCountArgumentsResolver.kt | 1 - .../placeholder/async/AsyncPlaceholder.kt | 12 +- .../async/AsyncPlaceholderHandler.kt | 9 +- .../provider/AbstractPlaceholderProvider.kt | 23 +- .../provider/GroupPlaceholderProvider.kt | 19 +- .../PersistentServerPlaceholderProvider.kt | 22 +- .../provider/ServerPlaceholderProvider.kt | 22 +- .../single/SingleGroupPlaceholderExecutor.kt | 21 +- ...nglePersistentServerPlaceholderExecutor.kt | 35 +-- .../single/SinglePlaceholderExecutor.kt | 15 +- .../single/SingleServerPlaceholderExecutor.kt | 43 ++- .../plugin/api/shared/pretty/PrettifyCase.kt | 2 +- .../api/shared/pretty/StringPrettifier.kt | 25 +- .../config/ConfigurationMigrationTest.kt | 37 ++- .../api/shared/pretty/StringPrettifierTest.kt | 60 +++- plugin-velocity/build.gradle.kts | 2 +- .../velocity/command/VelocityCloudSender.kt | 3 +- .../command/VelocityCloudSenderMapper.kt | 1 - .../permission/VelocityPermissionChecker.kt | 8 +- 59 files changed, 514 insertions(+), 552 deletions(-) diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt index e70ffb0..3f6ac77 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt @@ -2,13 +2,13 @@ package app.simplecloud.plugin.api.bungeecord.command import app.simplecloud.plugin.api.bungeecord.text.BungeeComponentConverter import app.simplecloud.plugin.api.shared.command.CloudSender +import java.util.UUID import net.kyori.adventure.text.Component import net.md_5.bungee.api.CommandSender import net.md_5.bungee.api.connection.ProxiedPlayer -import java.util.UUID class BungeeCloudSender( - private val commandSender: CommandSender + private val commandSender: CommandSender, ) : CloudSender { fun getCommandSender(): CommandSender { @@ -26,5 +26,4 @@ class BungeeCloudSender( override fun sendMessage(message: Component) { commandSender.sendMessage(BungeeComponentConverter.toBungee(message)) } - } diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt index 698ddee..e5448eb 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt @@ -12,5 +12,4 @@ class BungeeCloudSenderMapper : SenderMapper { override fun reverse(mapped: BungeeCloudSender): CommandSender { return mapped.getCommandSender() } - } diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt index 9753dfb..7450e5f 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt @@ -8,5 +8,4 @@ class BungeeCordPermissionChecker : PermissionChecker { override fun checkPermission(player: ProxiedPlayer, name: String): Boolean { return player.hasPermission(name) } - } diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/text/BungeeComponentConverter.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/text/BungeeComponentConverter.kt index 9d85dc2..f1e1632 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/text/BungeeComponentConverter.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/text/BungeeComponentConverter.kt @@ -5,22 +5,16 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer import net.md_5.bungee.api.chat.BaseComponent import net.md_5.bungee.chat.ComponentSerializer -/** - * Converts between Adventure and BungeeCord components. - */ +/** Converts between Adventure and BungeeCord components. */ object BungeeComponentConverter { private val serializer = GsonComponentSerializer.gson() - /** - * Converts the given [component] into a [BaseComponent]. - */ + /** Converts the given [component] into a [BaseComponent]. */ fun toBungee(component: Component): BaseComponent = ComponentSerializer.deserialize(serializer.serialize(component)) - /** - * Converts the given [component] into an Adventure [Component]. - */ + /** Converts the given [component] into an Adventure [Component]. */ fun fromBungee(component: BaseComponent): Component = serializer.deserialize(ComponentSerializer.toString(component)) } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt index 92067f5..c92353c 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt @@ -2,14 +2,14 @@ package app.simplecloud.plugin.api.minestom.command import app.simplecloud.plugin.api.minestom.permission.MinestomPermissions import app.simplecloud.plugin.api.shared.command.CloudSender +import java.util.UUID import net.kyori.adventure.text.Component import net.minestom.server.command.CommandSender import net.minestom.server.entity.Player -import java.util.UUID class MinestomCloudSender( private val commandSender: CommandSender, - private val permissions: MinestomPermissions + private val permissions: MinestomPermissions, ) : CloudSender { fun getCommandSender(): CommandSender { @@ -27,5 +27,4 @@ class MinestomCloudSender( override fun sendMessage(message: Component) { commandSender.sendMessage(message) } - } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt index 6ca2b6a..94d71e7 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt @@ -5,7 +5,7 @@ import net.minestom.server.command.CommandSender import org.incendo.cloud.SenderMapper class MinestomCloudSenderMapper( - private val permissions: MinestomPermissions + private val permissions: MinestomPermissions, ) : SenderMapper { override fun map(base: CommandSender): MinestomCloudSender { @@ -15,5 +15,4 @@ class MinestomCloudSenderMapper( override fun reverse(mapped: MinestomCloudSender): CommandSender { return mapped.getCommandSender() } - } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt index 63ed96c..f8639a5 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt @@ -3,10 +3,10 @@ package app.simplecloud.plugin.api.minestom.permission import app.simplecloud.plugin.api.shared.permission.PermissionChecker import net.minestom.server.entity.Player -class MinestomPermissionChecker(private val permissions: MinestomPermissions) : PermissionChecker { +class MinestomPermissionChecker(private val permissions: MinestomPermissions) : + PermissionChecker { override fun checkPermission(player: Player, name: String): Boolean { return permissions.hasPermission(player, name) } - } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt index 7bd91ef..8aad506 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt @@ -1,13 +1,13 @@ package app.simplecloud.plugin.api.minestom.permission +import java.util.function.BiPredicate import net.minestom.server.command.CommandSender import net.minestom.server.command.ConsoleSender import net.minestom.server.entity.Player -import java.util.function.BiPredicate /** - * Utility for checking permissions on a Minestom server. - * Without a [check], only players with permission level 4 have permissions. + * Utility for checking permissions on a Minestom server. Without a [check], only players with + * permission level 4 have permissions. */ class MinestomPermissions(private val check: BiPredicate?) { @@ -25,5 +25,4 @@ class MinestomPermissions(private val check: BiPredicate?) { fun getChecker(): MinestomPermissionChecker { return MinestomPermissionChecker(this) } - } diff --git a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt index e4b0ba3..25cb14f 100644 --- a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt +++ b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt @@ -2,10 +2,10 @@ package app.simplecloud.plugin.api.paper.command import app.simplecloud.plugin.api.shared.command.CloudSender import io.papermc.paper.command.brigadier.CommandSourceStack +import java.util.UUID import net.kyori.adventure.text.Component import org.bukkit.command.CommandSender import org.bukkit.entity.Player -import java.util.UUID class PaperCloudSender(private val sourceStack: CommandSourceStack) : CloudSender { @@ -28,5 +28,4 @@ class PaperCloudSender(private val sourceStack: CommandSourceStack) : CloudSende override fun sendMessage(message: Component) { sourceStack.sender.sendMessage(message) } - } diff --git a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt index 7ce54d3..bf0de80 100644 --- a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt +++ b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt @@ -12,5 +12,4 @@ object PaperCloudSenderMapper : SenderMapper { override fun checkPermission(player: Player, name: String): Boolean { return player.hasPermission(name) } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt index 9d87bfc..bfe6384 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt @@ -22,8 +22,9 @@ fun tags(vararg entries: Pair): TagResolver { return TagResolver.resolver( entries.map { (key, value) -> val text = value?.toString() ?: "" - if (key == "playername" && playerNameRegex.matches(text)) Placeholder.parsed(key, text) else Placeholder.unparsed(key, text) - } + if (key == "playername" && playerNameRegex.matches(text)) Placeholder.parsed(key, text) + else Placeholder.unparsed(key, text) + }, ) } @@ -32,21 +33,36 @@ suspend fun String.appendToComponent( prefix: String? = null, vararg argumentsResolver: ArgumentsResolver, ): Component { - return PlaceholderProvider.serverPlaceholderProvider.append(server, this, prefix, *argumentsResolver) + return PlaceholderProvider.serverPlaceholderProvider.append( + server, + this, + prefix, + *argumentsResolver, + ) } suspend fun String.appendToComponent( group: Group, prefix: String? = null, - vararg argumentsResolver: ArgumentsResolver + vararg argumentsResolver: ArgumentsResolver, ): Component { - return PlaceholderProvider.groupPlaceholderProvider.append(group, this, prefix, *argumentsResolver) + return PlaceholderProvider.groupPlaceholderProvider.append( + group, + this, + prefix, + *argumentsResolver, + ) } suspend fun String.appendToComponent( persistentServer: PersistentServer, prefix: String? = null, - vararg argumentsResolver: ArgumentsResolver + vararg argumentsResolver: ArgumentsResolver, ): Component { - return PlaceholderProvider.persistentServerPlaceholderProvider.append(persistentServer, this, prefix, *argumentsResolver) -} \ No newline at end of file + return PlaceholderProvider.persistentServerPlaceholderProvider.append( + persistentServer, + this, + prefix, + *argumentsResolver, + ) +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt index d53c292..89bab73 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt @@ -1,31 +1,20 @@ package app.simplecloud.plugin.api.shared.command -import net.kyori.adventure.text.Component import java.util.UUID +import net.kyori.adventure.text.Component -/** - * A command sender, e.g. a player or the console. - */ +/** A command sender, e.g. a player or the console. */ interface CloudSender { - /** - * The unique id of the player, or `null` if the sender is not a player. - */ + /** The unique id of the player, or `null` if the sender is not a player. */ fun getUniqueId(): UUID? - /** - * Whether the sender has the given [permission]. - */ + /** Whether the sender has the given [permission]. */ fun hasPermission(permission: String): Boolean - /** - * Sends the [message] to the sender. - */ + /** Sends the [message] to the sender. */ fun sendMessage(message: Component) - /** - * Whether the sender is a player. - */ + /** Whether the sender is a player. */ fun isPlayer(): Boolean = getUniqueId() != null - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt index 93901fe..2cbcd57 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt @@ -9,218 +9,233 @@ import org.incendo.cloud.kotlin.coroutines.SuspendingSuggestionProvider import org.incendo.cloud.suggestion.Suggestion import org.incendo.cloud.suggestion.SuggestionProvider -/** - * Commonly used suggestion providers for commands. - */ +/** Commonly used suggestion providers for commands. */ object CloudSuggestions { const val TARGET_TYPE_GROUP = "group" const val TARGET_TYPE_PERSISTENT_SERVER = "ps" - /** - * Suggests the names of all groups. - */ + /** Suggests the names of all groups. */ fun groups(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.group().allGroups.await().map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() + try { + api.group().allGroups.await().map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the names of all groups of the given [type]. - */ + /** Suggests the names of all groups of the given [type]. */ fun groups(api: CloudApi, type: GroupServerType): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.group().allGroups.await() - .filter { it.type == type } - .map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() + try { + api.group() + .allGroups + .await() + .filter { it.type == type } + .map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the names of all proxy groups. - */ + /** Suggests the names of all proxy groups. */ fun proxyGroups(api: CloudApi): SuggestionProvider = groups(api, GroupServerType.PROXY) - /** - * Suggests the names of all server groups. - */ + /** Suggests the names of all server groups. */ fun serverGroups(api: CloudApi): SuggestionProvider = groups(api, GroupServerType.SERVER) /** - * Suggests the numerical ids of the servers of the group stored in the argument [groupArgument]. + * Suggests the numerical ids of the servers of the group stored in the argument + * [groupArgument]. */ fun serverIds(api: CloudApi, groupArgument: String = "group"): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val group = context.get(groupArgument) - api.server().getServersByGroup(group).await() - .sortedBy { it.numericalId } - .map { Suggestion.suggestion(it.numericalId.toString()) } - } catch (_: Exception) { - emptyList() + try { + val group = context.get(groupArgument) + api.server() + .getServersByGroup(group) + .await() + .sortedBy { it.numericalId } + .map { Suggestion.suggestion(it.numericalId.toString()) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the names of all running servers. - */ + /** Suggests the names of all running servers. */ fun servers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.server().allServers.await() - .mapNotNull { serverName(it) } - .map { Suggestion.suggestion(it) } - } catch (_: Exception) { - emptyList() + try { + api.server() + .allServers + .await() + .mapNotNull { serverName(it) } + .map { Suggestion.suggestion(it) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the names of all running servers in one of the given [states]. - */ + /** Suggests the names of all running servers in one of the given [states]. */ fun servers(api: CloudApi, vararg states: ServerState): SuggestionProvider { val stateSet = states.toSet() return SuspendingSuggestionProvider { _, _ -> - try { - api.server().allServers.await() - .filter { it.state in stateSet } - .mapNotNull { serverName(it) } - .map { Suggestion.suggestion(it) } - } catch (_: Exception) { - emptyList() + try { + api.server() + .allServers + .await() + .filter { it.state in stateSet } + .mapNotNull { serverName(it) } + .map { Suggestion.suggestion(it) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() } - /** - * Suggests the names of all running servers that players can join. - */ + /** Suggests the names of all running servers that players can join. */ fun availableServers(api: CloudApi): SuggestionProvider = servers(api, ServerState.AVAILABLE, ServerState.INGAME) - /** - * Suggests the names of all persistent servers. - */ + /** Suggests the names of all persistent servers. */ fun persistentServers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.persistentServer().allPersistentServers.await().map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() + try { + api.persistentServer().allPersistentServers.await().map { + Suggestion.suggestion(it.name) + } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the names of all online players. - */ + /** Suggests the names of all online players. */ fun onlinePlayers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.player().onlinePlayers.await().map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() + try { + api.player().onlinePlayers.await().map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the names of all online players except the command sender. - */ + /** Suggests the names of all online players except the command sender. */ fun otherOnlinePlayers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val uniqueId = context.sender().getUniqueId() - api.player().onlinePlayers.await() - .filter { it.uniqueId != uniqueId } - .map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() + try { + val uniqueId = context.sender().getUniqueId() + api.player() + .onlinePlayers + .await() + .filter { it.uniqueId != uniqueId } + .map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() /** - * Suggests the names of all players connected to the server stored in the argument [serverArgument]. + * Suggests the names of all players connected to the server stored in the argument + * [serverArgument]. */ - //fun playersOnServer(api: CloudApi, serverArgument: String = "server"): SuggestionProvider = + // fun playersOnServer(api: CloudApi, serverArgument: String = "server"): + // SuggestionProvider = // SuspendingSuggestionProvider { context, _ -> // try { // val server = context.get(serverArgument) - // api.player().getOnlinePlayers(server).await().map { Suggestion.suggestion(it.name) } + // api.player().getOnlinePlayers(server).await().map { Suggestion.suggestion(it.name) + // } // } catch (_: Exception) { // emptyList() // } // }.asSuggestionProvider() /** - * Suggests the names of all players connected to the proxy stored in the argument [proxyArgument]. + * Suggests the names of all players connected to the proxy stored in the argument + * [proxyArgument]. */ - fun playersOnProxy(api: CloudApi, proxyArgument: String = "proxy"): SuggestionProvider = + fun playersOnProxy( + api: CloudApi, + proxyArgument: String = "proxy", + ): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val proxy = context.get(proxyArgument) - api.player().onlinePlayers.await() - .filter { it.connectedProxyName.equals(proxy, true) } - .map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() + try { + val proxy = context.get(proxyArgument) + api.player() + .onlinePlayers + .await() + .filter { it.connectedProxyName.equals(proxy, true) } + .map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() + } } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests the target types [TARGET_TYPE_GROUP] and [TARGET_TYPE_PERSISTENT_SERVER]. - */ + /** Suggests the target types [TARGET_TYPE_GROUP] and [TARGET_TYPE_PERSISTENT_SERVER]. */ fun targetTypes(): SuggestionProvider = of(TARGET_TYPE_GROUP, TARGET_TYPE_PERSISTENT_SERVER) /** - * Suggests group or persistent server names, depending on the target type stored in the argument [targetTypeArgument]. + * Suggests group or persistent server names, depending on the target type stored in the + * argument [targetTypeArgument]. */ - fun targets(api: CloudApi, targetTypeArgument: String = "targetType"): SuggestionProvider = + fun targets( + api: CloudApi, + targetTypeArgument: String = "targetType", + ): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val targetType = context.get(targetTypeArgument) - when { - targetType.equals(TARGET_TYPE_GROUP, true) -> api.group().allGroups.await().map { Suggestion.suggestion(it.name) } - targetType.equals(TARGET_TYPE_PERSISTENT_SERVER, true) -> api.persistentServer().allPersistentServers.await().map { Suggestion.suggestion(it.name) } - else -> emptyList() + try { + val targetType = context.get(targetTypeArgument) + when { + targetType.equals(TARGET_TYPE_GROUP, true) -> + api.group().allGroups.await().map { Suggestion.suggestion(it.name) } + targetType.equals(TARGET_TYPE_PERSISTENT_SERVER, true) -> + api.persistentServer().allPersistentServers.await().map { + Suggestion.suggestion(it.name) + } + else -> emptyList() + } + } catch (_: Exception) { + emptyList() } - } catch (_: Exception) { - emptyList() } - }.asSuggestionProvider() + .asSuggestionProvider() - /** - * Suggests all known [ServerState]s. - */ + /** Suggests all known [ServerState]s. */ fun serverStates(): SuggestionProvider = - of(ServerState.entries.filter { it != ServerState.UNKNOWN_STATE }.map { it.name.lowercase() }) + of( + ServerState.entries + .filter { it != ServerState.UNKNOWN_STATE } + .map { it.name.lowercase() }, + ) - //fun selectionModes(): SuggestionProvider = + // fun selectionModes(): SuggestionProvider = // of(ServerSelectionMode.entries.map { it.name.lowercase() }) - /** - * Suggests all known [GroupServerType]s. - */ + /** Suggests all known [GroupServerType]s. */ fun serverTypes(): SuggestionProvider = - of(GroupServerType.entries.filter { it != GroupServerType.UNKNOWN_SERVER }.map { it.name.lowercase() }) + of( + GroupServerType.entries + .filter { it != GroupServerType.UNKNOWN_SERVER } + .map { it.name.lowercase() }, + ) - /** - * Suggests the given fixed [values]. - */ - fun of(vararg values: String): SuggestionProvider = - of(values.toList()) + /** Suggests the given fixed [values]. */ + fun of(vararg values: String): SuggestionProvider = of(values.toList()) - /** - * Suggests the given fixed [values]. - */ + /** Suggests the given fixed [values]. */ fun of(values: Collection): SuggestionProvider { val suggestions = values.map { Suggestion.suggestion(it) } return SuggestionProvider.blocking { _, _ -> suggestions } @@ -232,5 +247,4 @@ object CloudSuggestions { val group = server.group ?: return null return "${group.name}-${server.numericalId}" } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt index 3bc8505..eef8619 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt @@ -5,9 +5,7 @@ import net.kyori.adventure.text.Component import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** - * Base class for a message configuration with variables. - */ +/** Base class for a message configuration with variables. */ abstract class AbstractMessageConfig { abstract val variables: Map @@ -16,13 +14,11 @@ abstract class AbstractMessageConfig { TagResolver.resolver( variables.map { (key, value) -> TagResolver.resolver(key, Tag.selfClosingInserting(miniMessage.deserialize(value))) - } + }, ) } - /** - * Parses the [message] with the [variables] and the [extra] resolvers. - */ + /** Parses the [message] with the [variables] and the [extra] resolvers. */ fun msg(message: String, vararg extra: TagResolver): Component { return miniMessage.deserialize(message, TagResolver.resolver(resolver, *extra)) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt index e3e4350..3c2f65e 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt @@ -2,9 +2,7 @@ package app.simplecloud.plugin.api.shared.config import org.spongepowered.configurate.CommentedConfigurationNode -/** - * A single migration step that modifies a yaml node in place. - */ +/** A single migration step that modifies a yaml node in place. */ fun interface ConfigMigration { fun migrate(node: CommentedConfigurationNode) } @@ -18,7 +16,8 @@ fun interface ConfigMigration { * .build() * ``` */ -class ConfigMigrator private constructor( +class ConfigMigrator +private constructor( private val currentVersion: Int, private val fallbackVersion: Int, private val migrationsByFromVersion: Map, @@ -30,9 +29,7 @@ class ConfigMigrator private constructor( } } - /** - * Migrates the [node] to the current version and returns whether anything was migrated. - */ + /** Migrates the [node] to the current version and returns whether anything was migrated. */ fun migrate(node: CommentedConfigurationNode): Boolean { var version = node.node(VERSION_NODE).getInt(fallbackVersion) @@ -42,9 +39,10 @@ class ConfigMigrator private constructor( var migrated = false while (version < currentVersion) { - val migration = checkNotNull(migrationsByFromVersion[version]) { - "Missing config migration from version $version to $currentVersion" - } + val migration = + checkNotNull(migrationsByFromVersion[version]) { + "Missing config migration from version $version to $currentVersion" + } migration.action.migrate(node) version = migration.toVersion @@ -55,16 +53,15 @@ class ConfigMigrator private constructor( return migrated } - class Builder internal constructor( + class Builder + internal constructor( private val currentVersion: Int, ) { private var fallbackVersion = 0 private val migrations = mutableMapOf() - /** - * The version that is assumed if the config has no version node yet. Defaults to `0`. - */ + /** The version that is assumed if the config has no version node yet. Defaults to `0`. */ fun fallbackVersion(version: Int): Builder = apply { require(version >= 0) { "The fallback version must be greater than or equal to 0" @@ -72,9 +69,7 @@ class ConfigMigrator private constructor( fallbackVersion = version } - /** - * Registers a migration from [fromVersion] to [toVersion]. - */ + /** Registers a migration from [fromVersion] to [toVersion]. */ fun migrate(fromVersion: Int, toVersion: Int, action: ConfigMigration): Builder = apply { require(fromVersion >= 0) { "The source config version must be greater than or equal to 0" @@ -92,11 +87,12 @@ class ConfigMigrator private constructor( migrations[fromVersion] = MigrationStep(toVersion, action) } - fun build(): ConfigMigrator = ConfigMigrator( - currentVersion = currentVersion, - fallbackVersion = fallbackVersion, - migrationsByFromVersion = migrations.toMap(), - ) + fun build(): ConfigMigrator = + ConfigMigrator( + currentVersion = currentVersion, + fallbackVersion = fallbackVersion, + migrationsByFromVersion = migrations.toMap(), + ) } private data class MigrationStep( diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt index d8e9a8e..051e602 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt @@ -3,9 +3,7 @@ package app.simplecloud.plugin.api.shared.config import java.io.File import java.nio.file.Path -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ class ConfigurationFactory( private val file: File, javaClass: Class, @@ -16,9 +14,7 @@ class ConfigurationFactory( private var config: E? = null - /** - * Loads the config, or creates the file from [defaultConfig] if it does not exist. - */ + /** Loads the config, or creates the file from [defaultConfig] if it does not exist. */ fun loadOrCreate(defaultConfig: E): E { if (file.exists()) { return load() ?: throw NullPointerException("failed to load config") @@ -28,24 +24,18 @@ class ConfigurationFactory( return defaultConfig } - /** - * The cached config. Throws if it has not been loaded yet. - */ + /** The cached config. Throws if it has not been loaded yet. */ fun get(): E { return config ?: throw NullPointerException("failed to find config") } - /** - * Writes the [entry] to the file and caches it. - */ + /** Writes the [entry] to the file and caches it. */ fun save(entry: E) { configurator.save(file, entry) config = entry } - /** - * Reloads the file into the cache. - */ + /** Reloads the file into the cache. */ fun reload() { load() } @@ -70,12 +60,12 @@ class ConfigurationFactory( ): ConfigurationFactory { val file = File(dataDirectory, fileName) DefaultConfigInstaller.install(file.toPath(), classLoader) - return ConfigurationFactory(file, E::class.java, migrator).also { it.loadOrCreate(default) } + return ConfigurationFactory(file, E::class.java, migrator).also { + it.loadOrCreate(default) + } } - /** - * Same as [create] but with a [Path] as data directory. - */ + /** Same as [create] but with a [Path] as data directory. */ inline fun create( dataDirectory: Path, fileName: String, diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt index 166da06..32fc5e3 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt @@ -3,23 +3,30 @@ package app.simplecloud.plugin.api.shared.config import java.nio.file.Files import java.nio.file.Path -/** - * Copies bundled default files from the jar into the data directory. - */ +/** Copies bundled default files from the jar into the data directory. */ object DefaultConfigInstaller { /** - * Copies the bundled resource with the same file name as [target] if [target] does not exist yet. + * Copies the bundled resource with the same file name as [target] if [target] does not exist + * yet. */ fun install(target: Path, classLoader: ClassLoader) { copy(target, target.fileName.toString(), classLoader) } /** - * Copies all [resources] into [dataDirectory]. Paths may contain sub directories, e.g. `layout/public.yml`. + * Copies all [resources] into [dataDirectory]. Paths may contain sub directories, e.g. + * `layout/public.yml`. */ - fun installAll(dataDirectory: Path, resources: List, classLoader: ClassLoader, resourcePrefix: String = "") { - val prefix = if (resourcePrefix.isEmpty() || resourcePrefix.endsWith("/")) resourcePrefix else "$resourcePrefix/" + fun installAll( + dataDirectory: Path, + resources: List, + classLoader: ClassLoader, + resourcePrefix: String = "", + ) { + val prefix = + if (resourcePrefix.isEmpty() || resourcePrefix.endsWith("/")) resourcePrefix + else "$resourcePrefix/" resources.forEach { resource -> copy(dataDirectory.resolve(resource), prefix + resource, classLoader) } @@ -28,9 +35,10 @@ object DefaultConfigInstaller { private fun copy(target: Path, resourceName: String, classLoader: ClassLoader) { if (Files.exists(target)) return - val resource = checkNotNull(classLoader.getResourceAsStream(resourceName)) { - "Missing bundled $resourceName" - } + val resource = + checkNotNull(classLoader.getResourceAsStream(resourceName)) { + "Missing bundled $resourceName" + } Files.createDirectories(target.parent) resource.use { stream -> Files.copy(stream, target) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/VersionedConfig.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/VersionedConfig.kt index 7bf1324..67c1e16 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/VersionedConfig.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/VersionedConfig.kt @@ -1,8 +1,6 @@ package app.simplecloud.plugin.api.shared.config -/** - * Marks a config as versioned, so it can be used with a [ConfigMigrator]. - */ +/** Marks a config as versioned, so it can be used with a [ConfigMigrator]. */ interface VersionedConfig { val version: Int } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt index e1f9bc4..a47b8dd 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt @@ -4,9 +4,7 @@ import java.io.File import java.nio.file.Files import java.nio.file.Path -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ abstract class YamlDirectoryRepository( private val directory: Path, javaClass: Class, @@ -17,58 +15,45 @@ abstract class YamlDirectoryRepository( private val cachedEntities = mutableMapOf() - /** - * Saves the [entity] to the directory. - */ + /** Saves the [entity] to the directory. */ abstract fun save(entity: E) - /** - * Finds a cached entity by its [identifier]. - */ + /** Finds a cached entity by its [identifier]. */ abstract fun find(identifier: I): E? - /** - * All cached entities. - */ + /** All cached entities. */ fun findAll(): List { return cachedEntities.values.toList() } - /** - * Loads all `.yml` and `.yaml` files of the directory and creates it if missing. - */ + /** Loads all `.yml` and `.yaml` files of the directory and creates it if missing. */ fun load(): List { Files.createDirectories(directory) return Files.walk(directory).use { paths -> - paths.toList() + paths + .toList() .map { it.toFile() } .filter { it.extension == "yml" || it.extension == "yaml" } .mapNotNull { load(it) } } } - /** - * Loads and caches the entity of a single [file]. - */ + /** Loads and caches the entity of a single [file]. */ fun load(file: File): E? { val entity = configurator.load(file) ?: return null cachedEntities[file] = entity return entity } - /** - * Saves the [entity] to the file [name] inside the directory. - */ + /** Saves the [entity] to the file [name] inside the directory. */ protected fun save(name: String, entity: E) { val file = directory.resolve(name).toFile() configurator.save(file, entity) cachedEntities[file] = entity } - /** - * Deletes the file of the [entity]. - */ + /** Deletes the file of the [entity]. */ fun delete(entity: E) { val file = cachedEntities.entries.find { it.value == entity }?.key ?: return file.delete() diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt index ed405c2..53b567a 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt @@ -1,15 +1,13 @@ package app.simplecloud.plugin.api.shared.config import app.simplecloud.plugin.api.shared.config.serializer.GenericEnumSerializer +import java.io.File import org.spongepowered.configurate.CommentedConfigurationNode import org.spongepowered.configurate.kotlin.objectMapperFactory import org.spongepowered.configurate.yaml.NodeStyle import org.spongepowered.configurate.yaml.YamlConfigurationLoader -import java.io.File -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ class YamlFileConfigurator( private val javaClass: Class, private val configMigrator: ConfigMigrator? = null, @@ -23,9 +21,8 @@ class YamlFileConfigurator( private val configurationLoaders = hashMapOf() - private val defaultConfigurationBuilder = YamlConfigurationLoader.builder() - .nodeStyle(NodeStyle.BLOCK) - .defaultOptions { options -> + private val defaultConfigurationBuilder = + YamlConfigurationLoader.builder().nodeStyle(NodeStyle.BLOCK).defaultOptions { options -> options.serializers { builder -> builder.registerAnnotatedObjects(objectMapperFactory()) builder.register(Enum::class.java, GenericEnumSerializer) @@ -33,18 +30,14 @@ class YamlFileConfigurator( } } - /** - * Writes the [entity] to the [file]. - */ + /** Writes the [entity] to the [file]. */ fun save(file: File, entity: E) { val (node, loader) = buildNode(file) node.set(javaClass, entity) loader.save(node) } - /** - * Reads the [file], migrates it if needed and saves the migrated result. - */ + /** Reads the [file], migrates it if needed and saves the migrated result. */ fun load(file: File): E? { val (node, loader) = buildNode(file) if (configMigrator?.migrate(node) == true) { @@ -53,21 +46,16 @@ class YamlFileConfigurator( return node.get(javaClass) } - /** - * Loads the raw node of the [file] together with its loader. - */ + /** Loads the raw node of the [file] together with its loader. */ fun buildNode(file: File): Pair { val loader = getOrCreateConfigurationLoader(file) return loader.load() to loader } - /** - * The cached loader of the [file]. - */ + /** The cached loader of the [file]. */ fun getOrCreateConfigurationLoader(file: File): YamlConfigurationLoader { return configurationLoaders.getOrPut(file) { defaultConfigurationBuilder.path(file.toPath()).build() } } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt index 4a1bf63..2a2f2ab 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt @@ -1,13 +1,11 @@ package app.simplecloud.plugin.api.shared.config.serializer +import java.lang.reflect.Type import org.spongepowered.configurate.ConfigurationNode import org.spongepowered.configurate.serialize.SerializationException import org.spongepowered.configurate.serialize.TypeSerializer -import java.lang.reflect.Type -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ object GenericEnumSerializer : TypeSerializer> { @Suppress("UNCHECKED_CAST") @@ -28,5 +26,4 @@ object GenericEnumSerializer : TypeSerializer> { override fun serialize(type: Type, obj: Enum<*>?, node: ConfigurationNode) { node.set(obj?.name) } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt index 581d2d8..a37da65 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt @@ -6,7 +6,7 @@ import app.simplecloud.plugin.api.shared.matcher.operation.StringOperationMatche import app.simplecloud.plugin.api.shared.matcher.operation.impl.* enum class OperationType( - private val matcher: OperationMatcher<*, *> + private val matcher: OperationMatcher<*, *>, ) { REGEX(RegexOperationMatcher), @@ -18,22 +18,23 @@ enum class OperationType( GREATER_THAN(GreaterThanOperationMatcher); fun matches(key: Any, value: Any, negate: Boolean): Boolean { - val matches = when (matcher) { - is StringOperationMatcher -> { - if (key is String && value is String) { - matcher.matches(key, value) - } else false + val matches = + when (matcher) { + is StringOperationMatcher -> { + if (key is String && value is String) { + matcher.matches(key, value) + } else false + } + + is NumericOperationMatcher -> { + if (key is Int && value is Int) { + matcher.matches(key, value) + } else false + } + + else -> false } - is NumericOperationMatcher -> { - if (key is Int && value is Int) { - matcher.matches(key, value) - } else false - } - - else -> false - } - return if (negate) matches.not() else matches } @@ -44,5 +45,4 @@ enum class OperationType( fun allMatches(names: List, value: String, negate: Boolean): Boolean { return names.all { matches(it, value, negate) } } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt index 9ffa5c0..5d139b4 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt @@ -2,10 +2,7 @@ package app.simplecloud.plugin.api.shared.matcher import org.spongepowered.configurate.objectmapping.ConfigSerializable -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ @ConfigSerializable data class ServerMatcherConfiguration( val operation: OperationType = OperationType.STARTS_WITH, @@ -24,5 +21,4 @@ data class ServerMatcherConfiguration( fun allMatches(names: List): Boolean { return this.operation.allMatches(names, this.value, this.negate) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/NumericOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/NumericOperationMatcher.kt index dfdc488..bd3653f 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/NumericOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/NumericOperationMatcher.kt @@ -1,3 +1,3 @@ package app.simplecloud.plugin.api.shared.matcher.operation -interface NumericOperationMatcher : OperationMatcher \ No newline at end of file +interface NumericOperationMatcher : OperationMatcher diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/OperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/OperationMatcher.kt index d597e0b..47b365c 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/OperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/OperationMatcher.kt @@ -3,5 +3,4 @@ package app.simplecloud.plugin.api.shared.matcher.operation interface OperationMatcher { fun matches(key: K, value: V): Boolean - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt index 3a0243e..e0ab927 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt @@ -9,5 +9,4 @@ object ContainsOperationMatcher : StringOperationMatcher { override fun matches(key: String, value: String): Boolean { return key.contains(value, ignoreCase = true) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt index dd369fe..8f62df5 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt @@ -9,5 +9,4 @@ object EndsWithOperationMatcher : StringOperationMatcher { override fun matches(key: String, value: String): Boolean { return key.endsWith(value, ignoreCase = true) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt index 98c2729..663a6e6 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt @@ -9,5 +9,4 @@ object EqualsOperationMatcher : StringOperationMatcher { override fun matches(key: String, value: String): Boolean { return key.equals(value, ignoreCase = true) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt index 41dfc72..73e3aca 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt @@ -7,5 +7,4 @@ object GreaterThanOperationMatcher : NumericOperationMatcher { override fun matches(key: Int, value: Int): Boolean { return key > value } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt index 7dd32bd..42c5157 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt @@ -1,8 +1,8 @@ package app.simplecloud.plugin.api.shared.matcher.operation.impl import app.simplecloud.plugin.api.shared.matcher.operation.StringOperationMatcher -import org.spongepowered.configurate.objectmapping.ConfigSerializable import java.util.regex.Pattern +import org.spongepowered.configurate.objectmapping.ConfigSerializable @ConfigSerializable object PatternOperationMatcher : StringOperationMatcher { @@ -10,5 +10,4 @@ object PatternOperationMatcher : StringOperationMatcher { override fun matches(key: String, value: String): Boolean { return Pattern.matches(key, value) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt index 4bc5c14..565be81 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt @@ -9,5 +9,4 @@ object RegexOperationMatcher : StringOperationMatcher { override fun matches(key: String, value: String): Boolean { return Regex(value).matches(key) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt index d641d1c..dac9be8 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt @@ -9,5 +9,4 @@ object StartsWithOperationMatcher : StringOperationMatcher { override fun matches(key: String, value: String): Boolean { return key.startsWith(value, ignoreCase = true) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt index e1ce9b4..4708b3a 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt @@ -8,30 +8,36 @@ import kotlinx.coroutines.future.await class ServerPatternIdentifier( private val pattern: String = "-", - regexPattern: String = pattern - .replace("", "(?[a-zA-Z]+)") - .replace("", "(?\\d+)"), - private val cloudApi: CloudApi = CloudApi.create() + regexPattern: String = + pattern + .replace("", "(?[a-zA-Z]+)") + .replace("", "(?\\d+)"), + private val cloudApi: CloudApi = CloudApi.create(), ) { private val regex = Regex(regexPattern) fun parse(name: String, customRegex: Regex? = null): Pair { val matchResult = customRegex?.matchEntire(name) ?: this.regex.matchEntire(name) - if (matchResult == null) - throw IllegalArgumentException("$name does not match the pattern") - - val groupName = matchResult.groups["groupName"]?.value - ?: throw IllegalArgumentException("Group name not found") - val numericalId = matchResult.groups["numericalId"]?.value?.toInt() - ?: throw IllegalArgumentException("Numerical ID not found") + if (matchResult == null) throw IllegalArgumentException("$name does not match the pattern") + + val groupName = + matchResult.groups["groupName"]?.value + ?: throw IllegalArgumentException("Group name not found") + val numericalId = + matchResult.groups["numericalId"]?.value?.toInt() + ?: throw IllegalArgumentException("Numerical ID not found") return Pair(groupName, numericalId) } fun parseServerToPattern(server: Server): String { return this.pattern .replace("", server.serverBase.name) - .replace("", server.properties["pretty-name"]?.toString() ?: StringPrettifier.prettify(server.serverBase.name)) + .replace( + "", + server.properties["pretty-name"]?.toString() + ?: StringPrettifier.prettify(server.serverBase.name), + ) .replace("", server.serverId) .replace("", server.serverId) .replace("", server.numericalId.toString()) @@ -49,5 +55,4 @@ class ServerPatternIdentifier( fun getNumericalId(name: String): Int { return parse(name).second } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt index 216cb80..2fc8a3a 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt @@ -1,16 +1,13 @@ package app.simplecloud.plugin.api.shared.permission -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ fun interface PermissionChecker

{ /** * Checks the permission by a player + * * @param player to check the permission * @param name of the permission */ fun checkPermission(player: P, name: String): Boolean - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt index 24205dd..d4b261a 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt @@ -4,10 +4,7 @@ import app.simplecloud.plugin.api.shared.placeholder.provider.GroupPlaceholderPr import app.simplecloud.plugin.api.shared.placeholder.provider.PersistentServerPlaceholderProvider import app.simplecloud.plugin.api.shared.placeholder.provider.ServerPlaceholderProvider -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ object PlaceholderProvider { val serverPlaceholderProvider = ServerPlaceholderProvider() @@ -15,5 +12,4 @@ object PlaceholderProvider { val groupPlaceholderProvider = GroupPlaceholderProvider() val persistentServerPlaceholderProvider = PersistentServerPlaceholderProvider() - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt index 00957a4..1951051 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt @@ -3,21 +3,16 @@ package app.simplecloud.plugin.api.shared.placeholder.argument import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ interface ArgumentsResolver { - /** - * Gets the key for the placeholder - */ + /** Gets the key for the placeholder */ fun getKey(): String /** * Gets the resolved tag for the placeholder + * * @param arguments of the placeholder key */ suspend fun resolve(arguments: ArgumentQueue): Tag? - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt index 5487e5f..90af4ef 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt @@ -3,10 +3,7 @@ package app.simplecloud.plugin.api.shared.placeholder.argument import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ class EnvironmentArgumentsResolver : ArgumentsResolver { override fun getKey() = "env" @@ -17,5 +14,4 @@ class EnvironmentArgumentsResolver : ArgumentsResolver { val string = System.getenv(argumentName) ?: defaultArgument return Tag.preProcessParsed(string) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt index 44badb3..a19dae9 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt @@ -3,12 +3,9 @@ package app.simplecloud.plugin.api.shared.placeholder.argument import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ class PropertiesArgumentsResolver( - private val properties: Map + private val properties: Map, ) : ArgumentsResolver { override fun getKey() = "property" @@ -19,5 +16,4 @@ class PropertiesArgumentsResolver( val string = this.properties[argumentName] ?: defaultArgument return Tag.preProcessParsed(string.toString()) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt index c319290..bcbfa1a 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt @@ -29,5 +29,4 @@ class PlayerCountArgumentsResolver( servers.sumOf { it.playerCount } } } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt index 2afedc6..f413935 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt @@ -29,5 +29,4 @@ class ServerCountArgumentsResolver( servers.size } } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt index 6f27fb2..520ea63 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt @@ -3,22 +3,22 @@ package app.simplecloud.plugin.api.shared.placeholder.async import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ /** * This creates a new placeholder that can also be used asynchronously + * * @param key placeholder name * @param handler value for this placeholder */ data class AsyncPlaceholder( val key: String, - private val handler: AsyncPlaceholderHandler + private val handler: AsyncPlaceholderHandler, ) { /** * Executes the handler method to get the appropriate value for this placeholder + * * @return placeholder value */ suspend fun invoke(value: T): Any? { @@ -27,6 +27,7 @@ data class AsyncPlaceholder( /** * Gets a matching [TagResolver] with matching key and value + * * @param value for the placeholder * @param prefix first name for the placeholder key */ @@ -34,5 +35,4 @@ data class AsyncPlaceholder( val resolvedKey = prefix?.let { "${it}_$key" } ?: this.key return Placeholder.unparsed(resolvedKey, invoke(value).toString()) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt index c060039..b7c912c 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt @@ -1,15 +1,12 @@ package app.simplecloud.plugin.api.shared.placeholder.async -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ fun interface AsyncPlaceholderHandler { /** * Gets the return value for a placeholder + * * @param value of the placeholder key method */ suspend fun handle(value: T): Any? - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt index a540a71..d6bc16c 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt @@ -9,10 +9,7 @@ import net.kyori.adventure.text.Component import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ abstract class AbstractPlaceholderProvider( private val executor: SinglePlaceholderExecutor, ) { @@ -21,6 +18,7 @@ abstract class AbstractPlaceholderProvider( /** * Gets the list of all available [ArgumentsResolver] + * * @param cloudApi the instance of [CloudApi] * @param value for the placeholder */ @@ -31,6 +29,7 @@ abstract class AbstractPlaceholderProvider( /** * Gets the sum of all [TagResolver] + * * @param values for the placeholder * @param prefix of the placeholder key */ @@ -43,17 +42,20 @@ abstract class AbstractPlaceholderProvider( addAll(values.flatMap { getArgumentsResolvers(cloudApi, it) }) addAll(argumentsResolver) } - val singleTagResolver = values.map { this.executor.getTagResolver(this.cloudApi, it, prefix) } + val singleTagResolver = values.map { + this.executor.getTagResolver(this.cloudApi, it, prefix) + } return TagResolver.resolver( *singleTagResolver.toTypedArray(), *availableArgumentsResolver .map { convertArgumentsResolverToTagResolver(it, prefix) } - .toTypedArray() + .toTypedArray(), ) } /** * Serializes the string to a [Component] + * * @param value for the placeholder * @param string the message * @param prefix of the placeholder key @@ -72,6 +74,7 @@ abstract class AbstractPlaceholderProvider( /** * Serializes the string to a [Component] + * * @param values for the placeholder * @param string the message * @param prefix of the placeholder key @@ -88,12 +91,14 @@ abstract class AbstractPlaceholderProvider( ) } - private fun convertArgumentsResolverToTagResolver(resolver: ArgumentsResolver, prefix: String?): TagResolver { + private fun convertArgumentsResolverToTagResolver( + resolver: ArgumentsResolver, + prefix: String?, + ): TagResolver { val key = resolver.getKey() val resolvedKey = prefix?.let { "${it}_$key" } ?: key return TagResolver.resolver(resolvedKey) { arguments, _ -> return@resolver runBlocking { resolver.resolve(arguments) as Tag } } } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/GroupPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/GroupPlaceholderProvider.kt index 16e9726..0f55ed5 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/GroupPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/GroupPlaceholderProvider.kt @@ -7,14 +7,15 @@ import app.simplecloud.plugin.api.shared.placeholder.argument.group.PlayerCountA import app.simplecloud.plugin.api.shared.placeholder.argument.group.ServerCountArgumentsResolver import app.simplecloud.plugin.api.shared.placeholder.single.SingleGroupPlaceholderExecutor -class GroupPlaceholderProvider : AbstractPlaceholderProvider( - SingleGroupPlaceholderExecutor() -) { - - override suspend fun getArgumentsResolvers(cloudApi: CloudApi, value: Group) = listOf( - PropertiesArgumentsResolver(value.properties), - PlayerCountArgumentsResolver(cloudApi, value), - ServerCountArgumentsResolver(cloudApi, value) - ) +class GroupPlaceholderProvider : + AbstractPlaceholderProvider( + SingleGroupPlaceholderExecutor(), + ) { + override suspend fun getArgumentsResolvers(cloudApi: CloudApi, value: Group) = + listOf( + PropertiesArgumentsResolver(value.properties), + PlayerCountArgumentsResolver(cloudApi, value), + ServerCountArgumentsResolver(cloudApi, value), + ) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt index 1ade4b9..98d9523 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt @@ -5,16 +5,14 @@ import app.simplecloud.api.persistentserver.PersistentServer import app.simplecloud.plugin.api.shared.placeholder.argument.* import app.simplecloud.plugin.api.shared.placeholder.single.SinglePersistentServerPlaceholderExecutor -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ +class PersistentServerPlaceholderProvider : + AbstractPlaceholderProvider( + SinglePersistentServerPlaceholderExecutor(), + ) { -class PersistentServerPlaceholderProvider : AbstractPlaceholderProvider( - SinglePersistentServerPlaceholderExecutor() -) { - - override suspend fun getArgumentsResolvers(cloudApi: CloudApi, value: PersistentServer) = listOf( - PropertiesArgumentsResolver(value.properties) - ) - -} \ No newline at end of file + override suspend fun getArgumentsResolvers(cloudApi: CloudApi, value: PersistentServer) = + listOf( + PropertiesArgumentsResolver(value.properties), + ) +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt index 8a78b99..78c3740 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt @@ -5,16 +5,14 @@ import app.simplecloud.api.server.Server import app.simplecloud.plugin.api.shared.placeholder.argument.* import app.simplecloud.plugin.api.shared.placeholder.single.SingleServerPlaceholderExecutor -/** - * @author Niklas Nieberler - */ +/** @author Niklas Nieberler */ +class ServerPlaceholderProvider : + AbstractPlaceholderProvider( + SingleServerPlaceholderExecutor(), + ) { -class ServerPlaceholderProvider : AbstractPlaceholderProvider( - SingleServerPlaceholderExecutor() -) { - - override suspend fun getArgumentsResolvers(cloudApi: CloudApi, value: Server) = listOf( - PropertiesArgumentsResolver(value.properties) - ) - -} \ No newline at end of file + override suspend fun getArgumentsResolvers(cloudApi: CloudApi, value: Server) = + listOf( + PropertiesArgumentsResolver(value.properties), + ) +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt index 0eb254d..c3456ed 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt @@ -7,18 +7,17 @@ import kotlinx.coroutines.future.await class SingleGroupPlaceholderExecutor : SinglePlaceholderExecutor { - override fun getAsyncPlaceholders(cloudApi: CloudApi) = listOf>( - AsyncPlaceholder("name") { it.name }, - AsyncPlaceholder("type") { it.type }, - AsyncPlaceholder("max_players") { it.maxPlayers }, - AsyncPlaceholder("min_memory") { it.minMemory }, - AsyncPlaceholder("max_memory") { it.maxMemory }, - AsyncPlaceholder("online_players") { getOnlinePlayersByGroup(cloudApi, it) }, - ) + override fun getAsyncPlaceholders(cloudApi: CloudApi) = + listOf>( + AsyncPlaceholder("name") { it.name }, + AsyncPlaceholder("type") { it.type }, + AsyncPlaceholder("max_players") { it.maxPlayers }, + AsyncPlaceholder("min_memory") { it.minMemory }, + AsyncPlaceholder("max_memory") { it.maxMemory }, + AsyncPlaceholder("online_players") { getOnlinePlayersByGroup(cloudApi, it) }, + ) private suspend fun getOnlinePlayersByGroup(cloudApi: CloudApi, group: Group): Int { - return cloudApi.server().getServersByGroup(group.name).await() - .sumOf { it.playerCount } + return cloudApi.server().getServersByGroup(group.name).await().sumOf { it.playerCount } } - } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt index f0cb0ed..48f3186 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt @@ -5,24 +5,21 @@ import app.simplecloud.api.persistentserver.PersistentServer import app.simplecloud.plugin.api.shared.placeholder.async.AsyncPlaceholder import app.simplecloud.plugin.api.shared.pretty.StringPrettifier -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ class SinglePersistentServerPlaceholderExecutor : SinglePlaceholderExecutor { - override fun getAsyncPlaceholders(cloudApi: CloudApi) = listOf>( - AsyncPlaceholder("id") { it.persistentServerId }, - AsyncPlaceholder("name") { it.name }, - AsyncPlaceholder("pretty_name") { - it.properties["pretty-name"] ?: StringPrettifier.prettify(it.name) - }, - AsyncPlaceholder("type") { it.type }, - AsyncPlaceholder("online_players") { it.playerCount }, - AsyncPlaceholder("max_players") { it.maxPlayers }, - AsyncPlaceholder("min_memory") { it.minMemory }, - AsyncPlaceholder("max_memory") { it.maxMemory }, - AsyncPlaceholder("motd") { it.properties["motd"] ?: "A Minecraft server" } - ) - -} \ No newline at end of file + override fun getAsyncPlaceholders(cloudApi: CloudApi) = + listOf>( + AsyncPlaceholder("id") { it.persistentServerId }, + AsyncPlaceholder("name") { it.name }, + AsyncPlaceholder("pretty_name") { + it.properties["pretty-name"] ?: StringPrettifier.prettify(it.name) + }, + AsyncPlaceholder("type") { it.type }, + AsyncPlaceholder("online_players") { it.playerCount }, + AsyncPlaceholder("max_players") { it.maxPlayers }, + AsyncPlaceholder("min_memory") { it.minMemory }, + AsyncPlaceholder("max_memory") { it.maxMemory }, + AsyncPlaceholder("motd") { it.properties["motd"] ?: "A Minecraft server" }, + ) +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt index bd80632..5e21850 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt @@ -4,20 +4,19 @@ import app.simplecloud.api.CloudApi import app.simplecloud.plugin.api.shared.placeholder.async.AsyncPlaceholder import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ interface SinglePlaceholderExecutor { /** * Gets a list with all available [AsyncPlaceholder] + * * @param cloudApi the instance of [app.simplecloud.api.CloudApi] */ fun getAsyncPlaceholders(cloudApi: CloudApi): List> /** * Gets a [TagResolver] with all available tag resolvers from the [getAsyncPlaceholders] method + * * @param cloudApi the instance of [CloudApi] * @param value for the placeholder * @param prefix first name for the placeholder key @@ -27,8 +26,8 @@ interface SinglePlaceholderExecutor { value: T, prefix: String? = null, ): TagResolver { - return TagResolver.resolver(getAsyncPlaceholders(cloudApi) - .map { it.invokeTagResolver(value, prefix) }) + return TagResolver.resolver( + getAsyncPlaceholders(cloudApi).map { it.invokeTagResolver(value, prefix) }, + ) } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt index d66bdc4..5300752 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt @@ -5,28 +5,25 @@ import app.simplecloud.api.server.Server import app.simplecloud.plugin.api.shared.placeholder.async.AsyncPlaceholder import app.simplecloud.plugin.api.shared.pretty.StringPrettifier -/** - * @author Niklas Nieberler - */ - +/** @author Niklas Nieberler */ class SingleServerPlaceholderExecutor : SinglePlaceholderExecutor { - override fun getAsyncPlaceholders(cloudApi: CloudApi) = listOf>( - AsyncPlaceholder("id") { it.serverId }, - AsyncPlaceholder("numerical_id") { it.numericalId }, - AsyncPlaceholder("group_name") { it.serverBase.name }, - AsyncPlaceholder("group_pretty_name") { - it.properties["pretty-name"] ?: StringPrettifier.prettify(it.serverBase.name) - }, - AsyncPlaceholder("type") { it.serverBase.type }, - AsyncPlaceholder("state") { it.state }, - AsyncPlaceholder("ip") { it.ip }, - AsyncPlaceholder("port") { it.port }, - AsyncPlaceholder("online_players") { it.playerCount }, - AsyncPlaceholder("max_players") { it.maxPlayers }, - AsyncPlaceholder("min_memory") { it.minMemory }, - AsyncPlaceholder("max_memory") { it.maxMemory }, - AsyncPlaceholder("motd") { it.properties["motd"] ?: "A Minecraft server" } - ) - -} \ No newline at end of file + override fun getAsyncPlaceholders(cloudApi: CloudApi) = + listOf>( + AsyncPlaceholder("id") { it.serverId }, + AsyncPlaceholder("numerical_id") { it.numericalId }, + AsyncPlaceholder("group_name") { it.serverBase.name }, + AsyncPlaceholder("group_pretty_name") { + it.properties["pretty-name"] ?: StringPrettifier.prettify(it.serverBase.name) + }, + AsyncPlaceholder("type") { it.serverBase.type }, + AsyncPlaceholder("state") { it.state }, + AsyncPlaceholder("ip") { it.ip }, + AsyncPlaceholder("port") { it.port }, + AsyncPlaceholder("online_players") { it.playerCount }, + AsyncPlaceholder("max_players") { it.maxPlayers }, + AsyncPlaceholder("min_memory") { it.minMemory }, + AsyncPlaceholder("max_memory") { it.maxMemory }, + AsyncPlaceholder("motd") { it.properties["motd"] ?: "A Minecraft server" }, + ) +} diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/PrettifyCase.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/PrettifyCase.kt index 4ae7f66..8b47420 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/PrettifyCase.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/PrettifyCase.kt @@ -6,5 +6,5 @@ enum class PrettifyCase { PASCAL, SENTENCE, KEBAB, - SNAKE + SNAKE, } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt index e188366..9a54bb4 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt @@ -2,9 +2,7 @@ package app.simplecloud.plugin.api.shared.pretty object StringPrettifier { - /** - * Converts various string formats to different cases - */ + /** Converts various string formats to different cases */ fun prettify(input: String, case: PrettifyCase = PrettifyCase.TITLE): String { return when (case) { PrettifyCase.TITLE -> toTitleCase(input) @@ -17,7 +15,8 @@ object StringPrettifier { } private fun toTitleCase(input: String): String { - return input.split(Regex("[\\s_-]")) + return input + .split(Regex("[\\s_-]")) .filter { it.isNotEmpty() } .joinToString(" ") { word -> word.lowercase().replaceFirstChar { it.uppercase() } @@ -25,7 +24,8 @@ object StringPrettifier { } private fun toCamelCase(input: String): String { - return input.split(Regex("[\\s_-]")) + return input + .split(Regex("[\\s_-]")) .filter { it.isNotEmpty() } .mapIndexed { index, word -> if (index == 0) word.lowercase() @@ -35,7 +35,8 @@ object StringPrettifier { } private fun toPascalCase(input: String): String { - return input.split(Regex("[\\s_-]")) + return input + .split(Regex("[\\s_-]")) .filter { it.isNotEmpty() } .joinToString("") { word -> word.lowercase().replaceFirstChar { it.uppercase() } @@ -43,22 +44,24 @@ object StringPrettifier { } private fun toSentenceCase(input: String): String { - return input.split(Regex("[\\s_-]")) + return input + .split(Regex("[\\s_-]")) .filter { it.isNotEmpty() } .joinToString(" ") { it.lowercase() } .replaceFirstChar { it.uppercase() } } private fun toKebabCase(input: String): String { - return input.split(Regex("[\\s_]")) + return input + .split(Regex("[\\s_]")) .filter { it.isNotEmpty() } .joinToString("-") { it.lowercase() } } private fun toSnakeCase(input: String): String { - return input.split(Regex("[\\s-]")) + return input + .split(Regex("[\\s-]")) .filter { it.isNotEmpty() } .joinToString("_") { it.lowercase() } } - -} \ No newline at end of file +} diff --git a/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt b/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt index 1afbab7..cabb77b 100644 --- a/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt +++ b/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt @@ -17,14 +17,16 @@ class ConfigurationMigrationTest { file.writeText( """ name: legacy-value - """.trimIndent() + """ + .trimIndent(), ) - val configurationFactory = ConfigurationFactory( - file = file, - javaClass = TestVersionedConfig::class.java, - configMigrator = testMigrator(), - ) + val configurationFactory = + ConfigurationFactory( + file = file, + javaClass = TestVersionedConfig::class.java, + configMigrator = testMigrator(), + ) val config = configurationFactory.loadOrCreate(TestVersionedConfig()) @@ -47,13 +49,15 @@ class ConfigurationMigrationTest { """ version: 1 message: repository-value - """.trimIndent() + """ + .trimIndent(), ) - val repository = TestYamlDirectoryRepository( - directory = tempDirectory, - configMigrator = testMigrator(), - ) + val repository = + TestYamlDirectoryRepository( + directory = tempDirectory, + configMigrator = testMigrator(), + ) val loadedEntries = repository.load() @@ -91,11 +95,12 @@ class ConfigurationMigrationTest { private class TestYamlDirectoryRepository( directory: Path, configMigrator: ConfigMigrator, - ) : YamlDirectoryRepository( - directory = directory, - javaClass = TestVersionedConfig::class.java, - configMigrator = configMigrator, - ) { + ) : + YamlDirectoryRepository( + directory = directory, + javaClass = TestVersionedConfig::class.java, + configMigrator = configMigrator, + ) { override fun save(entity: TestVersionedConfig) { save("${entity.message}.yml", entity) diff --git a/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifierTest.kt b/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifierTest.kt index 28cca93..c6b1b98 100644 --- a/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifierTest.kt +++ b/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifierTest.kt @@ -16,37 +16,67 @@ class StringPrettifierTest { fun testCamelCaseConversion() { assertEquals("helloWorld", StringPrettifier.prettify("hello-world", PrettifyCase.CAMEL)) assertEquals("helloWorld", StringPrettifier.prettify("hello_world", PrettifyCase.CAMEL)) - assertEquals("helloBeautifulWorld", StringPrettifier.prettify("hello beautiful world", PrettifyCase.CAMEL)) - assertEquals("myVariableName", StringPrettifier.prettify("my-variable-name", PrettifyCase.CAMEL)) + assertEquals( + "helloBeautifulWorld", + StringPrettifier.prettify("hello beautiful world", PrettifyCase.CAMEL), + ) + assertEquals( + "myVariableName", + StringPrettifier.prettify("my-variable-name", PrettifyCase.CAMEL), + ) } @Test fun testPascalCaseConversion() { assertEquals("HelloWorld", StringPrettifier.prettify("hello-world", PrettifyCase.PASCAL)) assertEquals("HelloWorld", StringPrettifier.prettify("hello_world", PrettifyCase.PASCAL)) - assertEquals("HelloBeautifulWorld", StringPrettifier.prettify("hello beautiful world", PrettifyCase.PASCAL)) - assertEquals("MyVariableName", StringPrettifier.prettify("my-variable-name", PrettifyCase.PASCAL)) + assertEquals( + "HelloBeautifulWorld", + StringPrettifier.prettify("hello beautiful world", PrettifyCase.PASCAL), + ) + assertEquals( + "MyVariableName", + StringPrettifier.prettify("my-variable-name", PrettifyCase.PASCAL), + ) } @Test fun testSentenceCaseConversion() { assertEquals("Hello world", StringPrettifier.prettify("hello-world", PrettifyCase.SENTENCE)) - assertEquals("Hello beautiful world", StringPrettifier.prettify("hello_beautiful_world", PrettifyCase.SENTENCE)) - assertEquals("My variable name", StringPrettifier.prettify("my-variable-name", PrettifyCase.SENTENCE)) + assertEquals( + "Hello beautiful world", + StringPrettifier.prettify("hello_beautiful_world", PrettifyCase.SENTENCE), + ) + assertEquals( + "My variable name", + StringPrettifier.prettify("my-variable-name", PrettifyCase.SENTENCE), + ) } @Test fun testKebabCaseConversion() { assertEquals("hello-world", StringPrettifier.prettify("hello world", PrettifyCase.KEBAB)) - assertEquals("hello-beautiful-world", StringPrettifier.prettify("hello_beautiful_world", PrettifyCase.KEBAB)) - assertEquals("my-variable-name", StringPrettifier.prettify("my variable name", PrettifyCase.KEBAB)) + assertEquals( + "hello-beautiful-world", + StringPrettifier.prettify("hello_beautiful_world", PrettifyCase.KEBAB), + ) + assertEquals( + "my-variable-name", + StringPrettifier.prettify("my variable name", PrettifyCase.KEBAB), + ) } @Test fun testSnakeCaseConversion() { assertEquals("hello_world", StringPrettifier.prettify("hello-world", PrettifyCase.SNAKE)) - assertEquals("hello_beautiful_world", StringPrettifier.prettify("hello beautiful world", PrettifyCase.SNAKE)) - assertEquals("my_variable_name", StringPrettifier.prettify("my-variable-name", PrettifyCase.SNAKE)) + assertEquals( + "hello_beautiful_world", + StringPrettifier.prettify("hello beautiful world", PrettifyCase.SNAKE), + ) + assertEquals( + "my_variable_name", + StringPrettifier.prettify("my-variable-name", PrettifyCase.SNAKE), + ) } @Test @@ -59,7 +89,13 @@ class StringPrettifierTest { @Test fun testMultipleDelimiterHandling() { assertEquals("Hello Beautiful World", StringPrettifier.prettify("hello-beautiful_world")) - assertEquals("helloBeautifulWorld", StringPrettifier.prettify("hello-beautiful_world", PrettifyCase.CAMEL)) - assertEquals("HelloBeautifulWorld", StringPrettifier.prettify("hello-beautiful_world", PrettifyCase.PASCAL)) + assertEquals( + "helloBeautifulWorld", + StringPrettifier.prettify("hello-beautiful_world", PrettifyCase.CAMEL), + ) + assertEquals( + "HelloBeautifulWorld", + StringPrettifier.prettify("hello-beautiful_world", PrettifyCase.PASCAL), + ) } } diff --git a/plugin-velocity/build.gradle.kts b/plugin-velocity/build.gradle.kts index 12b0664..e432564 100644 --- a/plugin-velocity/build.gradle.kts +++ b/plugin-velocity/build.gradle.kts @@ -7,4 +7,4 @@ dependencies { compileOnly(libs.cloud.velocity) compileOnly(libs.velocity.api) kapt(libs.velocity.api) -} \ No newline at end of file +} diff --git a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt index 9527ac2..6019313 100644 --- a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt +++ b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt @@ -3,8 +3,8 @@ package app.simplecloud.plugin.api.velocity.command import app.simplecloud.plugin.api.shared.command.CloudSender import com.velocitypowered.api.command.CommandSource import com.velocitypowered.api.proxy.Player -import net.kyori.adventure.text.Component import java.util.UUID +import net.kyori.adventure.text.Component class VelocityCloudSender(private val commandSource: CommandSource) : CloudSender { @@ -23,5 +23,4 @@ class VelocityCloudSender(private val commandSource: CommandSource) : CloudSende override fun sendMessage(message: Component) { commandSource.sendMessage(message) } - } diff --git a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt index e8ef1e8..2e8ac89 100644 --- a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt +++ b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt @@ -12,5 +12,4 @@ object VelocityCloudSenderMapper : SenderMapper { override fun checkPermission(player: Player, name: String): Boolean { return player.hasPermission(name) } - -} \ No newline at end of file +} From b9e95636431444fcdb5b34b78f00252dfa4d71e9 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 19:50:52 +0200 Subject: [PATCH 05/13] refactor: switch to ktlint --- .../simplecloud.spotless-conventions.gradle.kts | 13 ++++++++++--- .../api/shared/config/DefaultConfigInstaller.kt | 4 +--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts index 8203617..b074378 100644 --- a/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts @@ -2,14 +2,21 @@ plugins { id("com.diffplug.spotless") } -val ktfmtVersion = "0.65" +val ktlintVersion = "1.8.0" +val ktlintEditorConfig = mapOf( + "ktlint_code_style" to "intellij_idea", + "max_line_length" to "120", + "ktlint_standard_function-signature" to "disabled", + "ktlint_standard_multiline-expression-wrapping" to "disabled", + "ktlint_standard_chain-method-continuation" to "disabled", +) spotless { kotlin { - ktfmt(ktfmtVersion).kotlinlangStyle() + ktlint(ktlintVersion).editorConfigOverride(ktlintEditorConfig) } kotlinGradle { - ktfmt(ktfmtVersion).kotlinlangStyle() + ktlint(ktlintVersion).editorConfigOverride(ktlintEditorConfig) } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt index 32fc5e3..43427b6 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt @@ -24,9 +24,7 @@ object DefaultConfigInstaller { classLoader: ClassLoader, resourcePrefix: String = "", ) { - val prefix = - if (resourcePrefix.isEmpty() || resourcePrefix.endsWith("/")) resourcePrefix - else "$resourcePrefix/" + val prefix = if (resourcePrefix.isEmpty() || resourcePrefix.endsWith("/")) resourcePrefix else "$resourcePrefix/" resources.forEach { resource -> copy(dataDirectory.resolve(resource), prefix + resource, classLoader) } From 636f1319980e84717bb43da356fccab18b494b43 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 20:11:31 +0200 Subject: [PATCH 06/13] chore: apply spotless --- ...implecloud.spotless-conventions.gradle.kts | 1 + .../bungeecord/command/BungeeCloudSender.kt | 18 +- .../command/BungeeCloudSenderMapper.kt | 8 +- .../permission/BungeeCordPermissionChecker.kt | 4 +- .../minestom/command/MinestomCloudSender.kt | 20 +- .../command/MinestomCloudSenderMapper.kt | 13 +- .../permission/MinestomPermissionChecker.kt | 7 +- .../permission/MinestomPermissions.kt | 6 +- .../api/paper/command/PaperCloudSender.kt | 18 +- .../paper/command/PaperCloudSenderMapper.kt | 8 +- .../permission/PaperPermissionChecker.kt | 4 +- .../api/shared/adventure/AdventureExt.kt | 67 +++---- .../plugin/api/shared/command/CloudSender.kt | 2 +- .../api/shared/command/CloudSuggestions.kt | 182 +++++++++--------- .../shared/config/AbstractMessageConfig.kt | 7 +- .../api/shared/config/ConfigMigrator.kt | 9 +- .../api/shared/config/ConfigurationFactory.kt | 19 +- .../shared/config/DefaultConfigInstaller.kt | 8 +- .../shared/config/YamlDirectoryRepository.kt | 5 +- .../api/shared/config/YamlFileConfigurator.kt | 14 +- .../serializer/GenericEnumSerializer.kt | 3 +- .../api/shared/matcher/OperationType.kt | 31 +-- .../matcher/ServerMatcherConfiguration.kt | 13 +- .../impl/ContainsOperationMatcher.kt | 4 +- .../impl/EndsWithOperationMatcher.kt | 4 +- .../operation/impl/EqualsOperationMatcher.kt | 4 +- .../impl/GreaterThanOperationMatcher.kt | 4 +- .../operation/impl/PatternOperationMatcher.kt | 6 +- .../operation/impl/RegexOperationMatcher.kt | 4 +- .../impl/StartsWithOperationMatcher.kt | 4 +- .../shared/pattern/ServerPatternIdentifier.kt | 26 ++- .../shared/permission/PermissionChecker.kt | 1 - .../shared/placeholder/PlaceholderProvider.kt | 1 - .../placeholder/argument/ArgumentsResolver.kt | 1 - .../argument/EnvironmentArgumentsResolver.kt | 1 - .../argument/PropertiesArgumentsResolver.kt | 5 +- .../group/PlayerCountArgumentsResolver.kt | 5 +- .../group/ServerCountArgumentsResolver.kt | 5 +- .../placeholder/async/AsyncPlaceholder.kt | 11 +- .../async/AsyncPlaceholderHandler.kt | 1 - .../provider/AbstractPlaceholderProvider.kt | 25 +-- .../PersistentServerPlaceholderProvider.kt | 3 +- .../provider/ServerPlaceholderProvider.kt | 3 +- .../single/SingleGroupPlaceholderExecutor.kt | 5 +- ...nglePersistentServerPlaceholderExecutor.kt | 1 - .../single/SinglePlaceholderExecutor.kt | 9 +- .../single/SingleServerPlaceholderExecutor.kt | 1 - .../api/shared/pretty/StringPrettifier.kt | 97 +++++----- .../config/ConfigurationMigrationTest.kt | 11 +- .../velocity/command/VelocityCloudSender.kt | 14 +- .../command/VelocityCloudSenderMapper.kt | 8 +- .../permission/VelocityPermissionChecker.kt | 5 +- 52 files changed, 292 insertions(+), 444 deletions(-) diff --git a/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts index b074378..ea1ec31 100644 --- a/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/simplecloud.spotless-conventions.gradle.kts @@ -6,6 +6,7 @@ val ktlintVersion = "1.8.0" val ktlintEditorConfig = mapOf( "ktlint_code_style" to "intellij_idea", "max_line_length" to "120", + "ij_kotlin_packages_to_use_import_on_demand" to "kotlin.**,kotlinx.**,io.ktor.**", "ktlint_standard_function-signature" to "disabled", "ktlint_standard_multiline-expression-wrapping" to "disabled", "ktlint_standard_chain-method-continuation" to "disabled", diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt index 3f6ac77..9177998 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSender.kt @@ -2,26 +2,18 @@ package app.simplecloud.plugin.api.bungeecord.command import app.simplecloud.plugin.api.bungeecord.text.BungeeComponentConverter import app.simplecloud.plugin.api.shared.command.CloudSender -import java.util.UUID import net.kyori.adventure.text.Component import net.md_5.bungee.api.CommandSender import net.md_5.bungee.api.connection.ProxiedPlayer +import java.util.UUID -class BungeeCloudSender( - private val commandSender: CommandSender, -) : CloudSender { +class BungeeCloudSender(private val commandSender: CommandSender) : CloudSender { - fun getCommandSender(): CommandSender { - return commandSender - } + fun getCommandSender(): CommandSender = commandSender - override fun getUniqueId(): UUID? { - return (commandSender as? ProxiedPlayer)?.uniqueId - } + override fun getUniqueId(): UUID? = (commandSender as? ProxiedPlayer)?.uniqueId - override fun hasPermission(permission: String): Boolean { - return commandSender.hasPermission(permission) - } + override fun hasPermission(permission: String): Boolean = commandSender.hasPermission(permission) override fun sendMessage(message: Component) { commandSender.sendMessage(BungeeComponentConverter.toBungee(message)) diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt index e5448eb..c90a281 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/command/BungeeCloudSenderMapper.kt @@ -5,11 +5,7 @@ import org.incendo.cloud.SenderMapper class BungeeCloudSenderMapper : SenderMapper { - override fun map(base: CommandSender): BungeeCloudSender { - return BungeeCloudSender(base) - } + override fun map(base: CommandSender): BungeeCloudSender = BungeeCloudSender(base) - override fun reverse(mapped: BungeeCloudSender): CommandSender { - return mapped.getCommandSender() - } + override fun reverse(mapped: BungeeCloudSender): CommandSender = mapped.getCommandSender() } diff --git a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt index 7450e5f..6e09d0a 100644 --- a/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt +++ b/plugin-bungeecord/src/main/kotlin/app/simplecloud/plugin/api/bungeecord/permission/BungeeCordPermissionChecker.kt @@ -5,7 +5,5 @@ import net.md_5.bungee.api.connection.ProxiedPlayer class BungeeCordPermissionChecker : PermissionChecker { - override fun checkPermission(player: ProxiedPlayer, name: String): Boolean { - return player.hasPermission(name) - } + override fun checkPermission(player: ProxiedPlayer, name: String): Boolean = player.hasPermission(name) } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt index c92353c..8476ee7 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSender.kt @@ -2,27 +2,19 @@ package app.simplecloud.plugin.api.minestom.command import app.simplecloud.plugin.api.minestom.permission.MinestomPermissions import app.simplecloud.plugin.api.shared.command.CloudSender -import java.util.UUID import net.kyori.adventure.text.Component import net.minestom.server.command.CommandSender import net.minestom.server.entity.Player +import java.util.UUID -class MinestomCloudSender( - private val commandSender: CommandSender, - private val permissions: MinestomPermissions, -) : CloudSender { +class MinestomCloudSender(private val commandSender: CommandSender, private val permissions: MinestomPermissions) : + CloudSender { - fun getCommandSender(): CommandSender { - return commandSender - } + fun getCommandSender(): CommandSender = commandSender - override fun getUniqueId(): UUID? { - return (commandSender as? Player)?.uuid - } + override fun getUniqueId(): UUID? = (commandSender as? Player)?.uuid - override fun hasPermission(permission: String): Boolean { - return permissions.hasPermission(commandSender, permission) - } + override fun hasPermission(permission: String): Boolean = permissions.hasPermission(commandSender, permission) override fun sendMessage(message: Component) { commandSender.sendMessage(message) diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt index 94d71e7..2be8866 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/command/MinestomCloudSenderMapper.kt @@ -4,15 +4,10 @@ import app.simplecloud.plugin.api.minestom.permission.MinestomPermissions import net.minestom.server.command.CommandSender import org.incendo.cloud.SenderMapper -class MinestomCloudSenderMapper( - private val permissions: MinestomPermissions, -) : SenderMapper { +class MinestomCloudSenderMapper(private val permissions: MinestomPermissions) : + SenderMapper { - override fun map(base: CommandSender): MinestomCloudSender { - return MinestomCloudSender(base, permissions) - } + override fun map(base: CommandSender): MinestomCloudSender = MinestomCloudSender(base, permissions) - override fun reverse(mapped: MinestomCloudSender): CommandSender { - return mapped.getCommandSender() - } + override fun reverse(mapped: MinestomCloudSender): CommandSender = mapped.getCommandSender() } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt index f8639a5..58685c2 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissionChecker.kt @@ -3,10 +3,7 @@ package app.simplecloud.plugin.api.minestom.permission import app.simplecloud.plugin.api.shared.permission.PermissionChecker import net.minestom.server.entity.Player -class MinestomPermissionChecker(private val permissions: MinestomPermissions) : - PermissionChecker { +class MinestomPermissionChecker(private val permissions: MinestomPermissions) : PermissionChecker { - override fun checkPermission(player: Player, name: String): Boolean { - return permissions.hasPermission(player, name) - } + override fun checkPermission(player: Player, name: String): Boolean = permissions.hasPermission(player, name) } diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt index 8aad506..18d1869 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt @@ -1,9 +1,9 @@ package app.simplecloud.plugin.api.minestom.permission -import java.util.function.BiPredicate import net.minestom.server.command.CommandSender import net.minestom.server.command.ConsoleSender import net.minestom.server.entity.Player +import java.util.function.BiPredicate /** * Utility for checking permissions on a Minestom server. Without a [check], only players with @@ -22,7 +22,5 @@ class MinestomPermissions(private val check: BiPredicate?) { return sender.permissionLevel >= 4 } - fun getChecker(): MinestomPermissionChecker { - return MinestomPermissionChecker(this) - } + fun getChecker(): MinestomPermissionChecker = MinestomPermissionChecker(this) } diff --git a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt index 25cb14f..7757c05 100644 --- a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt +++ b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSender.kt @@ -2,28 +2,20 @@ package app.simplecloud.plugin.api.paper.command import app.simplecloud.plugin.api.shared.command.CloudSender import io.papermc.paper.command.brigadier.CommandSourceStack -import java.util.UUID import net.kyori.adventure.text.Component import org.bukkit.command.CommandSender import org.bukkit.entity.Player +import java.util.UUID class PaperCloudSender(private val sourceStack: CommandSourceStack) : CloudSender { - fun getSourceStack(): CommandSourceStack { - return sourceStack - } + fun getSourceStack(): CommandSourceStack = sourceStack - fun getCommandSender(): CommandSender { - return sourceStack.sender - } + fun getCommandSender(): CommandSender = sourceStack.sender - override fun getUniqueId(): UUID? { - return (sourceStack.sender as? Player)?.uniqueId - } + override fun getUniqueId(): UUID? = (sourceStack.sender as? Player)?.uniqueId - override fun hasPermission(permission: String): Boolean { - return sourceStack.sender.hasPermission(permission) - } + override fun hasPermission(permission: String): Boolean = sourceStack.sender.hasPermission(permission) override fun sendMessage(message: Component) { sourceStack.sender.sendMessage(message) diff --git a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt index bf0de80..c9f2926 100644 --- a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt +++ b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/command/PaperCloudSenderMapper.kt @@ -5,11 +5,7 @@ import org.incendo.cloud.SenderMapper object PaperCloudSenderMapper : SenderMapper { - override fun map(base: CommandSourceStack): PaperCloudSender { - return PaperCloudSender(base) - } + override fun map(base: CommandSourceStack): PaperCloudSender = PaperCloudSender(base) - override fun reverse(mapped: PaperCloudSender): CommandSourceStack { - return mapped.getSourceStack() - } + override fun reverse(mapped: PaperCloudSender): CommandSourceStack = mapped.getSourceStack() } diff --git a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/permission/PaperPermissionChecker.kt b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/permission/PaperPermissionChecker.kt index 1d72e10..93721ec 100644 --- a/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/permission/PaperPermissionChecker.kt +++ b/plugin-paper/src/main/kotlin/app/simplecloud/plugin/api/paper/permission/PaperPermissionChecker.kt @@ -5,7 +5,5 @@ import org.bukkit.entity.Player class PaperPermissionChecker : PermissionChecker { - override fun checkPermission(player: Player, name: String): Boolean { - return player.hasPermission(name) - } + override fun checkPermission(player: Player, name: String): Boolean = player.hasPermission(name) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt index bfe6384..185c494 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt @@ -14,55 +14,48 @@ val miniMessage = MiniMessage.miniMessage() private val playerNameRegex = Regex("""^[^<>:'"\\\s]{1,32}$""") -fun text(message: String, vararg tagResolver: TagResolver): Component { - return miniMessage.deserialize(message, *tagResolver) -} - -fun tags(vararg entries: Pair): TagResolver { - return TagResolver.resolver( - entries.map { (key, value) -> - val text = value?.toString() ?: "" - if (key == "playername" && playerNameRegex.matches(text)) Placeholder.parsed(key, text) - else Placeholder.unparsed(key, text) - }, - ) -} +fun text(message: String, vararg tagResolver: TagResolver): Component = miniMessage.deserialize(message, *tagResolver) + +fun tags(vararg entries: Pair): TagResolver = TagResolver.resolver( + entries.map { (key, value) -> + val text = value?.toString() ?: "" + if (key == "playername" && playerNameRegex.matches(text)) { + Placeholder.parsed(key, text) + } else { + Placeholder.unparsed(key, text) + } + }, +) suspend fun String.appendToComponent( server: Server, prefix: String? = null, vararg argumentsResolver: ArgumentsResolver, -): Component { - return PlaceholderProvider.serverPlaceholderProvider.append( - server, - this, - prefix, - *argumentsResolver, - ) -} +): Component = PlaceholderProvider.serverPlaceholderProvider.append( + server, + this, + prefix, + *argumentsResolver, +) suspend fun String.appendToComponent( group: Group, prefix: String? = null, vararg argumentsResolver: ArgumentsResolver, -): Component { - return PlaceholderProvider.groupPlaceholderProvider.append( - group, - this, - prefix, - *argumentsResolver, - ) -} +): Component = PlaceholderProvider.groupPlaceholderProvider.append( + group, + this, + prefix, + *argumentsResolver, +) suspend fun String.appendToComponent( persistentServer: PersistentServer, prefix: String? = null, vararg argumentsResolver: ArgumentsResolver, -): Component { - return PlaceholderProvider.persistentServerPlaceholderProvider.append( - persistentServer, - this, - prefix, - *argumentsResolver, - ) -} +): Component = PlaceholderProvider.persistentServerPlaceholderProvider.append( + persistentServer, + this, + prefix, + *argumentsResolver, +) diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt index 89bab73..5fcea2b 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSender.kt @@ -1,7 +1,7 @@ package app.simplecloud.plugin.api.shared.command -import java.util.UUID import net.kyori.adventure.text.Component +import java.util.UUID /** A command sender, e.g. a player or the console. */ interface CloudSender { diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt index 2cbcd57..6b28c37 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt @@ -18,27 +18,27 @@ object CloudSuggestions { /** Suggests the names of all groups. */ fun groups(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.group().allGroups.await().map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() - } + try { + api.group().allGroups.await().map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the names of all groups of the given [type]. */ fun groups(api: CloudApi, type: GroupServerType): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.group() - .allGroups - .await() - .filter { it.type == type } - .map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() - } + try { + api.group() + .allGroups + .await() + .filter { it.type == type } + .map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the names of all proxy groups. */ @@ -55,49 +55,49 @@ object CloudSuggestions { */ fun serverIds(api: CloudApi, groupArgument: String = "group"): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val group = context.get(groupArgument) - api.server() - .getServersByGroup(group) - .await() - .sortedBy { it.numericalId } - .map { Suggestion.suggestion(it.numericalId.toString()) } - } catch (_: Exception) { - emptyList() - } + try { + val group = context.get(groupArgument) + api.server() + .getServersByGroup(group) + .await() + .sortedBy { it.numericalId } + .map { Suggestion.suggestion(it.numericalId.toString()) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the names of all running servers. */ fun servers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.server() - .allServers - .await() - .mapNotNull { serverName(it) } - .map { Suggestion.suggestion(it) } - } catch (_: Exception) { - emptyList() - } + try { + api.server() + .allServers + .await() + .mapNotNull { serverName(it) } + .map { Suggestion.suggestion(it) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the names of all running servers in one of the given [states]. */ fun servers(api: CloudApi, vararg states: ServerState): SuggestionProvider { val stateSet = states.toSet() return SuspendingSuggestionProvider { _, _ -> - try { - api.server() - .allServers - .await() - .filter { it.state in stateSet } - .mapNotNull { serverName(it) } - .map { Suggestion.suggestion(it) } - } catch (_: Exception) { - emptyList() - } + try { + api.server() + .allServers + .await() + .filter { it.state in stateSet } + .mapNotNull { serverName(it) } + .map { Suggestion.suggestion(it) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() } @@ -108,47 +108,45 @@ object CloudSuggestions { /** Suggests the names of all persistent servers. */ fun persistentServers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.persistentServer().allPersistentServers.await().map { - Suggestion.suggestion(it.name) - } - } catch (_: Exception) { - emptyList() + try { + api.persistentServer().allPersistentServers.await().map { + Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the names of all online players. */ fun onlinePlayers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { _, _ -> - try { - api.player().onlinePlayers.await().map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() - } + try { + api.player().onlinePlayers.await().map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the names of all online players except the command sender. */ fun otherOnlinePlayers(api: CloudApi): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val uniqueId = context.sender().getUniqueId() - api.player() - .onlinePlayers - .await() - .filter { it.uniqueId != uniqueId } - .map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() - } + try { + val uniqueId = context.sender().getUniqueId() + api.player() + .onlinePlayers + .await() + .filter { it.uniqueId != uniqueId } + .map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() - /** - * Suggests the names of all players connected to the server stored in the argument - * [serverArgument]. - */ + // Suggests the names of all players connected to the server stored in the argument + // [serverArgument]. // fun playersOnServer(api: CloudApi, serverArgument: String = "server"): // SuggestionProvider = // SuspendingSuggestionProvider { context, _ -> @@ -170,17 +168,17 @@ object CloudSuggestions { proxyArgument: String = "proxy", ): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val proxy = context.get(proxyArgument) - api.player() - .onlinePlayers - .await() - .filter { it.connectedProxyName.equals(proxy, true) } - .map { Suggestion.suggestion(it.name) } - } catch (_: Exception) { - emptyList() - } + try { + val proxy = context.get(proxyArgument) + api.player() + .onlinePlayers + .await() + .filter { it.connectedProxyName.equals(proxy, true) } + .map { Suggestion.suggestion(it.name) } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests the target types [TARGET_TYPE_GROUP] and [TARGET_TYPE_PERSISTENT_SERVER]. */ @@ -196,21 +194,23 @@ object CloudSuggestions { targetTypeArgument: String = "targetType", ): SuggestionProvider = SuspendingSuggestionProvider { context, _ -> - try { - val targetType = context.get(targetTypeArgument) - when { - targetType.equals(TARGET_TYPE_GROUP, true) -> - api.group().allGroups.await().map { Suggestion.suggestion(it.name) } - targetType.equals(TARGET_TYPE_PERSISTENT_SERVER, true) -> - api.persistentServer().allPersistentServers.await().map { - Suggestion.suggestion(it.name) - } - else -> emptyList() - } - } catch (_: Exception) { - emptyList() + try { + val targetType = context.get(targetTypeArgument) + when { + targetType.equals(TARGET_TYPE_GROUP, true) -> + api.group().allGroups.await().map { Suggestion.suggestion(it.name) } + + targetType.equals(TARGET_TYPE_PERSISTENT_SERVER, true) -> + api.persistentServer().allPersistentServers.await().map { + Suggestion.suggestion(it.name) + } + + else -> emptyList() } + } catch (_: Exception) { + emptyList() } + } .asSuggestionProvider() /** Suggests all known [ServerState]s. */ diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt index eef8619..7ab2451 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/AbstractMessageConfig.kt @@ -19,7 +19,8 @@ abstract class AbstractMessageConfig { } /** Parses the [message] with the [variables] and the [extra] resolvers. */ - fun msg(message: String, vararg extra: TagResolver): Component { - return miniMessage.deserialize(message, TagResolver.resolver(resolver, *extra)) - } + fun msg( + message: String, + vararg extra: TagResolver, + ): Component = miniMessage.deserialize(message, TagResolver.resolver(resolver, *extra)) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt index 3c2f65e..8c01d88 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt @@ -54,9 +54,7 @@ private constructor( } class Builder - internal constructor( - private val currentVersion: Int, - ) { + internal constructor(private val currentVersion: Int) { private var fallbackVersion = 0 private val migrations = mutableMapOf() @@ -95,10 +93,7 @@ private constructor( ) } - private data class MigrationStep( - val toVersion: Int, - val action: ConfigMigration, - ) + private data class MigrationStep(val toVersion: Int, val action: ConfigMigration) companion object { const val VERSION_NODE = "version" diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt index 051e602..b28211c 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt @@ -3,12 +3,7 @@ package app.simplecloud.plugin.api.shared.config import java.io.File import java.nio.file.Path -/** @author Niklas Nieberler */ -class ConfigurationFactory( - private val file: File, - javaClass: Class, - configMigrator: ConfigMigrator? = null, -) { +class ConfigurationFactory(private val file: File, javaClass: Class, configMigrator: ConfigMigrator? = null) { private val configurator = YamlFileConfigurator(javaClass, configMigrator) @@ -25,9 +20,7 @@ class ConfigurationFactory( } /** The cached config. Throws if it has not been loaded yet. */ - fun get(): E { - return config ?: throw NullPointerException("failed to find config") - } + fun get(): E = config ?: throw NullPointerException("failed to find config") /** Writes the [entry] to the file and caches it. */ fun save(entry: E) { @@ -40,9 +33,7 @@ class ConfigurationFactory( load() } - private fun load(): E? { - return configurator.load(file).also { config = it } - } + private fun load(): E? = configurator.load(file).also { config = it } companion object { @@ -72,8 +63,6 @@ class ConfigurationFactory( default: E, migrator: ConfigMigrator? = null, classLoader: ClassLoader = E::class.java.classLoader, - ): ConfigurationFactory { - return create(dataDirectory.toFile(), fileName, default, migrator, classLoader) - } + ): ConfigurationFactory = create(dataDirectory.toFile(), fileName, default, migrator, classLoader) } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt index 43427b6..38d57c6 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/DefaultConfigInstaller.kt @@ -24,7 +24,13 @@ object DefaultConfigInstaller { classLoader: ClassLoader, resourcePrefix: String = "", ) { - val prefix = if (resourcePrefix.isEmpty() || resourcePrefix.endsWith("/")) resourcePrefix else "$resourcePrefix/" + val prefix = if (resourcePrefix.isEmpty() || + resourcePrefix.endsWith("/") + ) { + resourcePrefix + } else { + "$resourcePrefix/" + } resources.forEach { resource -> copy(dataDirectory.resolve(resource), prefix + resource, classLoader) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt index a47b8dd..38c9d07 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlDirectoryRepository.kt @@ -4,7 +4,6 @@ import java.io.File import java.nio.file.Files import java.nio.file.Path -/** @author Niklas Nieberler */ abstract class YamlDirectoryRepository( private val directory: Path, javaClass: Class, @@ -22,9 +21,7 @@ abstract class YamlDirectoryRepository( abstract fun find(identifier: I): E? /** All cached entities. */ - fun findAll(): List { - return cachedEntities.values.toList() - } + fun findAll(): List = cachedEntities.values.toList() /** Loads all `.yml` and `.yaml` files of the directory and creates it if missing. */ fun load(): List { diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt index 53b567a..3dca22f 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/YamlFileConfigurator.kt @@ -1,17 +1,13 @@ package app.simplecloud.plugin.api.shared.config import app.simplecloud.plugin.api.shared.config.serializer.GenericEnumSerializer -import java.io.File import org.spongepowered.configurate.CommentedConfigurationNode import org.spongepowered.configurate.kotlin.objectMapperFactory import org.spongepowered.configurate.yaml.NodeStyle import org.spongepowered.configurate.yaml.YamlConfigurationLoader +import java.io.File -/** @author Niklas Nieberler */ -class YamlFileConfigurator( - private val javaClass: Class, - private val configMigrator: ConfigMigrator? = null, -) { +class YamlFileConfigurator(private val javaClass: Class, private val configMigrator: ConfigMigrator? = null) { init { require(configMigrator == null || VersionedConfig::class.java.isAssignableFrom(javaClass)) { @@ -53,9 +49,7 @@ class YamlFileConfigurator( } /** The cached loader of the [file]. */ - fun getOrCreateConfigurationLoader(file: File): YamlConfigurationLoader { - return configurationLoaders.getOrPut(file) { - defaultConfigurationBuilder.path(file.toPath()).build() - } + fun getOrCreateConfigurationLoader(file: File): YamlConfigurationLoader = configurationLoaders.getOrPut(file) { + defaultConfigurationBuilder.path(file.toPath()).build() } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt index 2a2f2ab..65e3e87 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt @@ -1,11 +1,10 @@ package app.simplecloud.plugin.api.shared.config.serializer -import java.lang.reflect.Type import org.spongepowered.configurate.ConfigurationNode import org.spongepowered.configurate.serialize.SerializationException import org.spongepowered.configurate.serialize.TypeSerializer +import java.lang.reflect.Type -/** @author Niklas Nieberler */ object GenericEnumSerializer : TypeSerializer> { @Suppress("UNCHECKED_CAST") diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt index a37da65..03a5abb 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/OperationType.kt @@ -3,11 +3,15 @@ package app.simplecloud.plugin.api.shared.matcher import app.simplecloud.plugin.api.shared.matcher.operation.NumericOperationMatcher import app.simplecloud.plugin.api.shared.matcher.operation.OperationMatcher import app.simplecloud.plugin.api.shared.matcher.operation.StringOperationMatcher -import app.simplecloud.plugin.api.shared.matcher.operation.impl.* +import app.simplecloud.plugin.api.shared.matcher.operation.impl.ContainsOperationMatcher +import app.simplecloud.plugin.api.shared.matcher.operation.impl.EndsWithOperationMatcher +import app.simplecloud.plugin.api.shared.matcher.operation.impl.EqualsOperationMatcher +import app.simplecloud.plugin.api.shared.matcher.operation.impl.GreaterThanOperationMatcher +import app.simplecloud.plugin.api.shared.matcher.operation.impl.PatternOperationMatcher +import app.simplecloud.plugin.api.shared.matcher.operation.impl.RegexOperationMatcher +import app.simplecloud.plugin.api.shared.matcher.operation.impl.StartsWithOperationMatcher -enum class OperationType( - private val matcher: OperationMatcher<*, *>, -) { +enum class OperationType(private val matcher: OperationMatcher<*, *>) { REGEX(RegexOperationMatcher), PATTERN(PatternOperationMatcher), @@ -15,7 +19,8 @@ enum class OperationType( CONTAINS(ContainsOperationMatcher), STARTS_WITH(StartsWithOperationMatcher), ENDS_WITH(EndsWithOperationMatcher), - GREATER_THAN(GreaterThanOperationMatcher); + GREATER_THAN(GreaterThanOperationMatcher), + ; fun matches(key: Any, value: Any, negate: Boolean): Boolean { val matches = @@ -23,13 +28,17 @@ enum class OperationType( is StringOperationMatcher -> { if (key is String && value is String) { matcher.matches(key, value) - } else false + } else { + false + } } is NumericOperationMatcher -> { if (key is Int && value is Int) { matcher.matches(key, value) - } else false + } else { + false + } } else -> false @@ -38,11 +47,11 @@ enum class OperationType( return if (negate) matches.not() else matches } - fun anyMatches(names: List, value: String, negate: Boolean): Boolean { - return names.any { matches(it, value, negate) } + fun anyMatches(names: List, value: String, negate: Boolean): Boolean = names.any { + matches(it, value, negate) } - fun allMatches(names: List, value: String, negate: Boolean): Boolean { - return names.all { matches(it, value, negate) } + fun allMatches(names: List, value: String, negate: Boolean): Boolean = names.all { + matches(it, value, negate) } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt index 5d139b4..be20a36 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/ServerMatcherConfiguration.kt @@ -2,7 +2,6 @@ package app.simplecloud.plugin.api.shared.matcher import org.spongepowered.configurate.objectmapping.ConfigSerializable -/** @author Niklas Nieberler */ @ConfigSerializable data class ServerMatcherConfiguration( val operation: OperationType = OperationType.STARTS_WITH, @@ -10,15 +9,9 @@ data class ServerMatcherConfiguration( val negate: Boolean = false, ) { - fun matches(name: String): Boolean { - return this.operation.matches(name, this.value, this.negate) - } + fun matches(name: String): Boolean = this.operation.matches(name, this.value, this.negate) - fun anyMatches(names: List): Boolean { - return this.operation.anyMatches(names, this.value, this.negate) - } + fun anyMatches(names: List): Boolean = this.operation.anyMatches(names, this.value, this.negate) - fun allMatches(names: List): Boolean { - return this.operation.allMatches(names, this.value, this.negate) - } + fun allMatches(names: List): Boolean = this.operation.allMatches(names, this.value, this.negate) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt index e0ab927..61a1146 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/ContainsOperationMatcher.kt @@ -6,7 +6,5 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable @ConfigSerializable object ContainsOperationMatcher : StringOperationMatcher { - override fun matches(key: String, value: String): Boolean { - return key.contains(value, ignoreCase = true) - } + override fun matches(key: String, value: String): Boolean = key.contains(value, ignoreCase = true) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt index 8f62df5..177fd24 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EndsWithOperationMatcher.kt @@ -6,7 +6,5 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable @ConfigSerializable object EndsWithOperationMatcher : StringOperationMatcher { - override fun matches(key: String, value: String): Boolean { - return key.endsWith(value, ignoreCase = true) - } + override fun matches(key: String, value: String): Boolean = key.endsWith(value, ignoreCase = true) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt index 663a6e6..eba894b 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/EqualsOperationMatcher.kt @@ -6,7 +6,5 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable @ConfigSerializable object EqualsOperationMatcher : StringOperationMatcher { - override fun matches(key: String, value: String): Boolean { - return key.equals(value, ignoreCase = true) - } + override fun matches(key: String, value: String): Boolean = key.equals(value, ignoreCase = true) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt index 73e3aca..fe9065c 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/GreaterThanOperationMatcher.kt @@ -4,7 +4,5 @@ import app.simplecloud.plugin.api.shared.matcher.operation.NumericOperationMatch object GreaterThanOperationMatcher : NumericOperationMatcher { - override fun matches(key: Int, value: Int): Boolean { - return key > value - } + override fun matches(key: Int, value: Int): Boolean = key > value } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt index 42c5157..eb3c7a1 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/PatternOperationMatcher.kt @@ -1,13 +1,11 @@ package app.simplecloud.plugin.api.shared.matcher.operation.impl import app.simplecloud.plugin.api.shared.matcher.operation.StringOperationMatcher -import java.util.regex.Pattern import org.spongepowered.configurate.objectmapping.ConfigSerializable +import java.util.regex.Pattern @ConfigSerializable object PatternOperationMatcher : StringOperationMatcher { - override fun matches(key: String, value: String): Boolean { - return Pattern.matches(key, value) - } + override fun matches(key: String, value: String): Boolean = Pattern.matches(key, value) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt index 565be81..25886d7 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/RegexOperationMatcher.kt @@ -6,7 +6,5 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable @ConfigSerializable object RegexOperationMatcher : StringOperationMatcher { - override fun matches(key: String, value: String): Boolean { - return Regex(value).matches(key) - } + override fun matches(key: String, value: String): Boolean = Regex(value).matches(key) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt index dac9be8..d82deca 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/matcher/operation/impl/StartsWithOperationMatcher.kt @@ -6,7 +6,5 @@ import org.spongepowered.configurate.objectmapping.ConfigSerializable @ConfigSerializable object StartsWithOperationMatcher : StringOperationMatcher { - override fun matches(key: String, value: String): Boolean { - return key.startsWith(value, ignoreCase = true) - } + override fun matches(key: String, value: String): Boolean = key.startsWith(value, ignoreCase = true) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt index 4708b3a..c9daffe 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt @@ -30,18 +30,16 @@ class ServerPatternIdentifier( return Pair(groupName, numericalId) } - fun parseServerToPattern(server: Server): String { - return this.pattern - .replace("", server.serverBase.name) - .replace( - "", - server.properties["pretty-name"]?.toString() - ?: StringPrettifier.prettify(server.serverBase.name), - ) - .replace("", server.serverId) - .replace("", server.serverId) - .replace("", server.numericalId.toString()) - } + fun parseServerToPattern(server: Server): String = this.pattern + .replace("", server.serverBase.name) + .replace( + "", + server.properties["pretty-name"]?.toString() + ?: StringPrettifier.prettify(server.serverBase.name), + ) + .replace("", server.serverId) + .replace("", server.serverId) + .replace("", server.numericalId.toString()) suspend fun getGroup(name: String): Group? { val groupName = parse(name).first @@ -52,7 +50,5 @@ class ServerPatternIdentifier( } } - fun getNumericalId(name: String): Int { - return parse(name).second - } + fun getNumericalId(name: String): Int = parse(name).second } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt index 2fc8a3a..22a6787 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/permission/PermissionChecker.kt @@ -1,6 +1,5 @@ package app.simplecloud.plugin.api.shared.permission -/** @author Niklas Nieberler */ fun interface PermissionChecker

{ /** diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt index d4b261a..2099df4 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/PlaceholderProvider.kt @@ -4,7 +4,6 @@ import app.simplecloud.plugin.api.shared.placeholder.provider.GroupPlaceholderPr import app.simplecloud.plugin.api.shared.placeholder.provider.PersistentServerPlaceholderProvider import app.simplecloud.plugin.api.shared.placeholder.provider.ServerPlaceholderProvider -/** @author Niklas Nieberler */ object PlaceholderProvider { val serverPlaceholderProvider = ServerPlaceholderProvider() diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt index 1951051..5f785f6 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/ArgumentsResolver.kt @@ -3,7 +3,6 @@ package app.simplecloud.plugin.api.shared.placeholder.argument import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -/** @author Niklas Nieberler */ interface ArgumentsResolver { /** Gets the key for the placeholder */ diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt index 90af4ef..99f3e6d 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt @@ -3,7 +3,6 @@ package app.simplecloud.plugin.api.shared.placeholder.argument import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -/** @author Niklas Nieberler */ class EnvironmentArgumentsResolver : ArgumentsResolver { override fun getKey() = "env" diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt index a19dae9..9dc18e1 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt @@ -3,10 +3,7 @@ package app.simplecloud.plugin.api.shared.placeholder.argument import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -/** @author Niklas Nieberler */ -class PropertiesArgumentsResolver( - private val properties: Map, -) : ArgumentsResolver { +class PropertiesArgumentsResolver(private val properties: Map) : ArgumentsResolver { override fun getKey() = "property" diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt index bcbfa1a..555bfbf 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/PlayerCountArgumentsResolver.kt @@ -8,10 +8,7 @@ import kotlinx.coroutines.future.await import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -class PlayerCountArgumentsResolver( - private val cloudApi: CloudApi, - private val group: Group, -) : ArgumentsResolver { +class PlayerCountArgumentsResolver(private val cloudApi: CloudApi, private val group: Group) : ArgumentsResolver { override fun getKey() = "player_count" diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt index f413935..73a14b8 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt @@ -8,10 +8,7 @@ import kotlinx.coroutines.future.await import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.ArgumentQueue -class ServerCountArgumentsResolver( - private val cloudApi: CloudApi, - private val group: Group, -) : ArgumentsResolver { +class ServerCountArgumentsResolver(private val cloudApi: CloudApi, private val group: Group) : ArgumentsResolver { override fun getKey() = "server_count" diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt index 520ea63..33c268a 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt @@ -3,27 +3,20 @@ package app.simplecloud.plugin.api.shared.placeholder.async import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** @author Niklas Nieberler */ - /** * This creates a new placeholder that can also be used asynchronously * * @param key placeholder name * @param handler value for this placeholder */ -data class AsyncPlaceholder( - val key: String, - private val handler: AsyncPlaceholderHandler, -) { +data class AsyncPlaceholder(val key: String, private val handler: AsyncPlaceholderHandler) { /** * Executes the handler method to get the appropriate value for this placeholder * * @return placeholder value */ - suspend fun invoke(value: T): Any? { - return this.handler.handle(value) - } + suspend fun invoke(value: T): Any? = this.handler.handle(value) /** * Gets a matching [TagResolver] with matching key and value diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt index b7c912c..99a9bb3 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholderHandler.kt @@ -1,6 +1,5 @@ package app.simplecloud.plugin.api.shared.placeholder.async -/** @author Niklas Nieberler */ fun interface AsyncPlaceholderHandler { /** diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt index d6bc16c..fc75e56 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt @@ -9,10 +9,7 @@ import net.kyori.adventure.text.Component import net.kyori.adventure.text.minimessage.tag.Tag import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** @author Niklas Nieberler */ -abstract class AbstractPlaceholderProvider( - private val executor: SinglePlaceholderExecutor, -) { +abstract class AbstractPlaceholderProvider(private val executor: SinglePlaceholderExecutor) { private val cloudApi = CloudApi.create() @@ -65,12 +62,10 @@ abstract class AbstractPlaceholderProvider( string: String, prefix: String? = null, vararg argumentsResolver: ArgumentsResolver, - ): Component { - return text( - string, - getTagResolver(listOf(value), prefix, *argumentsResolver), - ) - } + ): Component = text( + string, + getTagResolver(listOf(value), prefix, *argumentsResolver), + ) /** * Serializes the string to a [Component] @@ -84,12 +79,10 @@ abstract class AbstractPlaceholderProvider( string: String, prefix: String? = null, vararg argumentsResolver: ArgumentsResolver, - ): Component { - return text( - string, - getTagResolver(values, prefix, *argumentsResolver), - ) - } + ): Component = text( + string, + getTagResolver(values, prefix, *argumentsResolver), + ) private fun convertArgumentsResolverToTagResolver( resolver: ArgumentsResolver, diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt index 98d9523..9168b9c 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/PersistentServerPlaceholderProvider.kt @@ -2,10 +2,9 @@ package app.simplecloud.plugin.api.shared.placeholder.provider import app.simplecloud.api.CloudApi import app.simplecloud.api.persistentserver.PersistentServer -import app.simplecloud.plugin.api.shared.placeholder.argument.* +import app.simplecloud.plugin.api.shared.placeholder.argument.PropertiesArgumentsResolver import app.simplecloud.plugin.api.shared.placeholder.single.SinglePersistentServerPlaceholderExecutor -/** @author Niklas Nieberler */ class PersistentServerPlaceholderProvider : AbstractPlaceholderProvider( SinglePersistentServerPlaceholderExecutor(), diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt index 78c3740..e4f9d9f 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/ServerPlaceholderProvider.kt @@ -2,10 +2,9 @@ package app.simplecloud.plugin.api.shared.placeholder.provider import app.simplecloud.api.CloudApi import app.simplecloud.api.server.Server -import app.simplecloud.plugin.api.shared.placeholder.argument.* +import app.simplecloud.plugin.api.shared.placeholder.argument.PropertiesArgumentsResolver import app.simplecloud.plugin.api.shared.placeholder.single.SingleServerPlaceholderExecutor -/** @author Niklas Nieberler */ class ServerPlaceholderProvider : AbstractPlaceholderProvider( SingleServerPlaceholderExecutor(), diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt index c3456ed..5487f24 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleGroupPlaceholderExecutor.kt @@ -17,7 +17,6 @@ class SingleGroupPlaceholderExecutor : SinglePlaceholderExecutor { AsyncPlaceholder("online_players") { getOnlinePlayersByGroup(cloudApi, it) }, ) - private suspend fun getOnlinePlayersByGroup(cloudApi: CloudApi, group: Group): Int { - return cloudApi.server().getServersByGroup(group.name).await().sumOf { it.playerCount } - } + private suspend fun getOnlinePlayersByGroup(cloudApi: CloudApi, group: Group): Int = + cloudApi.server().getServersByGroup(group.name).await().sumOf { it.playerCount } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt index 48f3186..3bdb8a1 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePersistentServerPlaceholderExecutor.kt @@ -5,7 +5,6 @@ import app.simplecloud.api.persistentserver.PersistentServer import app.simplecloud.plugin.api.shared.placeholder.async.AsyncPlaceholder import app.simplecloud.plugin.api.shared.pretty.StringPrettifier -/** @author Niklas Nieberler */ class SinglePersistentServerPlaceholderExecutor : SinglePlaceholderExecutor { override fun getAsyncPlaceholders(cloudApi: CloudApi) = diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt index 5e21850..9a157ce 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SinglePlaceholderExecutor.kt @@ -4,7 +4,6 @@ import app.simplecloud.api.CloudApi import app.simplecloud.plugin.api.shared.placeholder.async.AsyncPlaceholder import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver -/** @author Niklas Nieberler */ interface SinglePlaceholderExecutor { /** @@ -25,9 +24,7 @@ interface SinglePlaceholderExecutor { cloudApi: CloudApi, value: T, prefix: String? = null, - ): TagResolver { - return TagResolver.resolver( - getAsyncPlaceholders(cloudApi).map { it.invokeTagResolver(value, prefix) }, - ) - } + ): TagResolver = TagResolver.resolver( + getAsyncPlaceholders(cloudApi).map { it.invokeTagResolver(value, prefix) }, + ) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt index 5300752..984e889 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/single/SingleServerPlaceholderExecutor.kt @@ -5,7 +5,6 @@ import app.simplecloud.api.server.Server import app.simplecloud.plugin.api.shared.placeholder.async.AsyncPlaceholder import app.simplecloud.plugin.api.shared.pretty.StringPrettifier -/** @author Niklas Nieberler */ class SingleServerPlaceholderExecutor : SinglePlaceholderExecutor { override fun getAsyncPlaceholders(cloudApi: CloudApi) = diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt index 9a54bb4..dc5a2f6 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pretty/StringPrettifier.kt @@ -3,65 +3,54 @@ package app.simplecloud.plugin.api.shared.pretty object StringPrettifier { /** Converts various string formats to different cases */ - fun prettify(input: String, case: PrettifyCase = PrettifyCase.TITLE): String { - return when (case) { - PrettifyCase.TITLE -> toTitleCase(input) - PrettifyCase.CAMEL -> toCamelCase(input) - PrettifyCase.PASCAL -> toPascalCase(input) - PrettifyCase.SENTENCE -> toSentenceCase(input) - PrettifyCase.KEBAB -> toKebabCase(input) - PrettifyCase.SNAKE -> toSnakeCase(input) - } - } - - private fun toTitleCase(input: String): String { - return input - .split(Regex("[\\s_-]")) - .filter { it.isNotEmpty() } - .joinToString(" ") { word -> - word.lowercase().replaceFirstChar { it.uppercase() } - } + fun prettify(input: String, case: PrettifyCase = PrettifyCase.TITLE): String = when (case) { + PrettifyCase.TITLE -> toTitleCase(input) + PrettifyCase.CAMEL -> toCamelCase(input) + PrettifyCase.PASCAL -> toPascalCase(input) + PrettifyCase.SENTENCE -> toSentenceCase(input) + PrettifyCase.KEBAB -> toKebabCase(input) + PrettifyCase.SNAKE -> toSnakeCase(input) } - private fun toCamelCase(input: String): String { - return input - .split(Regex("[\\s_-]")) - .filter { it.isNotEmpty() } - .mapIndexed { index, word -> - if (index == 0) word.lowercase() - else word.lowercase().replaceFirstChar { it.uppercase() } - } - .joinToString("") - } + private fun toTitleCase(input: String): String = input + .split(Regex("[\\s_-]")) + .filter { it.isNotEmpty() } + .joinToString(" ") { word -> + word.lowercase().replaceFirstChar { it.uppercase() } + } - private fun toPascalCase(input: String): String { - return input - .split(Regex("[\\s_-]")) - .filter { it.isNotEmpty() } - .joinToString("") { word -> + private fun toCamelCase(input: String): String = input + .split(Regex("[\\s_-]")) + .filter { it.isNotEmpty() } + .mapIndexed { index, word -> + if (index == 0) { + word.lowercase() + } else { word.lowercase().replaceFirstChar { it.uppercase() } } - } - - private fun toSentenceCase(input: String): String { - return input - .split(Regex("[\\s_-]")) - .filter { it.isNotEmpty() } - .joinToString(" ") { it.lowercase() } - .replaceFirstChar { it.uppercase() } - } + } + .joinToString("") - private fun toKebabCase(input: String): String { - return input - .split(Regex("[\\s_]")) - .filter { it.isNotEmpty() } - .joinToString("-") { it.lowercase() } - } + private fun toPascalCase(input: String): String = input + .split(Regex("[\\s_-]")) + .filter { it.isNotEmpty() } + .joinToString("") { word -> + word.lowercase().replaceFirstChar { it.uppercase() } + } - private fun toSnakeCase(input: String): String { - return input - .split(Regex("[\\s-]")) - .filter { it.isNotEmpty() } - .joinToString("_") { it.lowercase() } - } + private fun toSentenceCase(input: String): String = input + .split(Regex("[\\s_-]")) + .filter { it.isNotEmpty() } + .joinToString(" ") { it.lowercase() } + .replaceFirstChar { it.uppercase() } + + private fun toKebabCase(input: String): String = input + .split(Regex("[\\s_]")) + .filter { it.isNotEmpty() } + .joinToString("-") { it.lowercase() } + + private fun toSnakeCase(input: String): String = input + .split(Regex("[\\s-]")) + .filter { it.isNotEmpty() } + .joinToString("_") { it.lowercase() } } diff --git a/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt b/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt index cabb77b..1961d74 100644 --- a/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt +++ b/plugin-shared/src/test/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationMigrationTest.kt @@ -1,12 +1,12 @@ package app.simplecloud.plugin.api.shared.config +import org.spongepowered.configurate.objectmapping.ConfigSerializable import java.nio.file.Files import java.nio.file.Path import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue -import org.spongepowered.configurate.objectmapping.ConfigSerializable class ConfigurationMigrationTest { @@ -92,10 +92,7 @@ class ConfigurationMigrationTest { var enabled: Boolean = true } - private class TestYamlDirectoryRepository( - directory: Path, - configMigrator: ConfigMigrator, - ) : + private class TestYamlDirectoryRepository(directory: Path, configMigrator: ConfigMigrator) : YamlDirectoryRepository( directory = directory, javaClass = TestVersionedConfig::class.java, @@ -106,8 +103,6 @@ class ConfigurationMigrationTest { save("${entity.message}.yml", entity) } - override fun find(identifier: String): TestVersionedConfig? { - return findAll().firstOrNull { it.message == identifier } - } + override fun find(identifier: String): TestVersionedConfig? = findAll().firstOrNull { it.message == identifier } } } diff --git a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt index 6019313..5f8369c 100644 --- a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt +++ b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSender.kt @@ -3,22 +3,16 @@ package app.simplecloud.plugin.api.velocity.command import app.simplecloud.plugin.api.shared.command.CloudSender import com.velocitypowered.api.command.CommandSource import com.velocitypowered.api.proxy.Player -import java.util.UUID import net.kyori.adventure.text.Component +import java.util.UUID class VelocityCloudSender(private val commandSource: CommandSource) : CloudSender { - fun getCommandSource(): CommandSource { - return commandSource - } + fun getCommandSource(): CommandSource = commandSource - override fun getUniqueId(): UUID? { - return (commandSource as? Player)?.uniqueId - } + override fun getUniqueId(): UUID? = (commandSource as? Player)?.uniqueId - override fun hasPermission(permission: String): Boolean { - return commandSource.hasPermission(permission) - } + override fun hasPermission(permission: String): Boolean = commandSource.hasPermission(permission) override fun sendMessage(message: Component) { commandSource.sendMessage(message) diff --git a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt index 2e8ac89..062f4f1 100644 --- a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt +++ b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/command/VelocityCloudSenderMapper.kt @@ -5,11 +5,7 @@ import org.incendo.cloud.SenderMapper object VelocityCloudSenderMapper : SenderMapper { - override fun map(base: CommandSource): VelocityCloudSender { - return VelocityCloudSender(base) - } + override fun map(base: CommandSource): VelocityCloudSender = VelocityCloudSender(base) - override fun reverse(mapped: VelocityCloudSender): CommandSource { - return mapped.getCommandSource() - } + override fun reverse(mapped: VelocityCloudSender): CommandSource = mapped.getCommandSource() } diff --git a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/permission/VelocityPermissionChecker.kt b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/permission/VelocityPermissionChecker.kt index 733017b..8ff9048 100644 --- a/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/permission/VelocityPermissionChecker.kt +++ b/plugin-velocity/src/main/kotlin/app/simplecloud/plugin/api/velocity/permission/VelocityPermissionChecker.kt @@ -3,10 +3,7 @@ package app.simplecloud.plugin.api.velocity.permission import app.simplecloud.plugin.api.shared.permission.PermissionChecker import com.velocitypowered.api.proxy.Player -/** @author Niklas Nieberler */ class VelocityPermissionChecker : PermissionChecker { - override fun checkPermission(player: Player, name: String): Boolean { - return player.hasPermission(name) - } + override fun checkPermission(player: Player, name: String): Boolean = player.hasPermission(name) } From c20b01b40bb3de7a794ccb7de984d05923a951e2 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 20:55:06 +0200 Subject: [PATCH 07/13] feat: build-logic publishing --- .github/workflows/release.yml | 2 +- README.md | 14 +++++++------- build-logic/build.gradle.kts | 23 +++++++++++++++++++++++ build.gradle.kts | 2 +- settings.gradle.kts | 2 +- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 47b038d..29d345e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -63,7 +63,7 @@ jobs: run: ./gradlew clean build $GRADLE_ARGS - name: Publish to SimpleCloud Repository - run: ./gradlew publish $GRADLE_ARGS + run: ./gradlew publish :build-logic:publish $GRADLE_ARGS env: SIMPLECLOUD_USERNAME: ${{ secrets.SIMPLECLOUD_USERNAME }} SIMPLECLOUD_PASSWORD: ${{ secrets.SIMPLECLOUD_PASSWORD }} diff --git a/README.md b/README.md index 20c7096..07ae51b 100644 --- a/README.md +++ b/README.md @@ -39,20 +39,20 @@ This repository holds classes that are very commonly used in plugins. ### Gradle Kotlin ```kt -implementation("app.simplecloud.plugin:plugin-shared:VERSION") +implementation("app.simplecloud.api.plugin:plugin-shared:VERSION") ``` ### Gradle Groovy ```groovy -implementation "app.simplecloud.plugin:plugin-shared:VERSION" +implementation "app.simplecloud.api.plugin:plugin-shared:VERSION" ``` ### Maven ```xml - app.simplecloud.plugin + app.simplecloud.api.plugin plugin-shared VERSION @@ -82,16 +82,16 @@ This repository is licensed under [Apache 2.0][license]. [modrinth]: https://modrinth.com/organization/simplecloud -[dev]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/plugin +[dev]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/api/plugin -[artifacts]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/plugin +[artifacts]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/api/plugin -[dev-artifacts]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/plugin +[dev-artifacts]: https://repo.simplecloud.app/#/snapshots/app/simplecloud/api/plugin [badge-maven-central]: https://img.shields.io/maven-central/v/app.simplecloud.droplet.api/droplet-api?labelColor=18181b&style=flat-square&color=65a30d&label=Release -[badge-dev]: https://repo.simplecloud.app/api/badge/latest/snapshots/app/simplecloud/plugin/plugin-shared?name=Dev&style=flat-square&color=0ea5e9 +[badge-dev]: https://repo.simplecloud.app/api/badge/latest/snapshots/app/simplecloud/api/plugin/plugin-shared?name=Dev&style=flat-square&color=0ea5e9 diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 75fdb05..462aebe 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -1,9 +1,32 @@ plugins { `kotlin-dsl` + `maven-publish` } +val baseVersion = "1.0.0" +val isRelease = providers.gradleProperty("release").isPresent +val commitHash = providers.exec { + commandLine("git", "rev-parse", "--short", "HEAD") +}.standardOutput.asText.get().trim() + +group = "app.simplecloud.gradle" +version = if (isRelease) baseVersion else "$baseVersion-dev.$commitHash" + dependencies { implementation(libs.kotlin.gradle.plugin) implementation(libs.shadow.gradle.plugin) implementation(libs.spotless.gradle.plugin) } + +publishing { + repositories { + maven { + name = "simplecloud" + url = uri("https://repo.simplecloud.app/snapshots") + credentials { + username = System.getenv("SIMPLECLOUD_USERNAME") + password = System.getenv("SIMPLECLOUD_PASSWORD") + } + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 10573a7..1c0ac2c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ val commitHash = providers.exec { }.standardOutput.asText.get().trim() allprojects { - group = "app.simplecloud.plugin" + group = "app.simplecloud.api.plugin" version = if (isRelease) baseVersion else "$baseVersion-dev.$commitHash" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 1b5abd5..ddaae11 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,7 +11,7 @@ include( "plugin-minestom", "plugin-paper", "plugin-shared", - "plugin-velocity" + "plugin-velocity", ) rootProject.name = "plugin-api" \ No newline at end of file From c0a55469ee2d95bf86c04265a7ee8750ae2cc723 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 21:17:36 +0200 Subject: [PATCH 08/13] feat: detekt --- build-logic/build.gradle.kts | 1 + .../simplecloud.base-conventions.gradle.kts | 1 + .../simplecloud.detekt-conventions.gradle.kts | 24 +++++++++++++++++++ .../src/main/resources/detekt/detekt.yml | 21 ++++++++++++++++ gradle/libs.versions.toml | 2 ++ .../api/shared/config/ConfigMigrator.kt | 6 +++-- .../api/shared/config/ConfigurationFactory.kt | 12 ++++++---- .../placeholder/async/AsyncPlaceholder.kt | 2 +- .../provider/AbstractPlaceholderProvider.kt | 2 +- 9 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts create mode 100644 build-logic/src/main/resources/detekt/detekt.yml diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 462aebe..c37a710 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -16,6 +16,7 @@ dependencies { implementation(libs.kotlin.gradle.plugin) implementation(libs.shadow.gradle.plugin) implementation(libs.spotless.gradle.plugin) + implementation(libs.detekt.gradle.plugin) } publishing { diff --git a/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts index d1b39bc..d610377 100644 --- a/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/simplecloud.base-conventions.gradle.kts @@ -5,6 +5,7 @@ plugins { kotlin("jvm") id("com.gradleup.shadow") id("simplecloud.spotless-conventions") + id("simplecloud.detekt-conventions") } repositories { diff --git a/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts new file mode 100644 index 0000000..3b8af33 --- /dev/null +++ b/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts @@ -0,0 +1,24 @@ +plugins { + id("dev.detekt") +} + +val defaultConfig = resources.text.fromString( + checkNotNull(javaClass.getResource("/detekt/detekt.yml")) { "detekt.yml not found" }.readText(), +) +val projectConfig = rootProject.file("config/detekt/detekt.yml") + +detekt { + buildUponDefaultConfig = true + parallel = true + config.setFrom(provider { defaultConfig.asFile() }) + if (projectConfig.exists()) { + config.from(projectConfig) + } +} + +pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { + tasks.named("check") { + setDependsOn(dependsOn.filterNot { it is TaskProvider<*> && it.name == "detekt" }) + dependsOn("detektMain", "detektTest") + } +} diff --git a/build-logic/src/main/resources/detekt/detekt.yml b/build-logic/src/main/resources/detekt/detekt.yml new file mode 100644 index 0000000..f1cbcad --- /dev/null +++ b/build-logic/src/main/resources/detekt/detekt.yml @@ -0,0 +1,21 @@ +style: + ForbiddenMethodCall: + active: true + methods: + - 'kotlin.io.print' + - 'kotlin.io.println' + - 'java.math.BigDecimal.(kotlin.Double)' + - 'java.math.BigDecimal.(kotlin.String)' + - 'kotlin.system.measureTimeMillis' + - 'kotlin.apply' + - 'kotlin.also' + - 'kotlin.let' + - 'kotlin.run' + - 'kotlin.with' + - 'kotlin.takeIf' + - 'kotlin.takeUnless' + # formatting is handled by ktlint + MaxLineLength: + active: false + WildcardImport: + active: false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fdd3eca..3e744b0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,6 +20,7 @@ cloud-minestom = "2.2.0-SNAPSHOT" shadow = "9.6.1" spotless = "8.10.4" +detekt = "2.0.0-alpha.6" [libraries] kotlin-jvm = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } @@ -53,6 +54,7 @@ cloud-minestom = { module = "org.incendo:cloud-minestom", version.ref = "cloud-m kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } shadow-gradle-plugin = { module = "com.gradleup.shadow:shadow-gradle-plugin", version.ref = "shadow" } spotless-gradle-plugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version.ref = "spotless" } +detekt-gradle-plugin = { module = "dev.detekt:detekt-gradle-plugin", version.ref = "detekt" } [bundles] adventure = ["adventure", "adventure-text-minimessage"] diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt index 8c01d88..60d45a7 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigMigrator.kt @@ -60,15 +60,16 @@ private constructor( private val migrations = mutableMapOf() /** The version that is assumed if the config has no version node yet. Defaults to `0`. */ - fun fallbackVersion(version: Int): Builder = apply { + fun fallbackVersion(version: Int): Builder { require(version >= 0) { "The fallback version must be greater than or equal to 0" } fallbackVersion = version + return this } /** Registers a migration from [fromVersion] to [toVersion]. */ - fun migrate(fromVersion: Int, toVersion: Int, action: ConfigMigration): Builder = apply { + fun migrate(fromVersion: Int, toVersion: Int, action: ConfigMigration): Builder { require(fromVersion >= 0) { "The source config version must be greater than or equal to 0" } @@ -83,6 +84,7 @@ private constructor( } migrations[fromVersion] = MigrationStep(toVersion, action) + return this } fun build(): ConfigMigrator = diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt index b28211c..b764d67 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/ConfigurationFactory.kt @@ -33,7 +33,11 @@ class ConfigurationFactory(private val file: File, javaClass: Class, confi load() } - private fun load(): E? = configurator.load(file).also { config = it } + private fun load(): E? { + val loaded = configurator.load(file) + config = loaded + return loaded + } companion object { @@ -51,9 +55,9 @@ class ConfigurationFactory(private val file: File, javaClass: Class, confi ): ConfigurationFactory { val file = File(dataDirectory, fileName) DefaultConfigInstaller.install(file.toPath(), classLoader) - return ConfigurationFactory(file, E::class.java, migrator).also { - it.loadOrCreate(default) - } + val factory = ConfigurationFactory(file, E::class.java, migrator) + factory.loadOrCreate(default) + return factory } /** Same as [create] but with a [Path] as data directory. */ diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt index 33c268a..6b98119 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/async/AsyncPlaceholder.kt @@ -25,7 +25,7 @@ data class AsyncPlaceholder(val key: String, private val handler: AsyncPlaceh * @param prefix first name for the placeholder key */ suspend fun invokeTagResolver(value: T, prefix: String? = null): TagResolver { - val resolvedKey = prefix?.let { "${it}_$key" } ?: this.key + val resolvedKey = if (prefix != null) "${prefix}_$key" else this.key return Placeholder.unparsed(resolvedKey, invoke(value).toString()) } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt index fc75e56..edef84d 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt @@ -89,7 +89,7 @@ abstract class AbstractPlaceholderProvider(private val executor: SinglePlaceh prefix: String?, ): TagResolver { val key = resolver.getKey() - val resolvedKey = prefix?.let { "${it}_$key" } ?: key + val resolvedKey = if (prefix != null) "${prefix}_$key" else key return TagResolver.resolver(resolvedKey) { arguments, _ -> return@resolver runBlocking { resolver.resolve(arguments) as Tag } } From 5b61ea3d836d354e45ce70708ad057690a3777d4 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 21:32:19 +0200 Subject: [PATCH 09/13] ci: lint --- .github/workflows/lint.yml | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..389ea11 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,42 @@ +name: Lint + +on: + pull_request: + branches: + - main + types: [opened, synchronize, reopened, ready_for_review] + push: + branches: + - main + - develop + +concurrency: + group: lint-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + lint: + name: lint + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v7 + + - name: Set up JDK + uses: actions/setup-java@v6 + with: + distribution: 'temurin' + java-version: '25' + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v6 + + - name: Make gradlew executable + run: chmod +x ./gradlew + + - name: Run spotless and detekt + run: ./gradlew spotlessCheck detektMain detektTest --continue From 7e9feba6670c8af2fc13ac167294403902820178 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 21:42:26 +0200 Subject: [PATCH 10/13] please linter --- build-logic/src/main/resources/detekt/detekt.yml | 2 ++ .../api/minestom/permission/MinestomPermissions.kt | 13 ++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/build-logic/src/main/resources/detekt/detekt.yml b/build-logic/src/main/resources/detekt/detekt.yml index f1cbcad..b85cdae 100644 --- a/build-logic/src/main/resources/detekt/detekt.yml +++ b/build-logic/src/main/resources/detekt/detekt.yml @@ -14,6 +14,8 @@ style: - 'kotlin.with' - 'kotlin.takeIf' - 'kotlin.takeUnless' + MagicNumber: + active: false # formatting is handled by ktlint MaxLineLength: active: false diff --git a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt index 18d1869..f5027b9 100644 --- a/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt +++ b/plugin-minestom/src/main/kotlin/app/simplecloud/plugin/api/minestom/permission/MinestomPermissions.kt @@ -13,13 +13,12 @@ class MinestomPermissions(private val check: BiPredicate?) { val hasCheck: Boolean = check != null - fun hasPermission(sender: CommandSender, permission: String): Boolean { - if (permission.isEmpty()) return true - if (sender is ConsoleSender) return true - if (sender !is Player) return false - - if (check != null) return check.test(sender, permission) - return sender.permissionLevel >= 4 + fun hasPermission(sender: CommandSender, permission: String): Boolean = when { + permission.isEmpty() -> true + sender is ConsoleSender -> true + sender !is Player -> false + check != null -> check.test(sender, permission) + else -> sender.permissionLevel >= 4 } fun getChecker(): MinestomPermissionChecker = MinestomPermissionChecker(this) From 6c93b977595d98861eadfc4429e9b4dd2ef38ace Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 22:26:14 +0200 Subject: [PATCH 11/13] feat: enable configuration cache --- .../src/main/resources/detekt/detekt.yml | 18 +++++++++++++++++ gradle.properties | 5 +++++ .../api/shared/adventure/AdventureExt.kt | 2 +- .../api/shared/command/CloudSuggestions.kt | 9 ++++++--- .../serializer/GenericEnumSerializer.kt | 11 +++------- .../shared/pattern/ServerPatternIdentifier.kt | 20 +++++++++---------- .../argument/EnvironmentArgumentsResolver.kt | 2 +- .../argument/PropertiesArgumentsResolver.kt | 2 +- .../group/ServerCountArgumentsResolver.kt | 2 +- .../provider/AbstractPlaceholderProvider.kt | 5 +---- 10 files changed, 47 insertions(+), 29 deletions(-) create mode 100644 gradle.properties diff --git a/build-logic/src/main/resources/detekt/detekt.yml b/build-logic/src/main/resources/detekt/detekt.yml index b85cdae..e459542 100644 --- a/build-logic/src/main/resources/detekt/detekt.yml +++ b/build-logic/src/main/resources/detekt/detekt.yml @@ -1,3 +1,15 @@ +complexity: + TooManyFunctions: + active: false + LongParameterList: + allowedFunctionParameters: 6 + allowedConstructorParameters: 8 + ignoreDefaultParameters: true + LongMethod: + allowedLines: 80 + CyclomaticComplexMethod: + ignoreSimpleWhenEntries: true + style: ForbiddenMethodCall: active: true @@ -19,5 +31,11 @@ style: # formatting is handled by ktlint MaxLineLength: active: false + ReturnCount: + max: 3 + excludeGuardClauses: true + ThrowsCount: + max: 3 + excludeGuardClauses: true WildcardImport: active: false diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..02d89b8 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,5 @@ +org.gradle.jvmargs=-Xmx3g -XX:MaxMetaspaceSize=1g +org.gradle.configuration-cache=true +org.gradle.caching=true +org.gradle.parallel=true +org.gradle.tooling.parallel=true diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt index 185c494..00f0fd2 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/adventure/AdventureExt.kt @@ -18,7 +18,7 @@ fun text(message: String, vararg tagResolver: TagResolver): Component = miniMess fun tags(vararg entries: Pair): TagResolver = TagResolver.resolver( entries.map { (key, value) -> - val text = value?.toString() ?: "" + val text = value?.toString().orEmpty() if (key == "playername" && playerNameRegex.matches(text)) { Placeholder.parsed(key, text) } else { diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt index 6b28c37..78b2393 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/command/CloudSuggestions.kt @@ -243,8 +243,11 @@ object CloudSuggestions { private fun serverName(server: Server): String? { val persistentServer = server.persistentServer - if (persistentServer != null) return persistentServer.name - val group = server.group ?: return null - return "${group.name}-${server.numericalId}" + val group = server.group + return when { + persistentServer != null -> persistentServer.name + group != null -> "${group.name}-${server.numericalId}" + else -> null + } } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt index 65e3e87..a9dba6b 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/config/serializer/GenericEnumSerializer.kt @@ -7,19 +7,14 @@ import java.lang.reflect.Type object GenericEnumSerializer : TypeSerializer> { - @Suppress("UNCHECKED_CAST") override fun deserialize(type: Type, node: ConfigurationNode): Enum<*> { - val value = node.string ?: throw SerializationException("No value present in node") - if (type !is Class<*> || !type.isEnum) { throw SerializationException("Type is not an enum class") } - return try { - java.lang.Enum.valueOf(type as Class>, value) - } catch (_: IllegalArgumentException) { - throw SerializationException("Invalid enum constant") - } + val value = node.string + return type.enumConstants.filterIsInstance>().firstOrNull { it.name == value } + ?: throw SerializationException("Invalid enum constant: $value") } override fun serialize(type: Type, obj: Enum<*>?, node: ConfigurationNode) { diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt index c9daffe..f564290 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/pattern/ServerPatternIdentifier.kt @@ -18,15 +18,15 @@ class ServerPatternIdentifier( private val regex = Regex(regexPattern) fun parse(name: String, customRegex: Regex? = null): Pair { - val matchResult = customRegex?.matchEntire(name) ?: this.regex.matchEntire(name) - if (matchResult == null) throw IllegalArgumentException("$name does not match the pattern") - - val groupName = - matchResult.groups["groupName"]?.value - ?: throw IllegalArgumentException("Group name not found") - val numericalId = - matchResult.groups["numericalId"]?.value?.toInt() - ?: throw IllegalArgumentException("Numerical ID not found") + val matchResult = requireNotNull(customRegex?.matchEntire(name) ?: this.regex.matchEntire(name)) { + "$name does not match the pattern" + } + val groupName = requireNotNull(matchResult.groups["groupName"]?.value) { + "Group name not found" + } + val numericalId = requireNotNull(matchResult.groups["numericalId"]?.value?.toInt()) { + "Numerical ID not found" + } return Pair(groupName, numericalId) } @@ -45,7 +45,7 @@ class ServerPatternIdentifier( val groupName = parse(name).first return try { this.cloudApi.group().getGroupByName(groupName).await() - } catch (e: Exception) { + } catch (_: Exception) { null } } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt index 99f3e6d..a686d5b 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/EnvironmentArgumentsResolver.kt @@ -9,7 +9,7 @@ class EnvironmentArgumentsResolver : ArgumentsResolver { override suspend fun resolve(arguments: ArgumentQueue): Tag? { val argumentName = arguments.popOr("environment expected").value() - val defaultArgument = arguments.peek()?.value() ?: "" + val defaultArgument = arguments.peek()?.value().orEmpty() val string = System.getenv(argumentName) ?: defaultArgument return Tag.preProcessParsed(string) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt index 9dc18e1..69e8609 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/PropertiesArgumentsResolver.kt @@ -9,7 +9,7 @@ class PropertiesArgumentsResolver(private val properties: Map) : Ar override suspend fun resolve(arguments: ArgumentQueue): Tag? { val argumentName = arguments.popOr("property expected").value() - val defaultArgument = arguments.peek()?.value() ?: "" + val defaultArgument = arguments.peek()?.value().orEmpty() val string = this.properties[argumentName] ?: defaultArgument return Tag.preProcessParsed(string.toString()) } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt index 73a14b8..8cb9286 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/argument/group/ServerCountArgumentsResolver.kt @@ -21,7 +21,7 @@ class ServerCountArgumentsResolver(private val cloudApi: CloudApi, private val g private suspend fun findServerCount(group: Group, state: ServerState?): Int { val servers = this.cloudApi.server().getServersByGroup(group.name).await() return if (state != null) { - servers.filter { it.state == state }.size + servers.count { it.state == state } } else { servers.size } diff --git a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt index edef84d..6acac30 100644 --- a/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt +++ b/plugin-shared/src/main/kotlin/app/simplecloud/plugin/api/shared/placeholder/provider/AbstractPlaceholderProvider.kt @@ -43,10 +43,7 @@ abstract class AbstractPlaceholderProvider(private val executor: SinglePlaceh this.executor.getTagResolver(this.cloudApi, it, prefix) } return TagResolver.resolver( - *singleTagResolver.toTypedArray(), - *availableArgumentsResolver - .map { convertArgumentsResolverToTagResolver(it, prefix) } - .toTypedArray(), + singleTagResolver + availableArgumentsResolver.map { convertArgumentsResolverToTagResolver(it, prefix) }, ) } From ff39fb8d5ad9a5a50c61965233bcff420e2b4035 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 22:35:13 +0200 Subject: [PATCH 12/13] fix: detekt config --- .github/workflows/build.yml | 2 +- .../simplecloud.detekt-conventions.gradle.kts | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 12b3274..fb7a8dc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,4 +35,4 @@ jobs: run: chmod +x ./gradlew - name: Build and test - run: ./gradlew clean build + run: ./gradlew clean build -x spotlessCheck -x detektMain -x detektTest diff --git a/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts index 3b8af33..4d13f22 100644 --- a/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts @@ -2,15 +2,20 @@ plugins { id("dev.detekt") } -val defaultConfig = resources.text.fromString( - checkNotNull(javaClass.getResource("/detekt/detekt.yml")) { "detekt.yml not found" }.readText(), -) +val defaultConfigText = checkNotNull(javaClass.getResource("/detekt/detekt.yml")) { "detekt.yml not found" }.readText() val projectConfig = rootProject.file("config/detekt/detekt.yml") +val extractDetektConfig = tasks.register("extractDetektConfig") { + val output = layout.buildDirectory.file("detekt/detekt.yml") + inputs.property("config", defaultConfigText) + outputs.file(output) + doLast { output.get().asFile.writeText(defaultConfigText) } +} + detekt { buildUponDefaultConfig = true parallel = true - config.setFrom(provider { defaultConfig.asFile() }) + config.setFrom(extractDetektConfig) if (projectConfig.exists()) { config.from(projectConfig) } From 9a2607a30ede6403d01217d13379791232bbf25a Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 18 Oct 2026 22:55:01 +0200 Subject: [PATCH 13/13] fix: extract detekt config --- .../app/simplecloud/gradle/WriteTextFile.kt | 23 +++++++++++++++++++ .../simplecloud.detekt-conventions.gradle.kts | 13 ++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 build-logic/src/main/kotlin/app/simplecloud/gradle/WriteTextFile.kt diff --git a/build-logic/src/main/kotlin/app/simplecloud/gradle/WriteTextFile.kt b/build-logic/src/main/kotlin/app/simplecloud/gradle/WriteTextFile.kt new file mode 100644 index 0000000..2b6e86b --- /dev/null +++ b/build-logic/src/main/kotlin/app/simplecloud/gradle/WriteTextFile.kt @@ -0,0 +1,23 @@ +package app.simplecloud.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** Writes [text] to [outputFile]. */ +abstract class WriteTextFile : DefaultTask() { + + @get:Input + abstract val text: Property + + @get:OutputFile + abstract val outputFile: RegularFileProperty + + @TaskAction + fun write() { + outputFile.get().asFile.writeText(text.get()) + } +} diff --git a/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts b/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts index 4d13f22..def8a7a 100644 --- a/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/simplecloud.detekt-conventions.gradle.kts @@ -1,3 +1,5 @@ +import app.simplecloud.gradle.WriteTextFile + plugins { id("dev.detekt") } @@ -5,17 +7,16 @@ plugins { val defaultConfigText = checkNotNull(javaClass.getResource("/detekt/detekt.yml")) { "detekt.yml not found" }.readText() val projectConfig = rootProject.file("config/detekt/detekt.yml") -val extractDetektConfig = tasks.register("extractDetektConfig") { - val output = layout.buildDirectory.file("detekt/detekt.yml") - inputs.property("config", defaultConfigText) - outputs.file(output) - doLast { output.get().asFile.writeText(defaultConfigText) } +val extractDetektConfig = tasks.register("extractDetektConfig") { + description = "Extracts the detekt config" + text = defaultConfigText + outputFile = layout.buildDirectory.file("detekt/detekt.yml") } detekt { buildUponDefaultConfig = true parallel = true - config.setFrom(extractDetektConfig) + config.setFrom(extractDetektConfig.flatMap { it.outputFile }) if (projectConfig.exists()) { config.from(projectConfig) }