HyChatter - [NEW] Bubblechat feature is out to try in beta version!

Chat mod with Global/Region/Party + custom channels, anti-spam moderation, optional multi-server GLOBAL chat forwarding and discord bridge.

File Details

HyChatter-1.0.7.jar

  • R
  • Mar 15, 2026
  • 188.14 KB
  • 136
  • Early Access

File Name

HyChatter-1.0.7.jar

Supported Versions

  • Early Access

[1.0.7]

Added

  • New /hc UI
    The channel panel opened by /hc (or /hychatter) has been fully redesigned. Tabs (Chat, My channels, Moderation), channel list, Manage view, and compose area are all part of the new interface.

  • Moderation tab in /hc UI
    New tab visible to OP or players with hychatter.moderation. Shows read-only status (moderation on/off, censor, spam, links, mute, limits). Blocked words count is displayed; edit Moderation.json5 for the word list.

  • Editable moderation in UI
    From the Moderation tab you can now change settings without editing the file:

    • Toggles (save immediately): Moderation master switch, Censor, Spam protection, Link filter.
    • Values (click “Save values”): Spam cooldown (ms), Mute default (seconds), Max message length (0 = unlimited).
    • Changes are written to mods/HyChatter/Moderation.json5 and the censor cache is rebuilt. Blocked words are still edited only in the JSON5 file.
  • Manage view: member list with Kick and @
    When managing a custom channel, a Members section lists up to 8 members with:

    • Player name (and “(owner)” for the owner).
    • Kick button (owner only; cannot kick self or owner).
    • @ button — closes the UI and shows a toast: “Type @Username in chat to mention them.”
  • Custom channel names with colors
    When creating or renaming a custom channel (UI or commands), you can use:

    • Legacy codes: &5, &a, etc. (e.g. &5TEXTCHANNEL).
    • Hex: &#RRGGBB (e.g. &#FF5555RED).
    • Lookup is by canonical name (stripped of codes, lowercased), so &5TEXT and &aTEXT resolve to the same channel. Names are shown in color in the UI and in chat. Blocked-word checks use the stripped name. Max raw length 64 characters; plain part still 1–24 chars matching [A-Za-z0-9_-].
  • Cached player names for display
    HyChatterPlugin.getCachedPlayerName(UUID) returns a display name for offline members (from join/leave cache), used in the manage member list and elsewhere.

  • HyDiscordX compatibility
    Optional integration with HyDiscordX (Discord ↔ Hytale bridge). Config: hyDiscordXCompatEnabled, hyDiscordXBridgeChannels. Reflection-based bridge; no hard dependency.

  • New commands and permissions

    • Commands: /hc (or /hychatter) with subcommands: ui (open channel panel), chatdefault / dc, gchat / g / gc, rchat / r / rc / lc, pchat / p / pc, swap, mute, unmute, reload, msg / whisper / w, reply / re / rr, and ch with create, invite, leave, rename, kick, transfer, list, serverlist.
    • Permissions: hychatter.command (base for /hc, ui, help, say); hychatter.moderation (access Moderation tab; OP also has access); hychatter.command.chatdefault, hychatter.command.gchat, hychatter.command.rchat, hychatter.command.pchat, hychatter.command.swap, hychatter.command.mute, hychatter.command.unmute, hychatter.command.reload, hychatter.command.msg, hychatter.command.reply, hychatter.command.chaton, hychatter.command.chatoff; hychatter.command.ch.create, hychatter.command.ch.invite, hychatter.command.ch.leave, hychatter.command.ch.rename, hychatter.command.ch.kick, hychatter.command.ch.transfer, hychatter.command.ch.list, hychatter.command.ch.serverlist. Optional bypass: hychatter.moderation.bypass (and hychatter.moderation.bypass.*) in Moderation.json5 to exempt players from moderation.

Changed

  • Escape for <3 and angle brackets
    Player text escaping no longer uses full-width / (which often rendered as ? in-game). It now uses single angle quotation marks / (U+2039, U+203A) so “<3” displays as “‹3” instead of “?3”, and tag injection is still prevented.

  • LuckPerms prefix / tag with hex in fallback
    When using the fallback path (no Mini Chat Formatter) with TinyMessage, the LuckPerms prefix and channel tag are now run through legacyToMini() before being inserted. Gradient-style prefixes (e.g. &#54BBE5W&#549CD5o...) render correctly instead of showing literal &#... in chat. Same for custom channel and whisper prefix/tag.

  • “Send to” label shows colored channel name
    The “Send to X:” label in the Chat tab now uses RichTextUtil.renderAuto() so custom channel names with &/&# codes display in color (e.g. orange TESTAA) instead of literal “&6TESTAA&r”.

  • Vanilla option removed from UI
    The Vanilla channel button has been removed from the Chat tab. Only Global, Region, and Party are shown. When the player is in default game chat, the header shows “Active: Default” instead of “Active: Vanilla”.

  • Owner and Back indicators

    • Custom channel owner indicator in the channel list is now an ASCII * instead of the Unicode star ★, so it no longer appears as “?” in some fonts.
    • The Manage view “Back” button label is now “< Back” instead of “← Back” so it renders correctly.

Fixed

  • moderateInbound()
    Removed erroneous logic that cleared and reloaded per-player default chat from disk every time inbound (e.g. cross-server) messages were moderated when the censor word cache was empty.

Performance

  • Mention regex
    Replaced repeated Pattern.compile("@([A-Za-z0-9_-]{2,32})") in mention handling with a single static MENTION_PATTERN.

  • Censor / URL parsing
    § color stripping and URL host extraction now use static patterns instead of compiling on each call.

  • Player default chat saves
    Player default chat is now saved with a 2-second debounce; config reload still flushes pending saves.

  • Name → player lookup
    Cache (lowercase name → PlayerRef, UUID → name) updated on connect/disconnect; findOnlinePlayerByName() uses cache first.

  • GLOBAL chat list
    For GLOBAL channel, code uses Universe.get().getPlayers() directly when only iterating.

  • CustomChannelManager locking
    Finer-grained locking: createDeleteLock for create/rename/delete; per-channel lock for membership operations.