diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-01-11 17:37:53 +0900 |
|---|---|---|
| committer | Sho Sakuma <me@m1sk9.dev> | 2026-01-11 17:38:57 +0900 |
| commit | 6b87f86a4ebdac06feefcd507e2c9136eacb6d25 (patch) | |
| tree | bdcb09cfc3241f8f3a1f2f5c9035ad1f07efc5b8 | |
| parent | 3b8be8bf48d3e178a0cc05cb8655835e231483ad (diff) | |
| download | LunaticChat-6b87f86a4ebdac06feefcd507e2c9136eacb6d25.tar.gz LunaticChat-6b87f86a4ebdac06feefcd507e2c9136eacb6d25.tar.bz2 LunaticChat-6b87f86a4ebdac06feefcd507e2c9136eacb6d25.zip | |
fix: Prevent Romanization conversion for Japanese text
5 files changed, 44 insertions, 24 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index b7d1214..abc3346 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # LunaticChat Changelog +### v0.3.1 + +- Fixed an issue where Japanese text was being converted to Romanized characters. + ### v0.3.0 - Fixed an issue where romaji conversion did not work properly in some cases. diff --git a/build.gradle.kts b/build.gradle.kts index aa66d31..d2bd408 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { allprojects { group = "dev.m1sk9" - version = "0.3.0" + version = "0.3.1" repositories { mavenCentral() 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)) + } } |
