Styled Chat

Transform Your Server's Chat Appearance
This mod gives Minecraft server administrators complete control over chat formatting. You can customize the display of all message types, creating a unique atmosphere for players.

Advanced Formatting Capabilities
The mod supports modern text styling methods that are often ignored by other plugins. Integration with Placeholder API allows using dynamic data in messages.
Individual Styles for Players
Customize chat appearance for different user groups using the permission system. Supports LuckPerms and PlayerRoles for flexible access management.
Works exclusively on Fabric Mod Loader and compatible platforms.
Available Commands
/styledchat- Main command (permissionstyledchat.main, available by default)/styledchat reload- Reloads configuration and styles (requiresstyledchat.reload)/styledchat set <player> <type> <value>- Changes player's personal style (requiresstyledchat.set)/styledchat get <player> <type>- Shows player's current style (requiresstyledchat.get)/styledchat clear <player> <type>- Resets style settings (requiresstyledchat.clear)
Configuration Settings
Configuration file is located at ./config/styled-chat.json and uses simplified text format with placeholder support.
{
"CONFIG_VERSION_DONT_TOUCH_THIS": 3,
"_comment": "Before changing settings, read the documentation",
"text_formatting": {
// Enables link recognition in chat
"parse_links": true,
// Activates markdown support
"markdown": true,
// Allows using legacy codes (&x) in chat
"legacy_formatting": false,
// Supports formatting from other mods
"formatting_from_other_mods": false
},
"chat_preview": {
// Sends full message in preview
"send_full_message": false,
// Requires preview for formatting application
"require_for_formatting": false
},
"auto_completion": {
// Autocompletion for tags
"tags": false,
// Autocompletion for tag aliases
"tag_aliases": false,
// Autocompletion for emoticons
"emoticons": false
},
// Default style settings
"default": {
"display_name": "${default}",
"message_formats": {
"chat": "<${player}> ${message}",
"joined_the_game": "<yellow><lang:multiplayer.player.joined:'${player}'></yellow>",
"joined_after_name_change": "<yellow><lang:multiplayer.player.joined.renamed:'${player}':'${old_name}'></yellow>",
"joined_for_first_time": "<yellow><lang:multiplayer.player.joined:'${player}'></yellow>",
"left_game": "<yellow><lang:multiplayer.player.left:'${player}'></yellow>",
"base_death": "${default_message}",
"advancement_task": "<lang:chat.type.advancement.task:'${player}':'${advancement}'>",
"advancement_challenge": "<lang:chat.type.advancement.challenge:'${player}':'${advancement}'>",
"advancement_goal": "<lang:chat.type.advancement.goal:'${player}':'${advancement}'>",
"sent_team_chat": "<lang:'chat.type.team.sent':'<hover\:'<lang\:chat.type.team.hover>\'><suggest_command\:'/teammsg \'>${team}':'${displayName}':'${message}'>",
"received_team_chat": "<lang:'chat.type.team.text':'<hover\:'<lang\:chat.type.team.hover>\'><suggest_command\:'/teammsg \'>${team}':'${displayName}':'${message}'>",
"sent_private_message": "<gray><italic><lang:commands.message.display.outgoing:'${receiver}':'${message}'>",
"received_private_message": "<gray><italic><lang:commands.message.display.incoming:'${sender}':'${message}'>",
"say_command": "[${player}] ${message}",
"me_command": "<lang:'chat.type.emote':'${player}':'${message}'>",
"pet_death": "${default_message}"
},
"link_style": "<underline><c:#7878ff>${link}",
"spoiler_style": "<gray>${spoiler}",
"spoiler_symbol": "▌",
"formatting": {
"dark_red": true,
"green": true,
"underline": true,
"dark_green": true,
"black": true,
"yellow": true,
"bold": true,
"italic": true,
"dark_blue": true,
"dark_purple": true,
"gold": true,
"red": true,
"aqua": true,
"gray": true,
"light_purple": true,
"blue": true,
"white": true,
"dark_aqua": true,
"dark_gray": true,
"spoiler": true,
"strikethrough": true
},
"emoticons": {
"potion": "🧪",
"item": "[%player:equipmentslot mainhand%]",
"trident": "🔱",
"rod": "🎣",
"shrug": "¯\_(ツ)/¯",
"bow": "🏹",
"bell": "🔔",
"heart": "❤",
"bucket": "🪣",
"sword": "🗡",
"shears": "✂",
"pos": "%player:pos_x% %player:pos_y% %player:pos_z%",
"fire": "🔥",
"table": "(╯°□°)╯︵ ┻━┻",
"$emojibase:builtin:joypixels": "${emoji}"
}
},
"styles": [
{
"require": {
"type": "..."
}
}
]
}
In-Chat Formatting
Players with appropriate permissions can use simplified text tags in their messages. Settings allow activating markdown and legacy formatting support.
Configuration Example
{
"CONFIG_VERSION_DONT_TOUCH_THIS": 3,
"_comment": "Server configuration example",
"text_formatting": {
"legacy_formatting": true,
"parse_links": true,
"markdown": true,
"formatting_from_other_mods": true
},
"chat_preview": {
"send_full_message": false,
"require_for_formatting": false
},
"auto_completion": {
"tags": false,
"tag_aliases": false,
"emoticons": true
},
"default": {
"display_name": "${vanillaDisplayName}",
"message_formats": {
"chat": "${player} <dark_gray>»</dark_gray> ${message}",
"joined_the_game": "<gray>✚</gray> <color:#85ff8f><lang:multiplayer.player.joined:'${player}'>",
"joined_after_name_change": "<gray>✚</gray> <color:#85ff8f><lang:multiplayer.player.joined.renamed:'${player}':'${old_name}'>",
"joined_for_first_time": "<yellow><lang:multiplayer.player.joined:'${player}'></yellow>",
"left_game": "<gray>☁</gray> <color:#ff8585><lang:multiplayer.player.left:'${player}'>",
"base_death": "<gray>☠</gray> <color:#d1d1d1>${default_message}",
"advancement_task": "<lang:chat.type.advancement.task:'${player}':'${advancement}'>",
"advancement_challenge": "<lang:chat.type.advancement.challenge:'${player}':'${advancement}'>",
"advancement_goal": "<lang:chat.type.advancement.goal:'${player}':'${advancement}'>",
"sent_team_chat": "<lang:'chat.type.team.sent':'<hover\:'<lang\:chat.type.team.hover>\'><suggest_command\:'/teammsg \'>${team}':'${displayName}':'${message}'>",
"received_team_chat": "<lang:'chat.type.team.text':'<hover\:'<lang\:chat.type.team.hover>\'><suggest_command\:'/teammsg \'>${team}':'${displayName}':'${message}'>",
"sent_private_message": "<gray>[<green>PM</green> → ${receiver}] <dark_gray>»<reset> ${message}",
"received_private_message": "<gray>[<green>PM</green> ← ${sender}] <dark_gray>»<reset> ${message}",
"say_command": "<red>[${player}] ${message}",
"me_command": "<green>* ${player} ${message}",
"pet_death": "Oh no! ${default_message}"
},
"link_style": "<underline><blue>${link}",
"spoiler_style": "<dark_gray>${spoiler}",
"spoiler_symbol": "▌",
"formatting": {
"dark_red": true,
"underline": true,
"yellow": true,
"italic": true,
"dark_blue": true,
"dark_purple": true,
"gold": true,
"red": true,
"aqua": true,
"gray": true,
"light_purple": true,
"white": true,
"pos": true,
"dark_gray": true,
"spoiler": true,
"strikethrough": true,
"st": true,
"b": true,
"item": true,
"green": true,
"dark_green": true,
"black": true,
"i": true,
"bold": true,
"blue": true,
"darkaqua": true
},
"emoticons": {
"potion": "🧪",
"trident": "🔱",
"rod": "🎣",
"shrug": "¯\_(ツ)/¯",
"bow": "🏹",
"bell": "<yellow>🔔",
"heart": "<red>❤",
"bucket": "🪣",
"sword": "🗡",
"shears": "✂",
"fire": "🔥",
"table": "<rb>(╯°□°)╯︵ ┻━┻"
}
},
"styles": [
{
"require": {
"type": "permission",
"permission": "group.admin",
"operator": 4
},
"display_name": "<dark_gray>[<red>Admin</red>]</dark_gray> <c:#ffe8a3>${vanillaDisplayName}</c>",
"message_formats": {
"chat": "${player} <dark_gray>»</dark_gray> <orange>${message}",
"base_death": ""
},
"formatting": {},
"emoticons": {}
},
{
"require": {
"type": "permission",
"permission": "group.default"
},
"display_name": "<dark_gray>[<aqua>Player</aqua>]</dark_gray> <dark_aqua>${vanillaDisplayName}</dark_aqua>",
"message_formats": {},
"formatting": {},
"emoticons": {}
},
{
"require": {
"type": "permission",
"permission": "group.vip",
"operator": 3
},
"message_formats": {},
"formatting": {},
"emoticons": {
"potato": "<rb>Potato"
}
}
]
}