
Chat Mod
MOTD Ingame, Full custom info command setup, Timed Broadcasts, Broadcasts for events with the world clock for events and countdowns :)
ChatMod - Advanced Server Messaging & Info
Chat Mod Sprites Texture pack: modrinth.com/resourcepack/chat-mod-sprites
ChatMod transforms your server's communication! This powerful server-side Fabric mod gives administrators robust tools to engage players, deliver announcements, and manage server information efficiently. Enhance interaction through fully customizable broadcast messages, dynamic MOTD, user-definable info commands, interactive chat replacements, atlas sprite icons, player tagging, and much more.
📧 Contact & Support
💬 Primary Support (Preferred)
All general questions, feature requests, and non-urgent bug reports should be posted in the appropriate channels on our Discord Server. We actively monitor it and will respond as soon as possible so the whole community benefits.
🆘 Urgent PM Policy
You may PM me directly only under specific urgent circumstances:
- Allowed reason: Your server is crashing or experiencing critical, game-breaking errors directly related to this mod.
- Requirement: You must be the server owner.
- Time zone: (CET/CEST) — Brussels Time
- PM hours: 10:00 AM – 10:00 PM Brussels Time only
Immediate responses are not guaranteed. Private messaging is a professional courtesy, not an entitlement. Thank you for your understanding!
⚠️ Version Note — Atlas Sprite Icons
Atlas sprite icon features (
[#SpriteName],[#item],[##item], custom placeholder icons) require Minecraft 1.21.9 or newer. Versions targeting 1.21.5 through 1.21.8 do not include these features. All other features are available on all supported versions.
Features
🌅 Dynamic Message of the Day (MOTD)
- Greets players with a personalized welcome message on join.
- Supports a rich set of built-in placeholders — player name, playtime, last login, first join, server player count, date/time, and more.
- Full Minecraft color codes (
&c), hex colors (&#RRGGBB), text formatting, hover text, and click actions. - Enable or disable in
chatmod.yml.
📢 Broadcasts — Multiple Display Types
Every broadcast — whether cycling, predefined, or ad-hoc — supports four display modes:
| Type | Description |
|---|---|
CHAT | Standard chat message, supports multiple lines |
ACTION_BAR | Appears above the player's XP bar |
TITLE | Full-screen title + optional subtitle |
BOSSBAR | Boss bar with configurable color, overlay style, and duration |
Legacy Cycling Broadcasts
A traditional interval-based cycling system configurable in chatmod.yml. Set the interval in seconds, list your messages, and ChatMod sends them in order automatically.
Predefined Broadcasts (predefined_broadcasts.yml)
Create named, reusable broadcast templates. Each broadcast can optionally require a specific permission node to be sent. Managed via /chatmod bc <name>, /chatmod bcshow <name>, and /chatmod bclist.
Ad-Hoc Broadcasts
Send a one-off message immediately from the command line with /chatmod bcnow <message>. Supports all four display types via inline arguments.
Advanced Scheduling (/chatmod time ...)
Schedule predefined or ad-hoc broadcasts to fire once after a delay, or repeat across a time window:
/chatmod time 10m bc event_promo— sendsevent_promoonce after 10 minutes./chatmod time 30m often 5 bc event_promo— sendsevent_promoimmediately, then 4 more times spread over 30 minutes./chatmod time 20m bcnow &aHello everyone!— schedules an ad-hoc message.
Supports time units s, m, h, d. Scheduled tasks persist across restarts in scheduled_broadcasts.json.
📄 Custom Info Commands (e.g., /rules, /help)
- Create unlimited custom commands from YAML files in
config/chatmod_info/. - Files support multiple named page sections — not just numbered pages, but arbitrary section keys navigable via click actions.
- Each command auto-generates management subcommands:
/<cmd> work— toggle enabled/disabled/<cmd> permission//<cmd> permission set <node>— toggle or set a permission requirement/<cmd> alias add/remove <alias>— add or remove command aliases
- Use
/chatmod create <name>to generate a new file instantly with example content. - Use
/chatmod listto see all active commands. - Auto-migrates legacy
.jsoninfo files to.ymlon first load.
💬 Rich Text Formatting (Everywhere)
All messages — MOTD, broadcasts, info files, chat placeholders, and more — share the same powerful formatting engine:
| Syntax | Effect |
|---|---|
&c, &l, &r, etc. | Minecraft color and formatting codes |
&#RRGGBB | Hex color codes |
&+ prefix on a line | Auto-centers the line in chat |
&= inline | Inserts a newline within a single string |
{Hover text} | Adds hover tooltip to the preceding element |
<action:run_command,/cmd> | Click to run a command |
<action:suggest_command,/cmd> | Click to suggest a command |
<action:open_url,https://...> | Click to open a URL |
<action:copy_to_clipboard,text> | Click to copy text |
<action:change_page,N> | Click to change book page |
🎨 Atlas Sprite Icons (1.21.9+ only)
Render Minecraft texture atlas sprites inline in chat — item icons, block textures, painting thumbnails, celestial sprites, and more. Uses the vanilla {"atlas":"…","sprite":"…"} text component format.
Syntax
| In chat or config | Result |
|---|---|
[#coal] | Inline item sprite icon |
[#grass_block] | Inline block sprite icon |
[#balkan] | Inline painting thumbnail (via sprites.yml alias) |
[#end_flash] | Inline celestial sprite (via sprites.yml alias) |
[#item] | Sprite icon of the item you're holding |
[##item] | Sprite icon only (no text name), held item |
[#item:3] | Sprite icon of predefined item slot 3 |
[##item:3] | Sprite icon only of predefined item slot 3 |
Atlas Routing (automatic)
block/…paths →minecraft:blocksitem/…paths →minecraft:items(split from blocks in 1.21.11)entity/chest/…→minecraft:chestsentity/bed/…→minecraft:bedsentity/banner/…→minecraft:banner_patternsentity/shield/…→minecraft:shield_patternsentity/signs/…/entity/hanging_signs/…→minecraft:signsentity/shulker/…→minecraft:shulker_boxespainting/…→minecraft:paintingsmob_effect/…→minecraft:mob_effectsparticle/…→minecraft:particles- Explicit override syntax:
"minecraft:celestials|end_flash"— use when automatic routing can't determine the atlas
sprites.yml
Define short aliases and vanilla item sprite overrides:
# Short alias
christmas_chest: "entity/chest/christmas"
balkan: "painting/balkan"
# Celestials (1.21.11+)
end_flash: "minecraft:celestials|end_flash"
sun: "minecraft:celestials|sun"
moon_0: "minecraft:celestials|moon_0"
# Override what sprite shows when holding a specific item
vanilla_replacements:
minecraft/chest: "entity/chest/normal"
minecraft/ender_chest: "entity/chest/ender"
minecraft/white_bed: "entity/bed/white"
Permissions
chatmod.chaticon— use[#SpriteName]in chatchatmod.chatitem.icon— use[#item]/[#item:N]chatmod.chatitem.icon_only— use[##item]/[##item:N]
🔧 Custom Placeholders & Chat Replacements (placeholders.yml)
Define your own typed chat triggers that transform into formatted, interactive text:
custom_placeholders:
spawn:
typed: "[spawn]"
chatmod: "&aSpawn"
hover: "Click to teleport to spawn!"
runcommand: "/spawn"
icon: "block/grass_block_side" # shown with [#spawn], [##spawn]
- Players type
[spawn]→ formatted text-only replacement - Players type
[#spawn]→ icon + text (requireschatmod.chaticon) - Players type
[##spawn]→ icon only (requireschatmod.chaticon) - Supports
runcommand,sugcommand,openurlclick actions - Supports predefined item slot references (
item: "item:1") for hover previews - Permission node per placeholder
📦 Item Placeholders
| Placeholder | What it shows | Permission |
|---|---|---|
[item] | Held item name (formatted, with hover preview) | chatmod.chatitem |
[item:N] | Predefined item in slot N (1–54) | chatmod.chatitem.number |
[#item] | Sprite icon + name of held item | chatmod.chatitem.icon |
[##item] | Sprite icon only of held item | chatmod.chatitem.icon_only |
[#item:N] | Sprite icon + name of predefined slot N | chatmod.chatitem.icon |
[##item:N] | Sprite icon only of predefined slot N | chatmod.chatitem.icon_only |
Predefined item slots (1–54) are managed in-game via /chatmod items — a full double-chest GUI. Admins with chatmod.items.edit can place items into any slot directly.
🏷️ Player Tagging & Mentions
@PlayerName— highlights the player's name and plays a pling sound to notify them. Requireschatmod.player.tag.@everyone— highlights@everyonewith a ping sound for the entire server. Requireschatmod.player.tag.everyone./tag <player> <message>— dedicated command to send a highlighted, notifying message to a specific player. Requireschatmod.tag.command.
🎨 Chat Colors
Players with chatmod.chat.colors can use & color/formatting codes and &#RRGGBB hex colors in their regular chat messages.
📊 Built-in Placeholders
| Placeholder | Value |
|---|---|
%player% | Player's name |
%player_uuid% | Player's UUID |
%player_ping% | Player's current ping (ms) |
%player_world% | Player's current world |
%player_x% / %player_y% / %player_z% | Player's coordinates |
%playtime% | Total tracked playtime (formatted) |
%last_play_time% | Last login timestamp |
%player_first_joined% | First join timestamp |
%online_players% | Current player count |
%max_players% | Server max players |
%server_name% | Server MOTD name |
%date% | Current date |
%time% | Current time |
%datetime% | Full date + time + timezone |
%timezone% | Server timezone short name |
%countdown% | Time remaining in a scheduled sequence |
%scheduled_end_time% | End time of current scheduled sequence |
%scheduled_end_datetime% | Full end datetime of current scheduled sequence |
Additionally, Placeholder API (PAPI) placeholders are supported everywhere — any registered PAPI placeholder is resolved automatically.
💾 Player Data Tracking
Persistently tracks per-player total playtime, first login time, and last login time per world. Saved to chatmod_playerdata.json in the world folder.
⚙️ Configuration Files
All configs live in config/chatmod/ and support hot-reload via /chatmod reload. Legacy .json files from older versions are automatically migrated to .yml on first load.
| File | Purpose |
|---|---|
chatmod.yml | MOTD, legacy cycling broadcasts, server timezone |
messages.yml | All system/error messages, info command headers/footers |
placeholders.yml | Custom chat placeholders, item format strings |
predefined_broadcasts.yml | Named reusable broadcast templates |
sprites.yml | Atlas sprite aliases and vanilla item overrides |
predefined_items.json | Predefined item slot data (GUI-managed) |
scheduled_broadcasts.json | Persistent active scheduled broadcast tasks |
config/chatmod_info/*.yml | Individual custom info command files |
New keys added in updates are automatically added to your existing config on reload — no manual migration needed.
Commands
| Command | Description | Permission |
|---|---|---|
/chatmod, /cm | Opens the main help interface | chatmod.modinfo |
/chatmod reload | Reloads all configs instantly | chatmod.reload |
/chatmod create <name> | Creates a new info file + command | chatmod.create |
/chatmod list | Lists all active custom info commands | chatmod.list |
/chatmod testmotd | Sends the MOTD to yourself | chatmod.testmotd |
/chatmod testbroadcast | Fires the next legacy cycling broadcast | chatmod.testbroadcast |
/chatmod items | Opens the predefined items GUI | chatmod.items / chatmod.items.edit |
/tag <player> <message> | Sends a tagged/highlighted message to a player | chatmod.tag.command |
Broadcast Commands
| Command | Description | Permission |
|---|---|---|
/chatmod bclist | Lists all predefined broadcast names | chatmod.bc.list |
/chatmod bcshow <name> | Previews a broadcast locally | chatmod.bc.show |
/chatmod bc <name> | Sends a predefined broadcast now | chatmod.bc.sendnamed |
/chatmod bcnow <message> | Sends an immediate ad-hoc broadcast | chatmod.bc.now |
/chatmod time <interval> bc <name> | Schedules a predefined broadcast | chatmod.bc.sendnamed |
/chatmod time <interval> bcnow <msg> | Schedules an ad-hoc broadcast | chatmod.bc.now |
/chatmod time <interval> often <count> bc <name> | Schedules a repeating predefined broadcast | chatmod.bc.sendnamed |
/chatmod time <interval> often <count> bcnow <msg> | Schedules a repeating ad-hoc broadcast | chatmod.bc.now |
Info File Management Subcommands
These subcommands are available on every custom info command (e.g. /rules, /help):
| Subcommand | Description |
|---|---|
/<cmd> [page/section] | Displays the info file (specific page or section) |
/<cmd> work | Toggles the command enabled/disabled |
/<cmd> permission | Toggles permission requirement on/off |
/<cmd> permission set <node> | Sets the specific permission node |
/<cmd> alias add <alias> | Adds a command alias |
/<cmd> alias remove <alias> | Removes a command alias |
Permissions
Click to expand all permission nodes
Admin / Command Permissions
chatmod.modinfo— Access to/chatmodhelpchatmod.reload— Reload all configschatmod.create— Create new info fileschatmod.list— List info commandschatmod.testmotd— Test the MOTD on yourselfchatmod.testbroadcast— Fire the next legacy broadcastchatmod.name.modify— Modify info file settings (work/permission/alias)chatmod.tag.command— Use the/tagcommand
Broadcast Permissions
chatmod.bc.list— View predefined broadcast listchatmod.bc.show— Preview predefined broadcasts locallychatmod.bc.sendnamed— Send predefined broadcasts (and schedule them)chatmod.bc.now— Send / schedule ad-hoc broadcasts
Item Permissions
chatmod.items— View-only access to the items GUIchatmod.items.edit— Edit access to the items GUIchatmod.chatitem— Use[item](held item text placeholder)chatmod.chatitem.number— Use[item:N](predefined slot text placeholder)
Atlas Sprite Permissions (1.21.9+ only)
chatmod.chaticon— Use[#SpriteName]sprite icons in chatchatmod.chatitem.icon— Use[#item]/[#item:N](icon + name)chatmod.chatitem.icon_only— Use[##item]/[##item:N](icon only)
Chat Permissions
chatmod.chat.colors— Use&color codes and&#RRGGBBhex in chatchatmod.player.tag— Tag players with@Namechatmod.player.tag.everyone— Tag everyone with@everyone
Info File Permissions
chatmod.info.<name>— Access a specific custom info command (when permission is enabled on it)
Server Timezone Configuration
The serverTimezone key in chatmod.yml ensures all date/time placeholders (%time%, %date%, %datetime%) display in the correct timezone. Use IANA timezone names — e.g. Europe/Brussels, America/New_York, Asia/Tokyo.
Modpack Policy
- ✅ You may include ChatMod in any modpack.
- 💙 Credit is appreciated but not required.
- ❌ Do not modify the mod's JAR file directly.
- ❌ The modpack, or access to this mod within it, must not be sold.
