diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-08-03 15:09:58 +0900 |
|---|---|---|
| committer | Sho Sakuma <me@m1sk9.dev> | 2026-08-05 01:15:29 +0900 |
| commit | fd56ebaa1dc2cfa8f834edb06395e8fc02375d1d (patch) | |
| tree | 7feb02881ca767e9180aafd6478be9a0d5c363af | |
| parent | f4bff879ac2f4323011d41e4f7ee85a9695515a5 (diff) | |
| download | LunaticChat-fd56ebaa1dc2cfa8f834edb06395e8fc02375d1d.tar.gz LunaticChat-fd56ebaa1dc2cfa8f834edb06395e8fc02375d1d.tar.bz2 LunaticChat-fd56ebaa1dc2cfa8f834edb06395e8fc02375d1d.zip | |
refactor: move romaji conversion out of engine
Closes #259.
engine exposed ktor through api(), so both platforms inherited the client
and its CIO engine. The only thing in engine that used ktor was
GoogleIMEClient, and the only module that used GoogleIMEClient was
platform-paper - Velocity was shipping roughly six megabytes of HTTP
client to support a Paper-only feature. Same story for
kotlinx-coroutines-core, which Velocity does not use at all.
Romaji conversion is a Paper feature, so the converter package now lives
in platform-paper alongside the ConversionCache and RomanjiConverter that
were already there. engine keeps kotlinx-serialization on api(), which is
genuine shared surface: the plugin messaging protocol is built on it.
The velocity shadow jar goes from 7,618,405 to 2,769,395 bytes, and no
longer contains io/ktor at all.
CacheData's tests were sitting inside engine's SettingsDataClassesTest,
which is unrelated to settings; they move with the class.
Co-Authored-By: Claude <noreply@anthropic.com>
12 files changed, 42 insertions, 38 deletions
diff --git a/engine/build.gradle.kts b/engine/build.gradle.kts index bcb7eb6..2d36116 100644 --- a/engine/build.gradle.kts +++ b/engine/build.gradle.kts @@ -4,11 +4,9 @@ plugins { } dependencies { - // Core dependencies (exposed to platform modules via api()) + // Exposed to platform modules via api(): the plugin messaging protocol is built on it, so + // both platforms need it on their compile and runtime classpath. api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0") - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0") - api("io.ktor:ktor-client-core:3.5.2") - api("io.ktor:ktor-client-cio:3.5.2") // Adventure API (provided by platform implementations) // Matches what every supported platform ships: Paper 26.2 and Velocity 4.x both bundle 5.2.0. diff --git a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/settings/SettingsDataClassesTest.kt b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/settings/SettingsDataClassesTest.kt index a7cc2ee..bd337ff 100644 --- a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/settings/SettingsDataClassesTest.kt +++ b/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/settings/SettingsDataClassesTest.kt @@ -1,6 +1,5 @@ package dev.m1sk9.lunaticChat.engine.settings -import dev.m1sk9.lunaticChat.engine.converter.CacheData import kotlinx.serialization.json.Json import java.util.UUID import kotlin.test.Test @@ -104,28 +103,4 @@ class SettingsDataClassesTest { val serialized = json.encodeToString(PlayerSettingsData.serializer(), data) assertTrue(serialized.contains(testUUID.toString())) } - - // --- CacheData --- - - @Test - fun `CacheData should store version and entries`() { - val data = CacheData(version = "1.0", entries = mapOf("hello" to "こんにちは")) - assertEquals("1.0", data.version) - assertEquals("こんにちは", data.entries["hello"]) - } - - @Test - fun `CacheData serialization round-trip should preserve all fields`() { - val original = - CacheData( - version = "2.0", - entries = mapOf("hello" to "こんにちは", "world" to "世界"), - ) - - val serialized = json.encodeToString(CacheData.serializer(), original) - val deserialized = json.decodeFromString(CacheData.serializer(), serialized) - - assertEquals(original.version, deserialized.version) - assertEquals(original.entries, deserialized.entries) - } } diff --git a/platform-paper/build.gradle.kts b/platform-paper/build.gradle.kts index a846ed9..95fe21a 100644 --- a/platform-paper/build.gradle.kts +++ b/platform-paper/build.gradle.kts @@ -20,6 +20,9 @@ dependencies { // Paper-specific dependencies compileOnly("io.papermc.paper:paper-api:26.2.build.92-stable") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0") + implementation("io.ktor:ktor-client-core:3.5.2") // Google IME client, update check + implementation("io.ktor:ktor-client-cio:3.5.2") implementation("com.charleskorn.kaml:kaml:0.104.0") // YAML configuration implementation("org.jetbrains.kotlin:kotlin-reflect:2.4.10") // Annotation processing diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt index 5ec2e0a..9f1de87 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/ServiceInitializer.kt @@ -1,6 +1,5 @@ package dev.m1sk9.lunaticChat.paper -import dev.m1sk9.lunaticChat.engine.converter.GoogleIMEClient import dev.m1sk9.lunaticChat.paper.chat.channel.ChannelManager import dev.m1sk9.lunaticChat.paper.chat.channel.ChannelMembershipManager import dev.m1sk9.lunaticChat.paper.chat.channel.ChannelMessageLogger @@ -10,6 +9,7 @@ import dev.m1sk9.lunaticChat.paper.chat.handler.ChannelNotificationHandler import dev.m1sk9.lunaticChat.paper.chat.handler.DirectMessageHandler import dev.m1sk9.lunaticChat.paper.config.LunaticChatConfiguration import dev.m1sk9.lunaticChat.paper.converter.ConversionCache +import dev.m1sk9.lunaticChat.paper.converter.GoogleIMEClient import dev.m1sk9.lunaticChat.paper.converter.RomanjiConverter import dev.m1sk9.lunaticChat.paper.i18n.LanguageManager import dev.m1sk9.lunaticChat.paper.settings.PlayerSettingsManager diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/converter/CacheData.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/CacheData.kt index 1f335b4..06bf3f0 100644 --- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/converter/CacheData.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/CacheData.kt @@ -1,4 +1,4 @@ -package dev.m1sk9.lunaticChat.engine.converter +package dev.m1sk9.lunaticChat.paper.converter import kotlinx.serialization.Serializable diff --git a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt index c550f09..cba62af 100644 --- a/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/ConversionCache.kt @@ -1,6 +1,5 @@ package dev.m1sk9.lunaticChat.paper.converter -import dev.m1sk9.lunaticChat.engine.converter.CacheData import dev.m1sk9.lunaticChat.paper.writeTextAtomically import kotlinx.serialization.json.Json import java.nio.file.Path diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/converter/GoogleIMEClient.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/GoogleIMEClient.kt index 4a23bc7..0689ad4 100644 --- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/converter/GoogleIMEClient.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/GoogleIMEClient.kt @@ -1,4 +1,4 @@ -package dev.m1sk9.lunaticChat.engine.converter +package dev.m1sk9.lunaticChat.paper.converter import io.ktor.client.HttpClient import io.ktor.client.call.body diff --git a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/converter/KanaConverter.kt b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/KanaConverter.kt index bdbdf69..544eea7 100644 --- a/engine/src/main/kotlin/dev/m1sk9/lunaticChat/engine/converter/KanaConverter.kt +++ b/platform-paper/src/main/kotlin/dev/m1sk9/lunaticChat/paper/converter/KanaConverter.kt @@ -1,4 +1,4 @@ -package dev.m1sk9.lunaticChat.engine.converter +package dev.m1sk9.lunaticChat.paper.converter /** * Converts romanji text to hiragana using Trie data structure. 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 530d3dc..100aeb3 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 @@ -1,7 +1,5 @@ package dev.m1sk9.lunaticChat.paper.converter -import dev.m1sk9.lunaticChat.engine.converter.GoogleIMEClient -import dev.m1sk9.lunaticChat.engine.converter.KanaConverter import kotlinx.coroutines.CancellationException import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll diff --git a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/CacheDataTest.kt b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/CacheDataTest.kt new file mode 100644 index 0000000..f44dd10 --- /dev/null +++ b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/CacheDataTest.kt @@ -0,0 +1,31 @@ +package dev.m1sk9.lunaticChat.paper.converter + +import kotlinx.serialization.json.Json +import kotlin.test.Test +import kotlin.test.assertEquals + +class CacheDataTest { + private val json = Json + + @Test + fun `CacheData should store version and entries`() { + val data = CacheData(version = "1.0", entries = mapOf("hello" to "こんにちは")) + assertEquals("1.0", data.version) + assertEquals("こんにちは", data.entries["hello"]) + } + + @Test + fun `CacheData serialization round-trip should preserve all fields`() { + val original = + CacheData( + version = "2.0", + entries = mapOf("hello" to "こんにちは", "world" to "世界"), + ) + + val serialized = json.encodeToString(CacheData.serializer(), original) + val deserialized = json.decodeFromString(CacheData.serializer(), serialized) + + assertEquals(original.version, deserialized.version) + assertEquals(original.entries, deserialized.entries) + } +} diff --git a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/converter/KanaConverterTest.kt b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/KanaConverterTest.kt index 5ba7f0e..798772d 100644 --- a/engine/src/test/kotlin/dev/m1sk9/lunaticChat/engine/converter/KanaConverterTest.kt +++ b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/KanaConverterTest.kt @@ -1,4 +1,4 @@ -package dev.m1sk9.lunaticChat.engine.converter +package dev.m1sk9.lunaticChat.paper.converter import kotlin.test.Test import kotlin.test.assertEquals diff --git a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverterTest.kt b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverterTest.kt index eba2c54..c8fe680 100644 --- a/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverterTest.kt +++ b/platform-paper/src/test/kotlin/dev/m1sk9/lunaticChat/paper/converter/RomanjiConverterTest.kt @@ -1,7 +1,7 @@ package dev.m1sk9.lunaticChat.paper.converter -import dev.m1sk9.lunaticChat.engine.converter.GoogleIMEClient import dev.m1sk9.lunaticChat.paper.TestUtils +import dev.m1sk9.lunaticChat.paper.converter.GoogleIMEClient import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every |
