Skip to content

v1.5.0

Choose a tag to compare

@viincnt viincnt released this 12 Oct 15:02
· 8 commits to main since this release

Added

  • Bare http(s):// URLs typed straight into chat are now clickable automatically (with a hover showing the URL) — no need for the [text](url) MineDown syntax, though that still works exactly as before and can still be used for custom link text. Not gated by any permission, matching MineDown's own link syntax.
  • /slatechat wiki links to the plugin's documentation (deepslate.ch) as a clickable message — the URL (wiki_url in config.yml) is editable. Open to everyone, no permission required.
  • Documented the full list of valid <pride> flag names (docs/formatting-advanced.md) — the tag already accepted them, they just weren't written down anywhere.

Fixed

  • <head>/<sprite> rendered tinted by whatever color was active where they sat (a channel's own color, or a sender's %chat_color%) instead of the texture's real colors — a message like <yellow>...<head:Notch> hi painted the skin yellow. Wrapped in <white> plus all five decorations forced off, all real MiniMessage tags that close and revert cleanly. <reset> was tried first and reverted: it turns out to not be scoped by its own closing tag the way it looks (see Changed below), so the color of everything after the head/sprite fell back to Minecraft's plain default instead of surviving like it should have.
  • convertLegacyToMiniMessage did a blind whole-string replace with no regard for existing <...> tag boundaries — found while building the URL auto-link above: a URL query string containing &background=, &color=, etc. would get its &b/&c/etc. silently rewritten into a color tag mid-URL, corrupting both the click target and the link's own visible text. Now skips tag content the same way convertHexToMiniMessage already did for the equivalent hex-color bug (see [1.3.0]).
  • /slatechat reload crashing outright with a NullPointerException (and, once that was fixed, an IllegalStateException) — both were the same root cause described in Changed below: registering a Brigadier command from a live command's own execution isn't something Paper's API supports.

Changed

  • Commands (/ch, /chatcolor, /slatechat, and one per configured channel) now register through Paper's Brigadier LifecycleEvents.COMMANDS API instead of reflecting into PluginCommand's private constructor and the server's private commandMap — the exact thing the README's "no NMS, no version-specific internals" claim never quite covered. plugin.yml no longer declares any commands, and api-version moved from a very stale 1.13 to 1.21 to match the Paper API this project actually targets. One deliberate, narrow exception remains: Paper's Brigadier dispatcher can only be mutated while that one lifecycle event is actively dispatching (at boot, or an actual /reload confirm) — never from a live command's own execution, confirmed the hard way by the crashes fixed above — so a channel whose command name is brand new since boot (not just an edited existing one) still goes through the old reflection technique to become reachable without a full server restart. Isolated to its own file (LegacyCommandRegistrar), used from exactly one call site, and documented in code as the deliberate exception it is.
  • Restricted channels' commands are now hidden from tab-complete/help using the same blocksSender() rule the rest of the plugin already uses everywhere else, instead of the native PluginCommand.permission field — which had no way to express "restricted with no permission node configured = OP only", a case blocksSender() has always handled correctly.