summaryrefslogtreecommitdiff
path: root/platform-paper
diff options
context:
space:
mode:
authorSho Sakuma <me@m1sk9.dev>2026-01-11 17:37:53 +0900
committerSho Sakuma <me@m1sk9.dev>2026-01-11 17:38:57 +0900
commit6b87f86a4ebdac06feefcd507e2c9136eacb6d25 (patch)
treebdcb09cfc3241f8f3a1f2f5c9035ad1f07efc5b8 /platform-paper
parent3b8be8bf48d3e178a0cc05cb8655835e231483ad (diff)
downloadLunaticChat-6b87f86a4ebdac06feefcd507e2c9136eacb6d25.tar.gz
LunaticChat-6b87f86a4ebdac06feefcd507e2c9136eacb6d25.tar.bz2
LunaticChat-6b87f86a4ebdac06feefcd507e2c9136eacb6d25.zip
fix: Prevent Romanization conversion for Japanese text
Diffstat (limited to 'platform-paper')
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/handler/DirectMessageHandler.kt12
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverter.kt16
-rw-r--r--platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/listener/PlayerChatListener.kt34
3 files changed, 39 insertions, 23 deletions
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/handler/DirectMessageHandler.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/handler/DirectMessageHandler.kt
index 853dbb5..60adb7e 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/handler/DirectMessageHandler.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/command/handler/DirectMessageHandler.kt
@@ -81,12 +81,12 @@ class DirectMessageHandler(
val displayMessage =
senderSettings
?.takeIf { it.japaneseConversionEnabled }
- ?.let {
- romanjiConverter
- ?.runCatching {
- "$message §e(${convert(message)})"
- }?.getOrNull()
- } ?: message
+ ?.let { romanjiConverter }
+ ?.runCatching {
+ convert(message)
+ ?.let { "$message §e($it)" }
+ ?: message
+ }?.getOrNull() ?: message
val format = lunaticChatConfiguration.messageFormat.directMessageFormat
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverter.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverter.kt
index 79efa87..edd6041 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverter.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverter.kt
@@ -16,10 +16,17 @@ class RomanjiConverter(
* Step 2: Hiragana -> Kanji/Kana (using Google IME API)
*
* @param input The romaji string to convert.
- * @return The converted Japanese string, or the original input if conversion fails.
+ * @return The converted Japanese string, or null if the input contains non-romaji characters.
* @throws Exception if the conversion process encounters an error.
*/
- suspend fun convert(input: String): String {
+ suspend fun convert(input: String): String? {
+ if (!isRomajiOnly(input)) {
+ if (debugMode) {
+ logger.info("Input contains non-romaji characters, skipping conversion: $input")
+ }
+ return null
+ }
+
cache.get(input)?.let {
return it
}
@@ -42,4 +49,9 @@ class RomanjiConverter(
cache.put(input, result)
return result
}
+
+ private fun isRomajiOnly(input: String): Boolean =
+ input.all {
+ it.code in 0x20..0x7E
+ }
}
diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/listener/PlayerChatListener.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/listener/PlayerChatListener.kt
index eb1908d..17df427 100644
--- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/listener/PlayerChatListener.kt
+++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/listener/PlayerChatListener.kt
@@ -10,26 +10,30 @@ import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
class PlayerChatListener(
- private val converter: RomanjiConverter,
+ private val romajiConverter: RomanjiConverter,
private val settingsManager: PlayerSettingsManager,
) : Listener {
private val plainTextSerializer = PlainTextComponentSerializer.plainText()
@EventHandler(ignoreCancelled = true)
- fun onChat(event: AsyncChatEvent) {
- val player = event.player
- val settings = settingsManager.getSettings(player.uniqueId)
- if (!settings.japaneseConversionEnabled)return
+ fun onChat(event: AsyncChatEvent) =
+ runBlocking {
+ val player = event.player
+ val settings = settingsManager.getSettings(player.uniqueId)
+ val message = event.message()
+ val originalMessage = plainTextSerializer.serialize(message)
- val message = event.message()
- val originalMessage = plainTextSerializer.serialize(message)
+ val displayMessage =
+ settings
+ .takeIf {
+ it.japaneseConversionEnabled
+ }?.runCatching {
+ romajiConverter
+ .convert(originalMessage)
+ ?.let { "$originalMessage §e($it)" }
+ ?: originalMessage
+ }?.getOrNull() ?: originalMessage
- // AsyncChatEvent is already running on an async thread, so runBlocking is safe
- val result =
- runBlocking {
- converter.convert(originalMessage)
- }
-
- event.message(Component.text("$originalMessage §e($result)"))
- }
+ event.message(Component.text(displayMessage))
+ }
}