| Age | Commit message (Collapse) | Author |
|
feat: Release LunaticChat v1.4.0
|
|
|
|
A nightly JAR was named after the bare release version, so a build from
main and the release of the same base version were indistinguishable in
the JAR file name, /plugins and bug reports; only build-info.properties
knew the difference, and Velocity does not even ship that file.
The x script tried to express this with -Pversion, but each module
assigns its own version from paperVersion/velocityVersion, so the
override never took effect.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The reply listed every setting that had moved and every setting that still
needed a restart, as dotted keys. That buried the one bit that changes what
the operator does next - whether they have to restart - under names they had
just typed themselves and did not need read back to them.
The detail is not lost: which settings moved was already written to the
server log on every reload, which is the better home for it anyway, since a
format change can be dated there long after the chat line has scrolled away.
A pending restart now outranks "nothing changed" even when nothing could be
applied. Reporting no change to someone who did edit the file would send
them hunting for a typo they had not made.
The failure path still names each unreadable setting and the reason it was
rejected, because that is a list the operator cannot reconstruct and needs
in order to fix the file.
|
|
Changing a message format meant taking the server down, because config.yml
was read once in onEnable and every consumer held the value it was built
with. Operators tune these formats far more often than anything else in the
file, and a restart is a disproportionate price for a colour code.
Only messageFormat is applied. The rest of config.yml settles things once,
at startup - which services exist, which commands and listeners are
registered, which files are opened - and none of that can be redone while
the server runs: Paper registers commands only through its COMMANDS
lifecycle event, Bukkit cannot unregister a listener, and the conversion
cache saver keeps no task handle to cancel. Rebuilding the services would
leave the old ones still wired up, so a changed setting the server cannot
pick up is reported back as needing a restart rather than silently ignored.
MessageFormatHolder is deliberately narrower than LunaticChatConfiguration:
taking it says the value is live, taking the configuration says it was
frozen at startup. A holder over the whole tree would hold a configuration
matching no version of the file, since only messageFormat is ever swapped.
Reload reads config.yml more strictly than startup does, because it has an
option startup does not - leaving the running configuration alone. Startup
falls a single unreadable setting back to its default so the server can come
up; reload refuses the file, names every unreadable setting at once, and
keeps what the server already had. A document holding no settings is refused
for the same reason: it cannot be told apart from a config.yml caught
halfway through being written, and resetting every format over that is worse
than doing nothing.
Closes #266
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The badge read `v1.3.0~`, pointing at a Velocity release that does not exist.
The feature needs both halves, and the Velocity half first shipped as 1.2.0
inside the unified v1.3.0 release, so a reader hunting for Velocity v1.3.0 finds
nothing and cannot tell which proxy build carries the relay.
Also refreshes the gradle.properties example, which still showed the versions
current when it was written.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The `@<server>` argument resolves against the server names registered in
`velocity.toml`, not the `features.velocityIntegration.serverName` of the
destination: PresenceTracker publishes `serverInfo.name` and
CrossServerDirectMessageRelay matches the target against the same, so the
previous text had it exactly backwards. Following it on a proxy where the two
names differ produces SERVER_NOT_FOUND every time, and points the reader at the
wrong file to fix. `serverName` still matters, for `{server}` and for
recognising local players, so what it does is stated instead.
Also corrects two claims made while widening these pages:
- `/lcv status` reports only this server's protocol version, not both sides'.
The Velocity bug template leaned on it as its most important field, so a
reporter would have pasted output that cannot answer the compatibility
question. It now also says to run it after a player has joined, since the
handshake waits for one - the same caveat the README install steps needed.
- Spies see pre-conversion text for direct messages only. Channel messages are
converted before the handler runs, so spies get the same formatted string the
members do.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Several statements were wrong rather than merely thin, and each would have set
the wrong expectation:
- the conversion example implied romaji replaces the input, when the result is
appended in parentheses and both are sent
- the handshake was described as happening at startup, when it waits for the
first player to join, so a DISCONNECTED status on an empty server read as a
fault
- cache eviction was called oldest-first, which the unordered in-memory map
cannot provide
- the Velocity settings table omitted crossServerDirectMessage
- ConfigManager was described as reading Bukkit's FileConfiguration, and the
settings storage as recovering from a backup that does not exist
It also documents behaviour that had no mention anywhere: the `!` force-global
prefix, that spy sees channel messages and not only DMs, the nightly build
warnings, the overall 1000ms conversion budget that makes api.timeout above it
ineffective, and the data files the plugin writes.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The key is gone from config.yml, but four pages still documented it with a
default of 2, so operators would keep setting something nothing reads.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
|
|
Add unit tests for CrossServerDirectMessageManager (send/receive/error/dedup),
DirectMessageHandler cross-server display and ReplyTarget resolution, and
ServiceContainer wiring to raise patch coverage.
Extend codecov ignore list to the plugin bootstrap classes (LunaticChat,
ServiceInitializer), consistent with the existing exclusions for runtime-coupled
classes (VelocityConnectionManager, command/impl) that are covered by
end-to-end server tests.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Swap the website default locale from Japanese to English.
English now lives at the site root (/), and Japanese moves
under /ja/. Update locale config, nav/sidebar links, internal
doc links, and asset relative paths accordingly.
Co-Authored-By: Claude <noreply@anthropic.com>
|