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.8.jar

  • R
  • Apr 5, 2026
  • 260.92 KB
  • 36
  • Early Access

File Name

HyChatter-1.0.8.jar

Supported Versions

  • Early Access

[1.0.8]

Added

Native Discord bridge
Built-in bidirectional Discord ↔ Hytale relay. No third-party mod required.

  • Config (mods/HyChatter/DiscordBridge.json5):

    • enabled, botToken, channelId — enable the bridge and connect a bot.
    • toDiscordFormat — format for in-game messages sent to Discord. Placeholders: {name}, {message}.
    • toDiscordForwardedFormat — format for cross-server forwarded messages. Adds {server}.
    • toHytaleFormat — format for Discord messages shown in-game. Supports & color codes.
    • notificationChannelId — separate Discord channel for join/leave/death events.
    • notifyJoin, notifyLeave, notifyDeath — toggle each notification type.
    • notifyJoinFormat, notifyLeaveFormat, notifyDeathFormat — notification text (emoji-friendly).
    • notifyForwardedJoinFormat, notifyForwardedLeaveFormat — formats for events forwarded from spoke servers.
    • debug — verbose logging for bridge troubleshooting.
  • Discord custom emojis (e.g. <:skull:123456>) are converted to :skull: text in-game. Standard Unicode emoji codepoints are converted to :unicode_name: using Character.getName(). Both prevent ?? artifacts that occur when Hytale cannot render emoji characters.

  • Channel HUD overlay
    A persistent pill bar visible on-screen shows the player's active channel and keyboard shortcuts at all times.

    • Pills: Global (CTRL+2), Region (CTRL+3), Party (CTRL+4), Custom #1 (CTRL+5), Custom #2 (CTRL+6).
    • Party pill is hidden automatically when PartyPro is not installed.
    • Custom channel pills appear only when the player is a member of one or two custom channels; label shows a short tag derived from the channel name.
    • Active pill is highlighted; inactive pills are dimmed.
    • To disable: set channelHudEnabled: false in mods/HyChatter/HyChatter.json5, then run /hc reload. The overlay will not be shown to any player.
  • MultipleHUD compatibility (MultipleHudCompat)
    HyChatter's channel HUD now integrates cleanly on servers running MultipleHUD.

    • MultipleHUD is detected at runtime via reflection — no hard dependency, no compile-time coupling.
    • When present, HyChatter registers via MultipleHUD.setCustomHud() so its overlay is merged into MultipleHUD's combined HUD document alongside other mods (PartyPro, EndlessLeveling, etc.).
    • When absent, HyChatter falls back to player.getHudManager().setCustomHud() (standard Hytale path).
    • Previously, HyChatter's standalone HUD displaced MultipleHUD's merged document, causing other mods' update calls (e.g. #Ping1, #InfoMobLevelPrefix) to fail with "Selected element in CustomUI command was not found" and crash the client.

Fixed

Security

  • Discord mention injection blocked
    Player names and message content relayed from Hytale to Discord are now sanitized before posting. @everyone, @here, and role pings (<@&id>) are replaced with [mention]. Without this, any player could trigger a mass ping in a Discord server simply by typing @everyone in global chat. Two sanitization levels are applied: strict (names, server names — also strips user mentions) and safe (message body — preserves resolved @Username pings while blocking mass-ping patterns).

  • Constant-time secret comparison in cross-server forwarder
    The shared-secret check on incoming peer connections now uses MessageDigest.isEqual() instead of String.equals(). String.equals() short-circuits on the first mismatched byte, leaking timing information that an attacker could use to brute-force the secret incrementally. MessageDigest.isEqual() always compares all bytes in constant time.

  • Discord channel ID validation
    Channel and guild IDs supplied in DiscordBridge.json5 are validated against the Discord snowflake format (^\d{17,20}$) before being used in API requests, rejecting malformed config values early.

Performance

  • Discord bridge regex patterns compiled once
    All regular expressions used in DiscordBridge (color code stripping, mention detection, custom emoji parsing, @Username scanning) are now compiled once as static final Pattern fields instead of being compiled on every message. On busy servers relaying high chat volume this eliminates repeated Pattern.compile() overhead per message.

Fixed

  • Channel HUD crash on servers with MultipleHUD
    HyChatter previously called hud.show() directly, sending a second standalone HUD packet to the client and displacing MultipleHUD's merged document. This caused "Failed to apply Custom HUD commands" or "Selected element not found" crashes for PartyPro and EndlessLeveling. The fix routes all HUD registration through MultipleHudCompat, which never calls show() directly — HudManager.setCustomHud() and MultipleHUD.setCustomHud() both call show() internally as part of their merge flow.

  • Party pill hint showing wrong shortcut
    #PillPartyHint in ChannelHud.ui showed CTRL+3 (Region's shortcut) instead of the correct CTRL+4.

  • Stale error message in HUD retry log
    The catch block in scheduleHudOpenWithRetry logged "setCustomHud failed" after setCustomHud had already been removed from that path. Now logs "Failed to open channel HUD for ...".