diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-01-24 04:40:54 +0900 |
|---|---|---|
| committer | Sho Sakuma <me@m1sk9.dev> | 2026-01-24 04:40:54 +0900 |
| commit | 3b14d0ea23da82d3936ca025bec51504f8255948 (patch) | |
| tree | 084bd7c95f333763a5cdb6308ad15c6b560057c0 | |
| parent | ac80dc3ce71f9be0397442208cac80f6069eea03 (diff) | |
| download | LunaticChat-3b14d0ea23da82d3936ca025bec51504f8255948.tar.gz LunaticChat-3b14d0ea23da82d3936ca025bec51504f8255948.tar.bz2 LunaticChat-3b14d0ea23da82d3936ca025bec51504f8255948.zip | |
docs: Add beta documents
28 files changed, 473 insertions, 400 deletions
diff --git a/.github/renovate.json b/.github/renovate.json index fc2b67c..55f60b6 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -2,5 +2,8 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "github>m1sk9/renovate-config" + ], + "addLabels": [ + "Type: dependencies" ] } diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index ab2374e..59260b5 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -96,11 +96,12 @@ jobs: TAG_NAME=${GITHUB_REF#refs/tags/} VERSION=${{ needs.validate.outputs.version }} JAR_NAME=${{ needs.validate.outputs.jar_name }} + VERSION_ANCHOR=$(echo "$VERSION" | tr -d '.') gh release create "$TAG_NAME" \ "$JAR_NAME" \ --title "$TAG_NAME" \ - --notes "Please refer to [changelog](./CHANGELOG.md) for update details." + --notes "Please refer to [changelog](./CHANGELOG.md#v${VERSION_ANCHOR}) for update details." - name: Publish to Modrinth uses: cloudnode-pro/modrinth-publish@0a5268ad092d4727bb6424326746fa2fe88761ff # v2 @@ -109,9 +110,9 @@ jobs: name: LunaticChat v${{ needs.validate.outputs.version }} project: ${{ secrets.MODRINTH_PROJECT_ID }} version: ${{ needs.validate.outputs.version }} - channel: alpha + channel: beta changelog: | - Please refer to [changelog](https://github.com/m1sk9/LunaticChat/blob/main/CHANGELOG.md) for update details. + Please refer to [changelog](https://github.com/m1sk9/LunaticChat/blob/main/CHANGELOG.md#v${{ replace(needs.validate.outputs.version, '.', '') }}) for update details. loaders: paper game-versions: "1.21.x" files: ${{ needs.validate.outputs.jar_name }} diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index fd482ab..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,308 +0,0 @@ -# LunaticChat - Design Document - -## Project Overview - -LunaticChat is a Minecraft chat plugin providing 1on1 messaging, quick reply functionality, and romaji-to-Japanese conversion features. - -## Technology Stack - -- **Language**: Kotlin -- **Target Platforms**: - - Paper (Minecraft 1.21.x+) - - Velocity (planned for future) -- **Build Tool**: Gradle (multi-project setup) - -## Core Principles - -1. **Always support the latest version** while maintaining backward compatibility (e.g., 1.21.x) -2. **Maintainability**: Design for extensibility and easy maintenance -3. **Use Paper's LifecycleEventManager** for command registration -4. **Chat logs must be compatible** with CoreProtect and similar logging plugins - -## Project Structure - -``` -LunaticChat/ -├── engine/ # Core logic (shared code, chat processing, romaji conversion) -├── platform-paper/ # Paper plugin implementation -├── platform-velocity/ # Velocity plugin implementation -└── docker/ # Docker configuration -``` - -### Why Separate JARs? - -- Paper and Velocity use different APIs -- Avoids classloader conflicts -- Clear deployment boundaries -- Gradle multi-project keeps build unified - -## Features (v0.1.0) - -### 1. Direct Messaging System - -**Commands**: -- `/tell` (aliases: `/t`, `/msg`, `/m`, `/w`, `/whisper`) -- `/reply` (alias: `/r`) - -**Requirements**: -- Use Paper's `LifecycleEventManager` for command registration -- Messages must appear in CoreProtect logs -- Use `io.papermc.paper.event.player.AsyncChatEvent` (not deprecated `AsyncPlayerChatEvent`) -- Don't cancel events; modify messages instead - -### 2. Quick Reply Functionality - -- `/reply` sends message to last person who messaged you -- Maintain conversation context per player - -### 3. Romaji to Japanese Conversion - -**Trigger**: Player's personal setting via `/jp on` or `/jp off` - -**Conversion Timing**: When player sends message (`AsyncChatEvent` fires) - -**Architecture**: Simple cache + Google IME API approach - -``` -┌─────────────────────────────────────────┐ -│ Player Input (Romanji) │ -└──────────────────┬──────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────┐ -│ Check Memory Cache │ -├─────────────────────────────────────────┤ -│ Hit: Return cached result (< 1ms) │ -│ Miss: Call Google IME API │ -│ → Save to cache │ -│ → Queue async disk save │ -└──────────────────┬──────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────┐ -│ Converted Text (Japanese) │ -└─────────────────────────────────────────┘ -``` - -**Key Components**: - -1. **RomanjiConverter** - Main conversion coordinator -2. **ConversionCache** - Two-tier caching (memory + disk) - - Memory: ConcurrentHashMap for instant access - - Disk: JSON file loaded on startup, saved periodically -3. **GoogleIMEClient** - HTTP client for Google Transliterate API - -**Cache Strategy**: -- Load cache from disk on plugin enable (once) -- All conversions check memory cache first -- Cache misses trigger API call and store result -- Periodic async saves (every 5 minutes) + final save on disable -- LRU eviction when max entries (500) exceeded - -**Performance**: -- Cached conversions: < 1ms -- API calls: < 3000ms (first time only per phrase) -- Disk I/O: Async, no gameplay impact -- Memory footprint: ~25KB for 500 entries -- Startup load time: < 10ms - -**Example Implementation**: -```kotlin -class RomanjiConverter( - private val cache: ConversionCache, - private val apiClient: GoogleIMEClient -) { - suspend fun convert(input: String): String { - // Check cache first - cache.get(input)?.let { return it } - - // Call Google IME API - val result = apiClient.convert(input) - - // Store in cache - cache.put(input, result) - - return result - } -} -``` - -**Cache Implementation**: -```kotlin -class ConversionCache( - private val cacheFile: Path, - private val maxEntries: Int = 500 -) { - private val memoryCache = ConcurrentHashMap<String, String>() - private val saveQueue = AtomicBoolean(false) - - fun loadFromDisk() { - if (!cacheFile.exists()) return - val data = Json.decodeFromString<CacheData>(cacheFile.readText()) - memoryCache.putAll(data.entries) - } - - fun get(key: String): String? = memoryCache[key] - - fun put(key: String, value: String) { - if (memoryCache.size >= maxEntries) evictOldest() - memoryCache[key] = value - queueDiskSave() - } - - fun saveToDisk() { - val data = CacheData(version = "1.0", entries = memoryCache.toMap()) - cacheFile.writeText(Json.encodeToString(data)) - } -} -``` - -## Data Persistence - -**No SQL databases** - Use JSON file storage instead - -**Storage Strategy**: -- Player settings stored as JSON files -- UUID-based file naming -- In-memory cache with periodic saves -- Use kotlinx.serialization for JSON handling - -**Data Model**: -```kotlin -data class PlayerChatSettings( - val uuid: UUID, - val japaneseConversionEnabled: Boolean = false -) -``` - -**Cache Data Model**: -```kotlin -@Serializable -data class CacheData( - val version: String, - val entries: Map<String, String> -) -``` - -## Configuration - -```yaml -features: - japaneseConversion: - enabled: true - cache: - maxEntries: 500 - saveIntervalSeconds: 300 # 5 minutes - cacheFile: "conversion-cache.json" - api: - timeout: 3000 # milliseconds - retryCount: 2 -``` - -## Future Features (Post v0.1.0) - -### Cross-Server Chat (Velocity) - -- Broadcast normal messages across all servers -- Enable `/tell` for 1on1 chat across servers - -### Channel Chat System - -- Players can create custom channels -- Chat within specific channels -- Channel management commands - -## Implementation Order - -1. **Setup multi-project structure** (Paper/Velocity extensibility) -2. **Implement JSON-based data persistence** -3. **Implement `/tell` and `/reply` commands** -4. **Implement romaji conversion system** - -## Event Handling - -```kotlin -@EventHandler(priority = EventPriority.HIGHEST) -fun onChat(event: AsyncChatEvent) { - val player = event.player - val settings = settingsManager.get(player.uniqueId) - - if (settings.japaneseConversionEnabled) { - val plainText = (event.message() as? TextComponent)?.content() ?: return - val converted = runBlocking { romajiConverter.convert(plainText) } - event.message(Component.text(converted)) - } -} -``` - -## Plugin Lifecycle - -```kotlin -class LunaticChat : JavaPlugin() { - private lateinit var romanjiConverter: RomanjiConverter - - override fun onEnable() { - // Load cache on startup - val cache = ConversionCache( - cacheFile = dataFolder.resolve("conversion-cache.json").toPath(), - maxEntries = config.getInt("features.japaneseConversion.cache.maxEntries", 500) - ) - cache.loadFromDisk() - - // Initialize converter - val apiClient = GoogleIMEClient( - timeout = config.getInt("features.japaneseConversion.api.timeout", 3000).milliseconds - ) - romanjiConverter = RomanjiConverter(cache, apiClient) - - // Periodic save task - val saveInterval = config.getLong( - "features.japaneseConversion.cache.saveIntervalSeconds", 300 - ) * 20L // Convert seconds to ticks - - server.scheduler.runTaskTimerAsynchronously(this, { - cache.saveToDisk() - }, saveInterval, saveInterval) - - logger.info("Japanese conversion system initialized") - } - - override fun onDisable() { - // Final save on shutdown - cache.saveToDisk() - logger.info("Cache saved on shutdown") - } -} -``` - -## Notes - -- **AsyncChatEvent** uses Paper's Component API - handle accordingly -- Command aliases must be properly registered -- Settings file location: `plugins/LunaticChat/settings/` -- Cache settings in memory to avoid frequent file I/O -- Cache file location: `plugins/LunaticChat/conversion-cache.json` -- All disk I/O is async to prevent blocking game thread - -## Performance Considerations - -### Memory Usage -- 500 entries × ~50 bytes average = ~25KB -- Parse-time memory consumption: < 100KB -- Negligible impact on Minecraft server - -### Disk I/O -- **Startup**: Once (< 10ms for 500 entries) -- **Runtime**: Periodic saves every 5 minutes (async) -- **Shutdown**: Once (final save) - -### Network -- No network calls after cache hit -- Each unique phrase calls Google API only once - -## Development Environment - -- Shell: Fish -- Java: 21+ -- Gradle: 9+ -- Kotlin: 2.3.0+ @@ -1,5 +1,11 @@ # LunaticChat +[](https://github.com/m1sk9/LunaticChat/actions/workflows/ci.yaml) +[](https://github.com/m1sk9/LunaticChat/actions/workflows/release.yaml) +[](https://github.com/m1sk9/LunaticChat/actions/workflows/dokka.yaml) +[](https://github.com/m1sk9/LunaticChat/blob/main/LICENSE) + + Next-generation channel chat plugin for Paper/Velocity. - [Documentation](https://lc.m1sk9.dev) @@ -24,17 +30,9 @@ See the [Documentation](https://lc.m1sk9.dev/guide/getting-started). - Quick Reply Functionality (`/reply`) - Romaji to Japanese Conversion - CoreProtect-compatible chat logging -- Multi-platform support (Paper, Velocity) +- Multi-platform support (Paper, Velocity) (coming soon) - Spigot? No problem, just use Paper! -- Channel Chat System - -## Todo - -- [x] 1on1 Direct Messaging System -- [x] Quick Reply Functionality -- [x] Romaji to Japanese Conversion -- [ ] Velocity Support -- [ ] Channel Chat System +- Channel Chat System (coming soon) ## License diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 6a0797b..640c21e 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -21,20 +21,63 @@ export default defineConfig({ link: '/guide/getting-started', }, { - text: '設定', - link: '/guide/configuration', + text: 'LunaticChat について', + link: '/guide/about', }, { - text: 'パーミッション', - link: '/guide/permissions', + text: 'サーバー管理者向け', + items: [ + { + text: 'キャッシュシステム', + link: '/guide/admin/cache', + }, + { + text: '設定', + link: '/guide/admin/configuration', + }, + { + text: 'Velocity 連携', + link: '/guide/admin/velocity', + }, + ], + }, + { + text: 'プレイヤー向け', + items: [ + { + text: 'チャンネルチャット', + link: '/guide/player/channel-chat', + }, + { + text: 'ダイレクトメッセージ', + link: '/guide/player/direct-message', + }, + { + text: 'ローマ字変換', + link: '/guide/player/japanese-romanization', + }, + ], }, { - text: 'ローマ字変換', - link: '/guide/japanese-romanization', + text: 'パッチノート', + items: [ + { + text: 'プラグイン', + link: '/guide/patch-notes/plugin', + }, + { + text: 'キャッシュファイル', + link: '/guide/patch-notes/cache-file', + }, + ], }, ], '/reference/': [ { + text: 'パーミッション', + link: '/reference/permissions', + }, + { text: 'コマンド', items: [ { @@ -53,6 +96,19 @@ export default defineConfig({ text: '/notice', link: '/reference/commands/notice', }, + { + text: '/lc', + items: [ + { + text: '/lc settings', + link: '/reference/commands/lc/settings', + }, + { + text: '/lc status', + link: '/reference/commands/lc/status', + }, + ], + }, ], }, ], diff --git a/docs/src/guide/about.md b/docs/src/guide/about.md new file mode 100644 index 0000000..41df712 --- /dev/null +++ b/docs/src/guide/about.md @@ -0,0 +1,60 @@ +# LunaticChat について + +LunaticChat は Minecraft サーバソフトウェアである Paper / Velocity 向けのチャットプラグインです. + +2013年,[ucchyocean](https://github.com/ucchyocean) 氏が公開した [LunaChat](https://github.com/ucchyocean/LunaChat) の後継,そして最新版で動くように一から書き直したプラグインとして開発しています. + +現在 LunaChat は開発が終了しており,最新の Minecraft バージョンには対応していません.多くのサーバー管理者が LunaChat を Fork していますが, LunaticChat はその代替として,LunaChat の機能を引き継ぎつつ,最新の Minecraft バージョンで動作するよう設計されています. + +## 主な特徴 + +- **軽量で高速**: LunaticChat は高いパフォーマンスを維持しつつ,サーバーへの負荷を最小限に抑えるよう設計されています. +- **1on1 ダイレクトメッセージ機能**: /tell や /msg コマンドで,1対1のチャットが可能です. +- **クイック返信**: /reply で,直前にメッセージを送信した相手に素早く返信可能です. +- **かな・ローマ字変換**: ローマ字で入力したメッセージを,自動的に日本語に変換します. +- **CoreProtect への対応**: LunaticChat のチャットログは CoreProtect と互換性があります. +- **キャッシュによる高速動作**: ローマ字から日本語の変換はキャッシュを使用し,従来の LunaChat よりも高速に動作します. +- **最新版の対応**: 他プラグインとの依存を減らし,常に最新の Minecraft バージョンに対応します. + +## 比較 + +| | LunaticChat | LunaChat | +| ----- |-------------|----------------------------------------| +| 開発状況 | 継続的に開発中 | 開発終了 | +| 対応プラットフォーム | Paper / Velocity | Bukkit / Spigot / BungeeCord | +| サポートバージョン | 1.21.x ~ | 1.16.x まで | +| 使用言語 | Kotlin | Java | +| 依存プラグイン | なし | EssentialsX など | +| キャッシュ | あり | なし | +| ドキュメント | あり | なし | +| ライセンス | GNU General Public License v3.0 | GNU Lesser General Public License v3.0 | + +## FAQ + +### LunaticChat は無料で使えますか? + +オープンソースソフトウェアとして,LunaticChat は無料で使用,修正,配布できます. + +### LunaticChat はどの Minecraft バージョンに対応していますか? + +LunaticChat は Minecraft 1.21.x 以降のバージョンに対応しています. + +### LunaticChat は他のチャットプラグインと併用できますか? + +LunaticChat は他のチャットプラグインと併用できますが,競合を避けるために,チャット関連の機能が重複しないように注意してください. + +### LunaticChat のサポートはどこで受けられますか? + +LunaticChat のサポートは,[公式の GitHub Discussion](https://github.com/m1sk9/LunaticChat/discussions) で受けられます. + +### LunaticChat のソースコードはどこで入手できますか? + +LunaticChat のソースコードは,[GitHub](https://github.com/m1sk9/LunaticChat) で公開されています. + +### Spigot / BungeeCord 版の LunaticChat はありますか? + +ありません.対応する予定もありません.Paper / Velocity でご利用ください. + +### LunaticChat はどのようなライセンスで配布されていますか? + +LunaticChat は GNU General Public License v3.0 (GPLv3) の下で配布されています. diff --git a/docs/src/guide/admin/cache.md b/docs/src/guide/admin/cache.md new file mode 100644 index 0000000..ec00455 --- /dev/null +++ b/docs/src/guide/admin/cache.md @@ -0,0 +1,41 @@ +# キャッシュシステム + +LunaticChat では,かな・ローマ字変換時のフレーズを自動でメモリ・ディスクにキャッシュするシステムが搭載されています. + +かな・ローマ字変換に関する情報は [こちら](../player/japanese-romanization.md) をご覧ください. + +## メモリキャッシュ + +LunaticChat は変換済みのフレーズをメモリ上にキャッシュし,再度同じフレーズが要求された際に高速に応答できるようにしています. + +このキャッシュは一時的であり,サーバー再起動時や設定した秒数毎にディスクキャッシュへ保存されます. + +## ディスクキャッシュ + +LunaticChat はメモリキャッシュの内容を定期的にディスクに保存します. これにより,サーバー再起動後もキャッシュ内容を保持できるようになっています. + +ディスクキャッシュとして使用されるファイルは [設定で変更できます](../admin/configuration.md#cachefilepath). + +## キャッシュの解放 + +メモリキャッシュは,ディスクにキャッシュしたのち自動的に JVM のガベージコレクションにより解放されます. + +ディスクキャッシュは,手動でファイルを削除することで解放できます. 再起動時に LunaticChat は再度キャッシュファイルを作成します. + +::: warning パージ機能について + +LunaticChat では,キャッシュのパージ 機能は実装されていません. + +これはプレイヤー側にホストのファイルシステムを操作させることがセキュリティ上好ましくないためです. + +::: + +## キャッシュバージョン + +ディスクキャッシュに使用されるファイルには `version` フィールドが含まれており,LunaticChat のバージョンアップに伴うキャッシュフォーマットの変更に対応しています. + +バージョンが不一致の場合,LunaticChat はキャッシュファイルを **古い形式のキャッシュ** として認識し,内容を無視して新しい形式で再作成します. + +```json +{"version":"1","entries":{}} +``` diff --git a/docs/src/guide/configuration.md b/docs/src/guide/admin/configuration.md index 3b7bd1e..bf9b9e6 100644 --- a/docs/src/guide/configuration.md +++ b/docs/src/guide/admin/configuration.md @@ -110,9 +110,9 @@ LunaticChat のプレイヤー向けメッセージの言語を指定します - Type: `boolean` - Default: `true` -LunaticChat の [`/reply`](../reference/commands/reply.md) コマンドによるクイックリプライ機能を有効にします. +LunaticChat の [`/reply`](../../reference/commands/reply.md) コマンドによるクイックリプライ機能を有効にします. -無効にすると [`/reply`](../reference/commands/reply.md) コマンドは Paper に登録されず,使用できなくなります. +無効にすると [`/reply`](../../reference/commands/reply.md) コマンドは Paper に登録されず,使用できなくなります. ### `features.japaneseConversion.enabled` @@ -177,4 +177,4 @@ LunaticChat の [`/reply`](../reference/commands/reply.md) コマンドによる - Type: `string` - Default: `§7[§e{sender} §7>> §e{recipient}§7] §f{message}` -ダイレクトメッセージ( [`/tell`](../reference/commands/tell.md) や [`/reply`](../reference/commands/reply.md) コマンド)で送信されるメッセージのフォーマットを指定します. +ダイレクトメッセージ( [`/tell`](../../reference/commands/tell.md) や [`/reply`](../../reference/commands/reply.md) コマンド)で送信されるメッセージのフォーマットを指定します. diff --git a/docs/src/guide/admin/velocity.md b/docs/src/guide/admin/velocity.md new file mode 100644 index 0000000..bc7f8d5 --- /dev/null +++ b/docs/src/guide/admin/velocity.md @@ -0,0 +1,13 @@ +# Velocity 連携 (クロスサーバーチャット) <Badge type="tip" text="v1.0.0" /> <Badge type="warning" text="試験的" /> + +Velocity を使用して,プロキシサーバーを繋いだ Paper サーバー間のクロスサーバーチャットを行う機能です. + +::: warning 試験的機能 + +この機能は現在,試験的に実装されており,今後のアップデートで仕様が変更される可能性があります. + +規模が大きい機能なので,一気に実装はせず段階的な展開を予定しています. + +詳しい実装計画は [ロードマップ (m1sk9/LunaticChat #54)](https://github.com/m1sk9/LunaticChat/issues/54) をご覧ください. + +::: diff --git a/docs/src/guide/getting-started.md b/docs/src/guide/getting-started.md index 85fbf31..08fe38a 100644 --- a/docs/src/guide/getting-started.md +++ b/docs/src/guide/getting-started.md @@ -2,7 +2,7 @@ ## インストール -プラグインをインストールします.プラグインは以下から入手できます: +LunaticChat をインストールします.LunaticChat は以下から入手できます: - [GitHub](https://github.com/m1sk9/LunaticChat/releases) - [Modrinth](https://modrinth.com/project/lunaticchat) @@ -17,7 +17,7 @@ LunaticChat を起動すると以下のファイルが作成されます. - `plugins/LunaticChat/player-settings.yaml`:ユーザーごとの設定ファイル - `plugins/LunaticChat/conversion_cache.json`: ローマ字変換のキャッシュファイル -設定ファイル `config.yml` を開き,必要に応じて設定を変更します.設定項目の詳細については,[設定ガイド](./configuration.md)を参照してください. +設定ファイル `config.yml` を開き,必要に応じて設定を変更します.設定項目の詳細については,[設定ガイド](admin/configuration.md)を参照してください. ## パーミッション @@ -25,5 +25,5 @@ LunaticChat のパーミッションを LuckPerms などのパーミッション 基本的なパーミッションは Paper や Velocity のデフォルトパーミッションシステム ( `OP` / `non OP` ) でも設定できますが,より詳細な制御を行う場合は LuckPerms の使用を推奨します. -- パーミッションノードの詳細については [パーミッションガイド](./permissions.md)を参照してください. +- パーミッションノードの詳細については [パーミッションガイド](../reference/permissions.md)を参照してください. - コマンドの各機能に対応するパーミッションノードは,[コマンドリファレンス](../reference/index.md)を参照してください. diff --git a/docs/src/guide/patch-notes/cache-file.md b/docs/src/guide/patch-notes/cache-file.md new file mode 100644 index 0000000..654dc77 --- /dev/null +++ b/docs/src/guide/patch-notes/cache-file.md @@ -0,0 +1,5 @@ +# パッチノート: キャッシュファイル + +| キャッシュバージョン | サポートバージョン | +|------------|-----------| +| v1 | v0.1.0 ~ | diff --git a/docs/src/guide/patch-notes/plugin.md b/docs/src/guide/patch-notes/plugin.md new file mode 100644 index 0000000..9fc1ad2 --- /dev/null +++ b/docs/src/guide/patch-notes/plugin.md @@ -0,0 +1,9 @@ +# パッチノート: プラグイン + +プラグインのパッチノートはここでは記載していません.[GitHubのリリースページ](https://github.com/m1sk9/LunaticChat/releases) や [ディスカッションページのリリースノートカテゴリー](https://github.com/m1sk9/LunaticChat/discussions/categories/announcements) をご覧ください. + +---- + +| メジャーバージョン | コードネーム | 開発期間 | サポートバージョン | +|-----------|---------|-----------|-----------| +| v0 | lunatic | 2026/01 ~ | 1.21.x | diff --git a/docs/src/guide/permissions.md b/docs/src/guide/permissions.md deleted file mode 100644 index 3042e6f..0000000 --- a/docs/src/guide/permissions.md +++ /dev/null @@ -1,47 +0,0 @@ -# パーミッション - -LuckPerms を使用した設定方法に関する詳細は [LuckPerms Wiki](https://luckperms.net/wiki/Home) を参照してください. - -## `lunaticchat.*` - -### `lunaticchat.spy` - -- Default: `OP` - -[`/tell`](../reference/commands/tell.md) / [`/reply`](../reference/commands/reply.md) コマンドでのやり取りを可視化します. - -この権限を持つプレイヤーは他プレイヤーの [`/tell`](../reference/commands/tell.md) / [`/reply`](../reference/commands/reply.md) でのメッセージがブロードキャストされます. - -### `lunaticchat.noticeUpdate` - -- Default: `OP` - -LunaticChat のアップデート通知を受け取ります. - -[受け取るには `checkForUpdates` を有効にしておく](../guide/configuration.md#checkforupdates) 必要があります. - -## `lunaticchat.command.*` - -### `lunaticchat.command.tell` - -- Default: `non OP` - -[`/tell`](../reference/commands/tell.md) コマンドの使用を切り替えます. - -### `lunaticchat.command.reply` - -- Default: `non OP` - -[`/reply`](../reference/commands/reply.md) コマンドの使用を切り替えます. - -### `lunaticchat.command.jp` - -- Default: `non OP` - -[`/jp`](../reference/commands/jp.md) コマンドの使用を切り替えます. - -### `lunaticchat.command.notice` - -- Default: `non OP` - -[`/notice`](../reference/commands/notice.md) コマンドの使用を切り替えます. diff --git a/docs/src/guide/player/channel-chat.md b/docs/src/guide/player/channel-chat.md new file mode 100644 index 0000000..ce5a43e --- /dev/null +++ b/docs/src/guide/player/channel-chat.md @@ -0,0 +1,13 @@ +# チャンネルチャット <Badge type="tip" text="v0.6.0" /> <Badge type="warning" text="試験的" /> + +特定のプレイヤー間で,チャットを共有できる機能です. + +::: warning 試験的機能 + +この機能は現在,試験的に実装されており,今後のアップデートで仕様が変更される可能性があります. + +規模が大きい機能なので,一気に実装はせず段階的な展開を予定しています. + +詳しい実装計画は [ロードマップ (m1sk9/LunaticChat #54)](https://github.com/m1sk9/LunaticChat/issues/54) をご覧ください. + +::: diff --git a/docs/src/guide/player/direct-message.md b/docs/src/guide/player/direct-message.md new file mode 100644 index 0000000..78de1c3 --- /dev/null +++ b/docs/src/guide/player/direct-message.md @@ -0,0 +1,65 @@ +# ダイレクトメッセージ <Badge type="tip" text="v0.1.0" /> + +特定のプレイヤーに対してのみメッセージを送信するダイレクトメッセージ機能です. + +## メッセージを送信する + +メッセージを送信するには [`/tell`](../../reference/commands/tell.md) コマンドを使用します. + +オンラインプレイヤーに対してのみメッセージを送信できます.オフラインプレイヤーには送信できません. + +``` +/tell <player> <message> +``` + +::: tip 補完機能 + +LunaticChat はチャット入力時にプレイヤー名の補完をサポートしています. + +例えば,`/tell Al` と入力した場合,`Al` で始まるオンラインプレイヤー名が候補として表示されます. + +::: + +::: warning GeyserMC 環境での動作 + +GeyserMC 環境を用いて Minecraft Bedrock Edition から接続しているプレイヤーに機能を提供している場合の動作は保証していません. + +LunaticChat は Minecraft Java Edition / Paper のチャットシステムを前提として設計されているため,GeyserMC 経由での動作に問題が発生する可能性があります.対応の予定はありません. + +::: + +## クイックリプライ機能 <Badge type="tip" text="v0.1.0" /> + +LunaticChat では,直前にダイレクトメッセージを送信した相手に対して素早く返信できるクイックリプライ機能が提供されています. + +クイックリプライを使用するには [`/reply`](../../reference/commands/reply.md) コマンドを使用します. + +``` +/reply <message> +``` + +::: warning このコマンドが使用できない場合 + +このコマンドが無効化されている可能性があります (この機能は設定で ON/OFF できるため) + +サーバーの管理者に連絡してください. + +::: + +## 通知設定 <Badge type="tip" text="v0.4.0" /> + +v0.4.0 以降,ダイレクトメッセージの通知設定を変更できるようになりました. + +ダイレクトメッセージを受信・送信時に通知音がなるようになります. + +通知設定を変更するには [`/lc settings`](../../reference/commands/lc/settings.md) コマンドを使用します. + +::: tip クライアントでの音量設定 + +この通知音はクライアント上の **プレイヤー** カテゴリーの音量設定に依存します. + +LunaticChat の通知音が聞こえない場合は,クライアントの音量設定を確認してください. + + + +::: diff --git a/docs/src/guide/japanese-romanization.md b/docs/src/guide/player/japanese-romanization.md index 3e9d702..3b62e51 100644 --- a/docs/src/guide/japanese-romanization.md +++ b/docs/src/guide/player/japanese-romanization.md @@ -1,17 +1,12 @@ -# ローマ字変換 +# ローマ字変換 <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper" /> LunaticChat では、日本語のテキストをローマ字に変換する機能が提供されています. -## 設定を有効化する +## 有効化・無効化 -ローマ字変換機能を有効にするには `features.japaneseConversion.enabled` の値を `true` にする必要があります. +ローマ字変換機能はデフォルトで有効化されています. -```yaml{4} -features: - # ... - japaneseConversion: - enabled: true -``` +[`/lc settings`](../../reference/commands/lc/settings.md) コマンドを使用して,ローマ字変換の設定を切り替えることができます. ## 変換の仕組み @@ -54,8 +49,53 @@ LunaticChat はプレイヤーからのテキストを以下の手順で変換 ::: tip ファイルへの保存 -メモリキャッシュの内容は負荷にならないよう,設定した秒毎にファイルキャッシュへ自動でセーブします. +メモリキャッシュの内容は負荷にならないよう,設定した秒毎・サーバ停止後にファイルキャッシュへ自動でセーブします. ::: -## +キャッシュファイルに関する情報は [こちら](../admin/cache.md) をご覧ください. + +## 改善されたキャッシュ戦略 <Badge type="tip" text="v0.5.0" /> + +v0.5.0 以降,LunaticChat はローマ字変換のキャッシュ戦略を改善しました. + +プレイヤーのチャットを単語ごとにキャッシュするようになり,より効率的に変換を行えるようになりました. + +例えば,以下のような長文のチャットがあるとします. + +> konnichiwa minna ohayou gozaimasu kyou wa totemo ii tenki desu ne bokutachi wa issho ni asobi ni ikimashou kono atarashii game wo tameshite mitai to omoimasu sore wa totemo omoshiroi to kiite imasu arigatou gozaimasu mata ne + +LunaticChat はこの文章を一度に変換するのではなく,単語ごとに分割してキャッシュを行います. + +これにより,例えば「konnichiwa」や「minna」などの単語が既にキャッシュされている場合,それらの単語は再度変換する必要がなくなり,変換速度が大幅に向上します. + +### 1回目の変換 + +``` +入力: "konnichiwa minna ohayou gozaimasu" + +konnichiwa → API → こんにちは (キャッシュ保存) +minna → API → みんな (キャッシュ保存) +ohayou → API → おはよう (キャッシュ保存) +gozaimasu → API → ございます (キャッシュ保存) + +結果: "こんにちは みんな おはよう ございます" +APIコール: 4回 +``` + +### 2回目の変換 + +``` +入力: "ohayou gozaimasu kyou wa ii tenki desu" + +ohayou → キャッシュヒット → おはよう +gozaimasu → キャッシュヒット → ございます +kyou → API → 今日 (キャッシュ保存) +wa → API → は (キャッシュ保存) +ii → API → いい (キャッシュ保存) +tenki → API → 天気 (キャッシュ保存) +desu → API → です (キャッシュ保存) + +結果: "おはよう ございます 今日 は いい 天気 です" +APIコール: 5回(キャッシュヒット: 2回) +``` diff --git a/docs/src/index.md b/docs/src/index.md index e5da462..6fe6743 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -4,24 +4,48 @@ layout: home hero: name: "LunaticChat" - tagline: Next-generation channel chat plugin + tagline: Next-generation chat plugin for Paper/Velocity. actions: - theme: brand text: はじめる link: /guide/getting-started - theme: brand + text: LunaticChat について + link: /guide/about + - theme: brand text: リファレンス link: /reference - theme: alt text: GitHub link: https://github.com/m1sk9/LunaticChat + image: + src: static/icon.png + alt: LunaticChat Logo features: + - title: 1on1 ダイレクトメッセージ機能 + details: /tell や /msg コマンドで,1対1のチャットが可能 + icon: ✉️ + - title: クイック返信 + details: /reply で,直前にメッセージを送信した相手に素早く返信可能 + icon: 💌 + - title: かな・ローマ字変換 + details: ローマ字で入力したメッセージを,自動的に日本語に変換 + icon: 🌍 + - title: CoreProtect への対応 + details: LunaticChat のチャットログは CoreProtect と互換性があります + icon: 🗒️ + - title: チャンネルチャット機能 (実装予定) + details: チャットチャンネルを作成・管理し,特定のプレイヤー間でのプライベートメッセージを送信可能 + icon: ☎️ + - title: マルチプラットフォーム対応 (実装予定) + details: Paper と Velocity のマルチプラットフォームに対応し,サーバ間チャットを実現します + icon: 🚀 - title: キャッシュによる高速動作 details: ローマ字から日本語の変換はキャッシュを使用し,従来の LunaChat よりも高速に動作します - - title: マルチプラットフォーム対応 (予定) - details: Paper と Velocity のマルチプラットフォームに対応し,サーバ間チャットを実現します + icon: 🎈 - title: 最新版の対応 details: 他プラグインとの依存を減らし,常に最新の Minecraft バージョンに対応します + icon: ⛏️️ --- diff --git a/docs/src/reference/commands/jp.md b/docs/src/reference/commands/jp.md index 8f77b12..e850400 100644 --- a/docs/src/reference/commands/jp.md +++ b/docs/src/reference/commands/jp.md @@ -1,6 +1,12 @@ -# /jp <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper / Velocity" /> +# /jp <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper" /> -### `/jp [on | off]` +### `/jp [on | off]` <Badge type="danger" text="非推奨: v1.0.0 で削除予定" /> + +::: danger 非推奨 + +このコマンドは v0.5.0 で非推奨となりました.代わりに [`/lc settings`](lc/settings.md) コマンドを使用してください. + +::: | パーミッション | |--------------------------| diff --git a/docs/src/reference/commands/lc/settings.md b/docs/src/reference/commands/lc/settings.md new file mode 100644 index 0000000..86e0a9d --- /dev/null +++ b/docs/src/reference/commands/lc/settings.md @@ -0,0 +1,18 @@ +# /lc settings <Badge type="tip" text="v0.5.0" /> <Badge type="tip" text="Paper" /> + +### `/lc settings <key> [value]` + +| パーミッション | +|--------------------------------| +| `lunaticchat.command.settings` | + +LunaticChat のプレイヤー設定を管理します.値を指定しなかった場合は設定値が表示されます. + +この設定は UUID で保存されるため, MCID を切り替えても設定が消えることはありません. + +#### 利用可能なキー + +| キー | 説明 | デフォルト値 | +|----------|----------------------------------------------------------|--------| +| `jp` | ローマ字変換の有効化・無効化を切り替えます. | `true` | +| `notice` | `/tell` や `/reply` でダイレクトメッセージを受信した際に通知を受け取るかどうかを切り替えます. | `true` | diff --git a/docs/src/reference/commands/lc/status.md b/docs/src/reference/commands/lc/status.md new file mode 100644 index 0000000..1b9ddcb --- /dev/null +++ b/docs/src/reference/commands/lc/status.md @@ -0,0 +1,9 @@ +# /lc status <Badge type="tip" text="v0.5.0" /> <Badge type="tip" text="Paper" /> + +### `/lc status` + +| パーミッション | +|------------------------------| +| `lunaticchat.command.status` | + +LunaticChat のステータスを表示します. diff --git a/docs/src/reference/commands/notice.md b/docs/src/reference/commands/notice.md index 5cd1a2c..830166b 100644 --- a/docs/src/reference/commands/notice.md +++ b/docs/src/reference/commands/notice.md @@ -1,6 +1,12 @@ -# /notice <Badge type="tip" text="v0.4.0" /> <Badge type="tip" text="Paper / Velocity" /> +# /notice <Badge type="tip" text="v0.4.0" /> <Badge type="tip" text="Paper" /> -### `/notice [on | off]` +### `/notice [on | off]` <Badge type="danger" text="非推奨: v1.0.0 で削除予定" /> + +::: danger 非推奨 + +このコマンドは v0.5.0 で非推奨となりました.代わりに [`/lc settings`](lc/settings.md) コマンドを使用してください. + +::: | パーミッション | エイリアス | |-----------------------------|-------------| diff --git a/docs/src/reference/commands/reply.md b/docs/src/reference/commands/reply.md index 27e0660..201af39 100644 --- a/docs/src/reference/commands/reply.md +++ b/docs/src/reference/commands/reply.md @@ -1,4 +1,4 @@ -# /reply <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper / Velocity" /> +# /reply <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper" /> ### `/reply <メッセージ>` diff --git a/docs/src/reference/commands/tell.md b/docs/src/reference/commands/tell.md index cf38815..6f6e897 100644 --- a/docs/src/reference/commands/tell.md +++ b/docs/src/reference/commands/tell.md @@ -1,4 +1,4 @@ -# /tell <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper / Velocity" /> +# /tell <Badge type="tip" text="v0.1.0" /> <Badge type="tip" text="Paper" /> ### `/tell <プレイヤーID> <メッセージ>` diff --git a/docs/src/reference/permissions.md b/docs/src/reference/permissions.md new file mode 100644 index 0000000..0f3cd97 --- /dev/null +++ b/docs/src/reference/permissions.md @@ -0,0 +1,59 @@ +# パーミッション + +LuckPerms を使用した設定方法に関する詳細は [LuckPerms Wiki](https://luckperms.net/wiki/Home) を参照してください. + +## `lunaticchat.*` + +### `lunaticchat.spy` + +- Default: `OP` + +[`/tell`](commands/tell.md) / [`/reply`](commands/reply.md) コマンドでのやり取りを可視化します. + +この権限を持つプレイヤーは他プレイヤーの [`/tell`](commands/tell.md) / [`/reply`](commands/reply.md) でのメッセージがブロードキャストされます. + +### `lunaticchat.noticeUpdate` + +- Default: `OP` + +LunaticChat のアップデート通知を受け取ります. + +[受け取るには `checkForUpdates` を有効にしておく](../guide/admin/configuration.md#checkforupdates) 必要があります. + +## `lunaticchat.command.*` + +### `lunaticchat.command.tell` + +- Default: `non OP` + +[`/tell`](commands/tell.md) コマンドの使用を切り替えます. + +### `lunaticchat.command.reply` + +- Default: `non OP` + +[`/reply`](commands/reply.md) コマンドの使用を切り替えます. + +### `lunaticchat.command.lc.settings` + +- Default: `non OP` + +[`/lc settings`](commands/lc/settings.md) コマンドの使用を切り替えます. + +### `lunaticchat.command.lc.status` + +- Default: `non OP` + +[`/lc status`](commands/lc/status.md) コマンドの使用を切り替えます. + +### `lunaticchat.command.jp` <Badge type="danger" text="非推奨: v1.0.0 で削除予定" /> + +- Default: `non OP` + +[`/jp`](commands/jp.md) コマンドの使用を切り替えます. + +### `lunaticchat.command.notice` <Badge type="danger" text="非推奨: v1.0.0 で削除予定" /> + +- Default: `non OP` + +[`/notice`](commands/notice.md) コマンドの使用を切り替えます. diff --git a/docs/src/static/direct-message/minecraft-player-sound.png b/docs/src/static/direct-message/minecraft-player-sound.png Binary files differnew file mode 100644 index 0000000..56059e5 --- /dev/null +++ b/docs/src/static/direct-message/minecraft-player-sound.png diff --git a/docs/src/static/favicon.ico b/docs/src/static/favicon.ico Binary files differindex 5a2affe..46c0cad 100644 --- a/docs/src/static/favicon.ico +++ b/docs/src/static/favicon.ico diff --git a/docs/src/static/icon.png b/docs/src/static/icon.png Binary files differindex a6865f7..064445a 100644 --- a/docs/src/static/icon.png +++ b/docs/src/static/icon.png diff --git a/platform-paper/src/main/resources/paper-plugin.yml b/platform-paper/src/main/resources/paper-plugin.yml index 40c3fc3..3f991a9 100644 --- a/platform-paper/src/main/resources/paper-plugin.yml +++ b/platform-paper/src/main/resources/paper-plugin.yml @@ -17,6 +17,8 @@ permissions: default: true lunaticchat.command.lc.settings: default: true + lunaticchat.command.lc.status: + default: true lunaticchat.spy: default: op |
