summaryrefslogtreecommitdiff
path: root/platform-paper
diff options
context:
space:
mode:
authorSho Sakuma <me@m1sk9.dev>2026-01-23 20:26:37 +0900
committerSho Sakuma <me@m1sk9.dev>2026-01-23 20:26:37 +0900
commit21870d02216954d7e291f2179f4efd4ed6482166 (patch)
tree4357a4f8e68e606557ec3f37b18eb8acadca27e5 /platform-paper
parent6b9172ce4ff1eac79e7d90382f3d3a58e6e2d3d7 (diff)
downloadLunaticChat-21870d02216954d7e291f2179f4efd4ed6482166.tar.gz
LunaticChat-21870d02216954d7e291f2179f4efd4ed6482166.tar.bz2
LunaticChat-21870d02216954d7e291f2179f4efd4ed6482166.zip
feat: Add command desction override i18n
Diffstat (limited to 'platform-paper')
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/core/LunaticCommand.kt12
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/DirectMessageNoticeToggleCommand.kt27
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/ReplyCommand.kt17
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/RomajiConvertToggleCommand.kt27
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/impl/TellCommand.kt23
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),
+ ),
)
}