diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-01-23 20:26:37 +0900 |
|---|---|---|
| committer | Sho Sakuma <me@m1sk9.dev> | 2026-01-23 20:26:37 +0900 |
| commit | 21870d02216954d7e291f2179f4efd4ed6482166 (patch) | |
| tree | 4357a4f8e68e606557ec3f37b18eb8acadca27e5 /platform-paper | |
| parent | 6b9172ce4ff1eac79e7d90382f3d3a58e6e2d3d7 (diff) | |
| download | LunaticChat-21870d02216954d7e291f2179f4efd4ed6482166.tar.gz LunaticChat-21870d02216954d7e291f2179f4efd4ed6482166.tar.bz2 LunaticChat-21870d02216954d7e291f2179f4efd4ed6482166.zip | |
feat: Add command desction override i18n
Diffstat (limited to 'platform-paper')
5 files changed, 64 insertions, 42 deletions
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/core/LunaticCommand.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/core/LunaticCommand.kt index 8bbd1bd..d8ca412 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/core/LunaticCommand.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/core/LunaticCommand.kt @@ -6,6 +6,8 @@ import dev.m1sk9.lunaticChat.paper.LunaticChat import dev.m1sk9.lunaticChat.paper.command.annotation.Command import dev.m1sk9.lunaticChat.paper.command.annotation.Permission import dev.m1sk9.lunaticChat.paper.command.annotation.PlayerOnly +import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter +import dev.m1sk9.lunaticChat.paper.i18n.MessageKey import io.papermc.paper.command.brigadier.CommandSourceStack import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor @@ -38,8 +40,8 @@ abstract class LunaticCommand( /** Command aliases */ val aliases: List<String> get() = commandAnnotation.aliases.toList() - /** Command description for help text */ - val description: String get() = commandAnnotation.description + /** Command description for help text - can be overridden for i18n */ + open val description: String get() = commandAnnotation.description /** Required permission node, if any */ val permission: String? get() = permissionAnnotation?.value?.objectInstance?.permissionNode @@ -75,9 +77,9 @@ abstract class LunaticCommand( protected fun checkPlayerOnly(ctx: CommandContext): CommandResult? { if (isPlayerOnly && !ctx.isPlayer) { return CommandResult.Failure( - Component - .text("This command can only be executed by a player.") - .color(NamedTextColor.RED), + MessageFormatter.formatError( + plugin.languageManager.getMessage(MessageKey.PlayerOnlyCommand), + ), ) } diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/DirectMessageNoticeToggleCommand.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/DirectMessageNoticeToggleCommand.kt index 7906ca9..e838ee0 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/DirectMessageNoticeToggleCommand.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/DirectMessageNoticeToggleCommand.kt @@ -9,23 +9,28 @@ import dev.m1sk9.lunaticChat.paper.command.annotation.Permission import dev.m1sk9.lunaticChat.paper.command.annotation.PlayerOnly import dev.m1sk9.lunaticChat.paper.command.core.CommandContext import dev.m1sk9.lunaticChat.paper.command.core.LunaticCommand +import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager +import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter +import dev.m1sk9.lunaticChat.paper.i18n.MessageKey import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager import io.papermc.paper.command.brigadier.CommandSourceStack import io.papermc.paper.command.brigadier.Commands -import net.kyori.adventure.text.Component -import net.kyori.adventure.text.format.NamedTextColor @Command( name = "notice", aliases = ["dmnotice"], - description = "Toggle direct message notification", + description = "", ) @Permission(LunaticChatPermissionNode.NoticeToggle::class) @PlayerOnly class DirectMessageNoticeToggleCommand( plugin: LunaticChat, private val settingsManager: PlayerSettingsManager, + private val languageManager: LanguageManager, ) : LunaticCommand(plugin) { + override val description: String + get() = languageManager.getMessage(MessageKey.CommandDescriptionNotice) + override fun buildCommand(): LiteralArgumentBuilder<CommandSourceStack> = Commands .literal(name) @@ -63,11 +68,11 @@ class DirectMessageNoticeToggleCommand( val updatedSettings = currentSettings.copy(directMessageNotificationEnabled = enable) settingsManager.updateSettings(updatedSettings) - val statusText = if (enable) "enabled" else "disabled" + val toggleText = languageManager.getToggleText(enable) val message = - Component - .text("Direct message notification has been $statusText.") - .color(NamedTextColor.GREEN) + MessageFormatter.formatSuccess( + languageManager.getMessage(MessageKey.DirectMessageNoticeToggle(toggleText)), + ) player.sendMessage(message) return CommandResult.Success @@ -77,11 +82,11 @@ class DirectMessageNoticeToggleCommand( val player = ctx.requirePlayer() val settings = settingsManager.getSettings(player.uniqueId) - val statusText = if (settings.directMessageNotificationEnabled) "enabled" else "disabled" + val toggleText = languageManager.getToggleText(settings.directMessageNotificationEnabled) val message = - Component - .text("Direct message notification is currently $statusText.") - .color(NamedTextColor.YELLOW) + MessageFormatter.format( + languageManager.getMessage(MessageKey.DirectMessageNoticeStatus(toggleText)), + ) player.sendMessage(message) return CommandResult.Success diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/ReplyCommand.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/ReplyCommand.kt index 3d2fa88..0108f37 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/ReplyCommand.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/ReplyCommand.kt @@ -11,23 +11,28 @@ import dev.m1sk9.lunaticChat.paper.command.annotation.PlayerOnly import dev.m1sk9.lunaticChat.paper.command.core.CommandContext import dev.m1sk9.lunaticChat.paper.command.core.LunaticCommand import dev.m1sk9.lunaticChat.paper.command.handler.DirectMessageHandler +import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager +import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter +import dev.m1sk9.lunaticChat.paper.i18n.MessageKey import io.papermc.paper.command.brigadier.CommandSourceStack import io.papermc.paper.command.brigadier.Commands import kotlinx.coroutines.runBlocking -import net.kyori.adventure.text.Component -import net.kyori.adventure.text.format.NamedTextColor @Command( name = "reply", aliases = ["r"], - description = "Reply to the last person who messaged you", + description = "", ) @Permission(LunaticChatPermissionNode.Reply::class) @PlayerOnly class ReplyCommand( plugin: LunaticChat, private val dmHandler: DirectMessageHandler, + private val languageManager: LanguageManager, ) : LunaticCommand(plugin) { + override val description: String + get() = languageManager.getMessage(MessageKey.CommandDescriptionReply) + override fun buildCommand(): LiteralArgumentBuilder<CommandSourceStack> = Commands .literal(name) @@ -53,9 +58,9 @@ class ReplyCommand( val target = dmHandler.getReplyTarget(sender) ?: return CommandResult.Failure( - Component - .text("You have no one to reply to.") - .color(NamedTextColor.RED), + MessageFormatter.formatError( + languageManager.getMessage(MessageKey.ReplyTargetNotFound), + ), ) runBlocking { diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/RomajiConvertToggleCommand.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/RomajiConvertToggleCommand.kt index 5cf0492..b25667d 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/RomajiConvertToggleCommand.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/RomajiConvertToggleCommand.kt @@ -9,23 +9,28 @@ import dev.m1sk9.lunaticChat.paper.command.annotation.Permission import dev.m1sk9.lunaticChat.paper.command.annotation.PlayerOnly import dev.m1sk9.lunaticChat.paper.command.core.CommandContext import dev.m1sk9.lunaticChat.paper.command.core.LunaticCommand +import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager +import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter +import dev.m1sk9.lunaticChat.paper.i18n.MessageKey import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager import io.papermc.paper.command.brigadier.CommandSourceStack import io.papermc.paper.command.brigadier.Commands -import net.kyori.adventure.text.Component -import net.kyori.adventure.text.format.NamedTextColor @Command( name = "jp", aliases = [], - description = "Toggle romaji to Japanese conversion for your messages", + description = "", ) @Permission(LunaticChatPermissionNode.JapaneseToggle::class) @PlayerOnly class RomajiConvertToggleCommand( plugin: LunaticChat, private val settingsManager: PlayerSettingsManager, + private val languageManager: LanguageManager, ) : LunaticCommand(plugin) { + override val description: String + get() = languageManager.getMessage(MessageKey.CommandDescriptionJp) + override fun buildCommand(): LiteralArgumentBuilder<CommandSourceStack> = Commands .literal(name) @@ -63,11 +68,11 @@ class RomajiConvertToggleCommand( val updatedSettings = currentSettings.copy(japaneseConversionEnabled = enable) settingsManager.updateSettings(updatedSettings) - val statusText = if (enable) "enabled" else "disabled" + val toggleText = languageManager.getToggleText(enable) val message = - Component - .text("Japanese conversion has been $statusText.") - .color(NamedTextColor.GREEN) + MessageFormatter.formatSuccess( + languageManager.getMessage(MessageKey.RomajiConversionToggle(toggleText)), + ) player.sendMessage(message) return CommandResult.Success @@ -77,11 +82,11 @@ class RomajiConvertToggleCommand( val player = ctx.requirePlayer() val settings = settingsManager.getSettings(player.uniqueId) - val statusText = if (settings.japaneseConversionEnabled) "enabled" else "disabled" + val toggleText = languageManager.getToggleText(settings.japaneseConversionEnabled) val message = - Component - .text("Japanese conversion is currently $statusText.") - .color(NamedTextColor.YELLOW) + MessageFormatter.format( + languageManager.getMessage(MessageKey.RomajiConversionStatus(toggleText)), + ) player.sendMessage(message) return CommandResult.Success diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/TellCommand.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/TellCommand.kt index 36617a3..d958b23 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/TellCommand.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/TellCommand.kt @@ -13,25 +13,30 @@ import dev.m1sk9.lunaticChat.paper.command.annotation.PlayerOnly import dev.m1sk9.lunaticChat.paper.command.core.CommandContext import dev.m1sk9.lunaticChat.paper.command.core.LunaticCommand import dev.m1sk9.lunaticChat.paper.command.handler.DirectMessageHandler +import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager +import dev.m1sk9.lunaticChat.paper.i18n.MessageFormatter +import dev.m1sk9.lunaticChat.paper.i18n.MessageKey import io.papermc.paper.command.brigadier.CommandSourceStack import io.papermc.paper.command.brigadier.Commands import kotlinx.coroutines.runBlocking -import net.kyori.adventure.text.Component -import net.kyori.adventure.text.format.NamedTextColor import org.bukkit.Bukkit import java.util.concurrent.CompletableFuture @Command( name = "tell", aliases = ["t", "msg", "m", "w", "whisper"], - description = "Send a private message to another player", + description = "", ) @Permission(LunaticChatPermissionNode.Tell::class) @PlayerOnly class TellCommand( plugin: LunaticChat, private val directMessageHandler: DirectMessageHandler, + private val languageManager: LanguageManager, ) : LunaticCommand(plugin) { + override val description: String + get() = languageManager.getMessage(MessageKey.CommandDescriptionTell) + override fun buildCommand(): LiteralArgumentBuilder<CommandSourceStack> = Commands .literal(name) @@ -64,16 +69,16 @@ class TellCommand( val recipient = Bukkit.getPlayer(targetName) ?: return CommandResult.Failure( - Component - .text("Player '$targetName' is not online.") - .color(NamedTextColor.RED), + MessageFormatter.formatError( + languageManager.getMessage(MessageKey.TellTargetOffline(targetName)), + ), ) if (recipient.uniqueId == sender.uniqueId) { return CommandResult.Failure( - Component - .text("You cannot send a message to yourself.") - .color(NamedTextColor.RED), + MessageFormatter.formatError( + languageManager.getMessage(MessageKey.TellYourself), + ), ) } |
