diff options
| author | Sho Sakuma <me@m1sk9.dev> | 2026-08-30 13:54:28 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-30 13:54:28 +0900 |
| commit | b697f1cc341cbd9740daa2249c566f1b6bf1952d (patch) | |
| tree | 6d4d14a5f6cc07d28d8b85fdaedc32496e6f5988 /website/src/docs | |
| parent | 6e267a6a0426a5290c8f689c8333f1e9b35e87b7 (diff) | |
| parent | ebdb8d1940b41bab60d201eb6b0cd6f05efbc6ac (diff) | |
| download | LunaticChat-b697f1cc341cbd9740daa2249c566f1b6bf1952d.tar.gz LunaticChat-b697f1cc341cbd9740daa2249c566f1b6bf1952d.tar.bz2 LunaticChat-b697f1cc341cbd9740daa2249c566f1b6bf1952d.zip | |
Merge pull request #293 from m1sk9/feat/config-reload
feat: Add `/lc reload` command
Diffstat (limited to 'website/src/docs')
| -rw-r--r-- | website/src/docs/configuration.md | 22 | ||||
| -rw-r--r-- | website/src/docs/developers/platform-paper.md | 5 | ||||
| -rw-r--r-- | website/src/docs/features/admin.md | 20 | ||||
| -rw-r--r-- | website/src/docs/getting-started.md | 2 | ||||
| -rw-r--r-- | website/src/docs/permissions.md | 1 | ||||
| -rw-r--r-- | website/src/docs/reference/commands.md | 8 | ||||
| -rw-r--r-- | website/src/docs/reference/message-format.md | 2 |
7 files changed, 57 insertions, 3 deletions
diff --git a/website/src/docs/configuration.md b/website/src/docs/configuration.md index f2cfe5b..fb9f260 100644 --- a/website/src/docs/configuration.md +++ b/website/src/docs/configuration.md @@ -8,7 +8,23 @@ LunaticChat's configuration is managed in `plugins/LunaticChat/config.yml`. A de ## Applying Changes -There is no reload command. Edit `config.yml` and **restart the server** to apply a change. +`/lc reload` <Badge type="tip" text="v1.4.0~" /> re-reads `config.yml` while the server runs. It applies the [`messageFormat`](/docs/reference/message-format) settings and nothing else. + +Every other setting decides something that is settled once, when the plugin starts: which services exist, which commands and listeners are registered, which files are opened. Rather than pretend otherwise, the command lists the settings you changed that the running server cannot pick up, so you know a restart is still needed. + +``` +[LC] Reloaded config.yml, but some of the changes need a server restart to take effect. +``` + +The reply says only whether what you edited is in effect. Which settings moved is written to the server log. + +| | Applied by `/lc reload` | Needs a restart | +|---|---|---| +| `messageFormat.*` | Yes | — | +| `features.*` | — | Yes | +| `debug`, `checkForUpdates`, `language`, `userSettingsFilePath` | — | Yes | + +The command is available to the console and RCON as well as to players, and requires `lunaticchat.command.lc.reload` (op by default). Boolean settings accept `true` / `false`, and also the `yes` / `no` / `on` / `off` spellings that Bukkit accepted historically, so a file written for an older release keeps working as it did. @@ -22,6 +38,10 @@ A `config.yml` the plugin cannot use never stops the plugin from starting. Check the server log after editing `config.yml`: a setting that quietly reverted to its default was reported there. +`/lc reload` is stricter, because it has an option that startup does not — leaving the running configuration alone. It refuses the file rather than falling anything back to a default, naming every setting it could not read in one go, and the server keeps the configuration it already had. A file that holds no settings at all is refused for the same reason: a reload cannot tell a comments-only file apart from one caught halfway through being written. + +A misspelled **key** is still not detected, by either path — an unknown key is ignored so that a `config.yml` written for a newer build does not break an older one. When a reload finds nothing to apply, it says so rather than reporting success, which is the signal that a key may be misspelled. + ## Global Settings | Key | Type | Default | Description | diff --git a/website/src/docs/developers/platform-paper.md b/website/src/docs/developers/platform-paper.md index dbba4f1..2620c85 100644 --- a/website/src/docs/developers/platform-paper.md +++ b/website/src/docs/developers/platform-paper.md @@ -23,7 +23,7 @@ Features are assembled via manual DI, without an external DI framework. The key The `onEnable` flow: -1. `saveDefaultConfig()` → build `LunaticChatConfiguration` via `ConfigManager` +1. `saveDefaultConfig()` → build `LunaticChatConfiguration` via `ConfigManager`, then create the `MessageFormatHolder` and the `ConfigurationReloader` over it 2. Initialize `HttpClient(CIO)` and `PluginCoroutineScope` 3. `ServiceInitializer.initialize()` → receive a `ServiceContainer` 4. Move services into the public properties used by commands @@ -146,6 +146,9 @@ Channel state itself is managed by the `chat/channel` package. - `ConfigManager` — deserializes `config.yml` into `LunaticChatConfiguration` with **KAML**, so each default lives in exactly one place: on the data class. It replaced a hand-written dotted-key mapper that repeated every default a second time, and they had already drifted — `checkForUpdates` disagreed with both `config.yml` and the data class, and the whole `messageLogging` block was documented but never read - Failure is handled per setting, not per file: on a `YamlException` the offending key is pruned from the document and decoding is retried, so one unreadable value costs only itself. Only a document that is not YAML at all falls back to defaults wholesale, and neither case is allowed to throw out of `onEnable` +- `ConfigManager.loadStrictly` — the reading `/lc reload` uses. It shares the pruning loop with `loadConfiguration` but reads the outcome the other way round: any setting that had to be pruned means the whole file is refused, with every unreadable setting named at once. A document holding no settings is refused too, because a reload cannot tell a comments-only file apart from one caught mid-write, and resetting every format over that is worse than doing nothing +- `MessageFormatHolder` — the one part of the configuration that is live. Deliberately narrower than `LunaticChatConfiguration`: taking this type says the value can change under you, taking `LunaticChatConfiguration` says it was frozen at startup. A holder over the whole configuration would produce a tree matching no version of the file, since only `messageFormat` is ever swapped +- `ConfigurationReloader` — re-reads the file and swaps the holder. It classifies every setting into applied (leaf by leaf, from `MessageFormatConfig`) or restart-required (block by block, riding on the data class `equals`), and a test over `memberProperties` fails when `config.yml` grows a setting neither table covers. The two lists are measured against different baselines: applied against the formats currently in effect, restart-required against the configuration the server actually started on. Nothing beyond `messageFormat` can be applied, because Paper registers commands only through its `COMMANDS` lifecycle event, Bukkit cannot unregister a listener, and the cache saver keeps no task handle to cancel - `LenientBoolean` — a `Boolean` typealias with a serializer that still accepts `yes` / `no` / `on` / `off`. Bukkit read `config.yml` as YAML 1.1, where those are booleans; kaml reads YAML 1.2, where they are plain strings, and silently resetting them would have flipped `checkForUpdates: no` to its opposite default - Feature defaults: `quickReplies=true`, `japaneseConversion=false`, `channelChat=false`, `velocityIntegration=false` - Under `config/key`: `FeaturesConfig` / `ChannelChatFeatureConfig` / `JapaneseConversionFeatureConfig` / `VelocityIntegrationConfig` / `QuickRepliesFeatureConfig` / `MessageFormatConfig` / `ChannelMessageLoggingConfig` diff --git a/website/src/docs/features/admin.md b/website/src/docs/features/admin.md index 3f71dcc..531f2e0 100644 --- a/website/src/docs/features/admin.md +++ b/website/src/docs/features/admin.md @@ -22,6 +22,26 @@ Displayed information: - Configuration values (debug mode, update checking, language) - Links to GitHub, Modrinth, and documentation +## Configuration Reload (`/lc reload`) <Badge type="tip" text="v1.4.0~" /> + +Re-read `config.yml` without restarting the server. + +``` +/lc reload +``` + +Only the [`messageFormat`](/docs/reference/message-format) settings are applied. Everything else in `config.yml` decides something the plugin settles at startup, so the command lists the changed settings that still need a restart instead of pretending they took effect. + +``` +[LC] Reloaded config.yml, but some of the changes need a server restart to take effect. +``` + +The reply says only whether what you edited is in effect. Which settings moved is written to the server log. + +- **Permission**: `lunaticchat.command.lc.reload` (default: op). Usable from the console and RCON +- A `config.yml` the plugin cannot read in full is refused: every unreadable setting is named at once and the running configuration is kept. This is stricter than startup, which falls a single unreadable setting back to its default so the server can come up +- Every reload is written to the server log, so a format change can be dated later. The file is read off the main thread, and an RCON session closes before the reply reaches it, so RCON callers read the outcome from the log rather than from the command output + ## Spy Mode Players with the `lunaticchat.spy` permission (default: op) can view both the direct messages and the channel messages sent on the server. diff --git a/website/src/docs/getting-started.md b/website/src/docs/getting-started.md index 104e00d..186867c 100644 --- a/website/src/docs/getting-started.md +++ b/website/src/docs/getting-started.md @@ -34,7 +34,7 @@ Use `LunaticChat-<version>.jar` for Paper / Folia servers and `LunaticChat-<vers 1. Place the downloaded `LunaticChat-<version>.jar` into the server's `plugins/` directory 2. Start (or restart) the server 3. `plugins/LunaticChat/config.yml` will be generated automatically -4. Modify the [configuration](/docs/configuration) as needed and restart the server +4. Modify the [configuration](/docs/configuration) as needed, then run `/lc reload` or restart the server ### Velocity diff --git a/website/src/docs/permissions.md b/website/src/docs/permissions.md index caada8b..d55d895 100644 --- a/website/src/docs/permissions.md +++ b/website/src/docs/permissions.md @@ -48,3 +48,4 @@ The following permissions are granted to OPs only by default. | `lunaticchat.noticeupdate` | op | Receive update notifications | | `lunaticchat.channelbypass` | op | Bypass channel restrictions (kick/ban protection, force deletion) | | `lunaticchat.command.lcv.status` | op | Use the `/lcv status` command | +| `lunaticchat.command.lc.reload` | op | Use the `/lc reload` command | diff --git a/website/src/docs/reference/commands.md b/website/src/docs/reference/commands.md index 28627bc..50bcbe9 100644 --- a/website/src/docs/reference/commands.md +++ b/website/src/docs/reference/commands.md @@ -36,6 +36,14 @@ Displays the plugin version, health, enabled features, and configuration values. - **Aliases**: `st` - **Permission**: `lunaticchat.command.lc.status` +### `/lc reload` <Badge type="tip" text="v1.4.0~" /> + +Re-reads `config.yml` and applies the `messageFormat` settings, then reports which of the remaining changes still need a restart. See [Applying Changes](/docs/configuration#applying-changes). + +- **Permission**: `lunaticchat.command.lc.reload` (op by default) +- **Usable from the console and RCON** +- A `config.yml` that cannot be read in full is refused, and the running configuration is kept + ### `/lc settings [key] [on|off]` Views or changes your personal settings. Without arguments, displays the settings list. diff --git a/website/src/docs/reference/message-format.md b/website/src/docs/reference/message-format.md index 2669adb..68fee84 100644 --- a/website/src/docs/reference/message-format.md +++ b/website/src/docs/reference/message-format.md @@ -6,6 +6,8 @@ layout: doc You can customize the display format of chat messages in the `messageFormat` section of `config.yml`. +These are the only settings `/lc reload` <Badge type="tip" text="v1.4.0~" /> applies without a restart; every other section of `config.yml` is fixed when the server starts. See [Applying Changes](/docs/configuration#applying-changes). + ## Placeholders | Placeholder | Description | Available formats | |
