diff --git a/gradle.properties b/gradle.properties index deeda5d40..3e3d76edb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=26.1.2 group=dev.slne.surf.api -version=3.16.0 +version=3.16.1 relocationPrefix=dev.slne.surf.api.libs snapshot=false diff --git a/surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/messages/CommonComponents.kt b/surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/messages/CommonComponents.kt index 11729c98b..c6b4effc9 100644 --- a/surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/messages/CommonComponents.kt +++ b/surf-api-core/surf-api-core/src/main/kotlin/dev/slne/surf/api/core/messages/CommonComponents.kt @@ -7,10 +7,8 @@ import dev.slne.surf.api.core.messages.Colors.Companion.SPACER import dev.slne.surf.api.core.messages.Colors.Companion.VARIABLE_KEY import dev.slne.surf.api.core.messages.Colors.Companion.VARIABLE_VALUE import dev.slne.surf.api.core.messages.CommonComponents.MAP_SEPARATOR -import dev.slne.surf.api.core.messages.adventure.appendNewline -import dev.slne.surf.api.core.messages.adventure.appendText -import dev.slne.surf.api.core.messages.adventure.clickOpensUrl -import dev.slne.surf.api.core.messages.adventure.text +import dev.slne.surf.api.core.messages.adventure.* +import dev.slne.surf.api.core.messages.builder.SurfComponentBuilder import dev.slne.surf.api.core.util.mutableObjectListOf import net.kyori.adventure.text.Component import net.kyori.adventure.text.JoinConfiguration @@ -469,6 +467,66 @@ object CommonComponents { else append(RETRY_LATER_FOOTER) } + /** + * Builds a structured disconnect message with a specific reason, details, and optional footers. + * + * @param reason The reason for the disconnection (will be displayed in uppercase). + * @param details Block to render the detailed message content. + * @param issue Whether to include an issue-related footer instead of a simple retry footer. + * @param retryLater Whether to include a retry later footer. + * @param onlyDiscordLink Whether to include only the Discord link in the footer without additional information. + * + * **Output Example (issue = true, retryLater = false, onlyDiscordLink = false):** + * + * ``` + * + * + * CASTCRAFTER + * COMMUNITY SERVER + * + * (in error color) + * + * + *
(in spacer color) + * + * Bitte versuche es später erneut. + * Sollte das Problem weiterhin bestehen, + * kontaktiere den Support in unserem Discord. + * + * discord.gg/castcrafter (clickable) + * ``` + */ + fun buildDisconnectComponent( + reason: String, + details: SurfComponentBuilder.() -> Unit, + issue: Boolean = false, + retryLater: Boolean = false, + onlyDiscordLink: Boolean = true, + ) = buildText { + appendNewline(2) + primary("CASTCRAFTER") + appendNewline() + primary("COMMUNITY SERVER") + appendNewline(2) + error(reason.uppercase()) + appendNewline(3) + append(details).color(SPACER) + + if (issue) { + append(ISSUE_FOOTER) + } + + if (retryLater) { + append(RETRY_LATER_FOOTER) + } + + if (onlyDiscordLink) { + appendNewline(2) + primary("discord.gg/castcrafter") + } + } + + /** * Formats a collection into a comma-separated list component. *