| Age | Commit message (Collapse) | Author |
|
The tagline and both plugin descriptors now say that romaji conversion can run
inside the server through anthy, so the engine is visible wherever the project
describes itself: the README, the website hero and meta description, the API
documentation, and the Paper and Velocity plugin descriptors.
|
|
Add a second engine for romaji-to-Japanese conversion that leaves the process
alone: anthy, compiled to a WebAssembly module and executed in the JVM by
Chicory's build-time AOT, so conversion needs no outbound request.
anthy/ carries the module sources, the WASI shims, the reproducible build
script, the committed AOT output and the dictionary (~23 MB, extracted into
the plugin data folder on first start; an existing file is left alone).
features.japaneseConversion.engine selects "google" or "anthy", and the anthy
block adds dictionary, workDirectory and sentenceLevel.
RomanjiConverter now sits on a KanjiConverter interface, so a whole message is
handed to the engine at once - anthy segments and reorders a sentence instead
of converting word by word - and the conversion cache is keyed by that
sentence. The engine tests drive the real module, the dictionary tests cover
the extraction, and everything else keeps running on the existing fakes.
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.133-stable (#327)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.132-stable (#323)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.130-stable (#322)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Prepare Paper v1.5.0 and Velocity v1.3.1 releases
|
|
The GitHub Release and the Modrinth version both link to these pages, so
they have to be deployed before the tags are pushed.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Paper gains new messageFormat placeholders, so it takes a minor bump. The
Velocity side only relays the sender's world on an existing message, under a
PATCH protocol bump, so it stays a patch release.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Add `{world}`, `{display_name}`, `{channel_id}` and `{role}` placeholders to chat formats
|
|
The changelog still said {world} was always empty for direct messages
from another server. Velocity needs a release to pass the new field on,
so it gets its own heading under v1.5.0.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
{world} rendered empty for a direct message from another server, which
left formats like "({world})" showing a bare pair of brackets. The relay
now carries the sender's world as an optional field, so this is a PATCH
bump (protocol 1.0.2) and either side can be updated first; an older
sender or proxy still yields an empty value.
The world is read once per message, so the sender, the spies and the
relayed copy can no longer disagree if the sender changes worlds mid-way.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Serializing the display name into the legacy text let its color run into
everything after it, and legacy text cannot hold hex colors or hover and
click events, so names styled by other plugins came out wrong. The name is
now spliced into the parsed component instead.
{role} is resolved only when the format uses it, since the default
formats do not and it costs a member scan and a lookup per message.
/lc channel status now shows the same localized role names instead of a
second, hard-coded [OWNER] / [MOD] vocabulary that only one of the two
places translated.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
New placeholders are a feature, so the next Paper release becomes a minor
one. The unreleased v1.4.1 heading is renamed rather than kept alongside,
since that patch release will not ship on its own.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Operators asked for more of the sender's context in chat formats than the
name alone. {world} covers direct messages and channel chat; the channel
details and the sender's display name and role only exist for channel
chat, so only that format accepts them.
A direct message from another server renders {world} empty: the relay does
not carry the sender's world, and adding it would need a protocol bump and
a coordinated Velocity release for one placeholder. The renderer now
accepts underscores so the snake_case names match as written.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
|
|
Add a start-preview-server skill for reaching debug servers from another machine
|
|
Trying a build from another machine, typically the Windows Minecraft client,
meant starting ./x, then working out by hand which address the Colima port
forward is reachable on and whether the firewall lets it through. The skill
does that and reports LAN and Tailscale addresses, and warns that the
offline-mode server and RCON are open to anyone on that network.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Placeholder names were spelled as string literals in three handlers, and
each handler also chose its own way of turning the result into a
Component. Adding a placeholder meant finding every call site by hand, with
nothing to catch a format left without its value.
ChatPlaceholder now owns the names, and each format has an entry point whose
parameters are exactly the placeholders it accepts, so the compiler points
at the callers when one is added. Substitution happens in a single pass, so
a value that itself contains "{message}" is no longer replaced again by the
next placeholder. All three formats now deserialize section signs into
styles, which leaves what players see unchanged.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Tag each release with exactly one platform (Paper: vX.Y.Z, Velocity: velocity/vX.Y.Z)
|
|
The fix is a bug fix only, so it goes under a v1.4.1 heading. The tag scheme
notes now say "up to v1.4.0" instead of naming v1.5.0, because the next Paper
release is a patch and the boundary would otherwise point at a version that
may never ship.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
correction-docs skills
release-lc replaces the release skill and carries a release through to a
published GitHub Release, a listed Modrinth version and live release notes,
since a pushed tag alone left drafts and broken links unnoticed. The other
skills cover the steps around it: writing the site release notes from
CHANGELOG.md, checking that the Paper and Velocity builds of the current tree
still handshake, and auditing the docs site against the source.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
A vX.Y.Z tag used to ship both JARs under the Paper version number, so the
Velocity version never appeared in a tag. Changelog download links guessed
paper/ and velocity/ tags that did not exist and returned 404, and the same
JAR resurfaced under several releases.
Paper now releases on vX.Y.Z and Velocity on velocity/vX.Y.Z, which matches
the CHANGELOG.md headings one to one. Paper keeps the bare form rather than
moving to paper/vX.Y.Z because the update checker in already-deployed Paper
builds only understands that form. Both workflows call a shared reusable
workflow, since the two had drifted into near-identical copies.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
The update checker read releases/latest and stripped a leading "v", so any
release whose tag was not a bare vX.Y.Z (paper/v1.2.x, or a Velocity release
published last) parsed as 0.x and no update was ever reported. It now lists
recent releases and picks the highest Paper tag, skipping drafts,
prereleases and non-Paper tags, so a Velocity-only release can no longer
hide a Paper update.
Co-Authored-By: Claude <noreply@anthropic.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.129-stable (#315)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.128-stable (#314)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.127-stable (#313)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.126-stable (#312)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.125-stable (#311)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.124-stable (#306)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
m1sk9/renovate/cloudnode-pro-modrinth-publish-digest
chore(deps): update cloudnode-pro/modrinth-publish digest to 3870f66
|
|
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
v26.2.build.123-stable (#302)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
|
|
feat: Release LunaticChat v1.4.0
|
|
m1sk9/renovate/cloudnode-pro-modrinth-publish-digest
chore(deps): update cloudnode-pro/modrinth-publish digest to 203bc72
|
|
Add categorised debug logging with /lc debug and /lc dump, and a debug switch for the Velocity proxy
|
|
Three findings from review of #296.
Brigadier evaluates a `requires` predicate when it builds the command tree it
sends to a player - on every join and every updateCommands() - not when someone
is refused. The denial line sitting there put one entry per gated node per
player in the log, burying the command results the category exists to show. It
is dropped rather than moved: a hidden node is never reached by an execution, so
there is no refusal path to log from.
`all` was honoured by `debug: all` and `/lc debug all on` but not by
`categories: [all]`, which resolved to an unknown name - leaving `enabled: true`
with nothing switched on, reported as off by /lc status, explained only by a
warning in the log. The word now lives in one place that all three read.
Two dumps in the same second left one file, because the name is only accurate to
the second and the write replaces. Reproducing a bug means dumping either side of
the step that triggers it, so the second one now takes a suffix.
Co-Authored-By: Claude <noreply@anthropic.com>
|