Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
DragonChat
Technical Documentation
Overview
DragonChat is a next-generation chat plugin for Paper 1.21.11, designed to completely replace Minecraft's vanilla chat with a modern, fast, and highly configurable communication system.
Built with Java 21, the Paper API, and Adventure/MiniMessage, DragonChat delivers rich text formatting, excellent performance, and maximum flexibility while remaining fully compatible with modern Paper servers.
Its modular architecture allows every feature to be individually enabled or disabled through the configuration, making it suitable for both small communities and large-scale networks.
Main Goals
DragonChat has been designed with the following objectives:
- Completely replace the vanilla chat system.
- Support both modern and legacy formatting simultaneously.
- Provide a modular architecture where every feature can be enabled or disabled.
- Offer deep integration with LuckPerms and PlaceholderAPI.
- Maintain excellent performance on high-player-count servers.
- Minimize conflicts with other chat plugins through an advanced chat interception system.
Chat System
DragonChat uses Paper's AsyncChatEvent as its primary chat handler.
When chat.force-chat-handler is enabled, the plugin completely suppresses the vanilla chat and becomes the only message renderer.
To guarantee this behaviorāeven on servers running multiple chat pluginsāDragonChat registers suppression listeners at both:
- LOWEST priority
- MONITOR priority
It also intercepts Paper's legacy chat events, preventing other plugins from restoring the vanilla chat after DragonChat has already processed the message.
This ensures DragonChat always remains the active chat handler.
Supported Chat Formatting
DragonChat supports multiple formatting systems simultaneously.
MiniMessage
<red>Hello</red>
Legacy Ampersand Colors
&cHello
Legacy Section Sign Colors
§cHello
HEX Colors
&#FF0000Hello
Gradients
<gradient:#FFD700:#FF0000>DRAGON</gradient>
Rainbow
<rainbow>Hello</rainbow>
Text Decorations
- Bold
- Italic
- Underline
- Strikethrough
- Obfuscated (Magic)
- Reset
Players can freely use MiniMessage tags, & color codes, and § color codes when they have the appropriate permissions.
Permission-Based Formatting
DragonChat automatically removes formatting that the player is not allowed to use.
Supported permissions include:
chat.color
chat.hex
chat.gradient
chat.rainbow
chat.format.bold
chat.format.italic
chat.format.underline
chat.format.strikethrough
chat.format.obfuscated
Permissions are fully compatible with LuckPerms.
Group Formatting
DragonChat integrates directly with LuckPerms.
The plugin automatically detects each player's primary group and applies a configurable chat format based on that group.
Each group may have its own:
- Prefix
- Suffix
- Colors
- Chat layout
- Placeholder configuration
PlaceholderAPI Support
If PlaceholderAPI is installed, DragonChat automatically parses placeholders inside every configurable format.
No additional setup is required.
Reload System
DragonChat includes a safe reload command.
/dragonchat reload
Alias:
/dchat reload
The reload operation:
- Reloads
config.yml - Clears cached group formats
- Reloads formatting settings
- Refreshes runtime configuration
Required permission:
chat.reload
Private Messaging
DragonChat includes a fully configurable private messaging system.
Main command:
/msg
Aliases:
/tell
/w
/message
/pm
Configurable options include:
msg.sent-format
msg.received-format
msg.sound.enabled
msg.sound.name
msg.sound.volume
msg.sound.pitch
Mention System
DragonChat supports player mentions using:
@PlayerName
When a player is mentioned, the plugin can automatically:
- Highlight the player's name
- Play a configurable sound
- Display an Action Bar
- Show a Title
- Show a Subtitle
All behaviors are configurable.
Mute System
DragonChat includes a complete moderation system.
Commands:
/mute
/tempmute
/unmute
/mutelist
/checkmute
Mute data is stored inside:
mutes.yml
The plugin keeps mute information cached in memory for fast lookup during chat events.
Join, Quit & Death Messages
DragonChat fully replaces Minecraft's default server messages.
Supported message types include:
- Player Join
- Player Quit
- Death Messages
Death messages support multiple causes, including:
- PvP
- Fall Damage
- Lava
- Fire
- Explosion
- Void
- Drowning
- Lightning
- Starvation
Every message is fully configurable.
Performance
DragonChat has been optimized for high-performance Paper servers.
Key optimizations include:
- Cached group formats
- In-memory mute storage
- Asynchronous chat processing
- Minimal object allocation
- Efficient MiniMessage parsing
When Force Chat Mode is enabled, chat formatting is processed asynchronously, while the final message delivery is safely transferred to the main server thread for maximum compatibility with other plugins.
Configuration Files
config.yml
Main configuration file containing:
- Chat settings
- Group formats
- Mentions
- Private messages
- Mute settings
- Join/Quit messages
- Death messages
- Module toggles
plugin.yml
Contains:
- Commands
- Permissions
- Plugin metadata
- Optional dependencies
mutes.yml
Persistent storage for all active and temporary mutes.
Compatibility
DragonChat is built specifically for:
- Paper 1.21.11
- Java 21
Optional integrations:
- LuckPerms
- PlaceholderAPI
Conclusion
DragonChat is a professional-grade chat solution built for modern Minecraft servers.
It combines a fully modular architecture, advanced text formatting, high-performance asynchronous processing, and deep integration with the most popular server plugins.
Whether you're running a small community server or a large network, DragonChat provides a complete replacement for Minecraft's vanilla chat with maximum flexibility, performance, and compatibility.
CONFIG.YML
Spoiler
modules:
chat: true
joinquit: true
death: true
mute: true
mention: true
msg: true
chat:
event-priority: HIGHEST
force-chat-handler: true
allow-cancelled-override: true
format-cache-seconds: 30
default-format: "<gray>[<white>%dragonchat_group%</white>]</gray> %player_displayname% <dark_gray>Ā»</dark_gray> %message%"
groups:
owner:
chat-format: "<gradient:#FFD700:#FF0000><bold>OWNER</bold></gradient> %player_displayname% <dark_gray>Ā»</dark_gray> %message%"
join-message: "<green>+</green> <gradient:#FFD700:#FF0000>%player_name%</gradient>"
quit-message: "<red>-</red> <gradient:#FFD700:#FF0000>%player_name%</gradient>"
death-message: "<red>%player_name% has fallen as a dragon would.</red>"
default:
chat-format: "<gray>%player_name%</gray> <dark_gray>Ā»</dark_gray> %message%"
join-message: "<green>+</green> <gray>%player_name%</gray>"
quit-message: "<red>-</red> <gray>%player_name%</gray>"
death-message: "<red>%player_name% died.</red>"
mention:
format: "<yellow><bold>@%player_name%</bold></yellow>"
sound: "minecraft:block.note_block.pling"
volume: 1.0
pitch: 1.2
actionbar: "<yellow>%sender_name% mentioned you.</yellow>"
title: ""
subtitle: ""
msg:
sent-format: "&f[ A &b%target_name% &f] %message%"
received-format: "&f[ Da &b%source_name% &f] %message%"
usage: "<red>Usage: /msg <player> <message></red>"
offline: "<red>%target_name% is not online.</red>"
self-message: "<red>You cannot message yourself.</red>"
no-permission: "<red>You do not have permission.</red>"
sound:
enabled: true
name: "minecraft:block.note_block.pling"
volume: 1.0
pitch: 1.2
mute:
message: "<red>You are muted.</red> <gray>Reason:</gray> <white>%reason%</white> <gray>Expires:</gray> <white>%expires%</white>"
broadcast: "<red>%target%</red> <gray>was muted by</gray> <white>%sender%</white><gray>.</gray>"
unmute-message: "<green>%target% is no longer muted.</green>"
death-messages:
pvp: "<red>%player_name% was slain by %killer_name%.</red>"
fall: "<red>%player_name% hit the ground too hard.</red>"
lava: "<red>%player_name% tried to swim in lava.</red>"
fire: "<red>%player_name% burned.</red>"
explosion: "<red>%player_name% exploded.</red>"
void: "<red>%player_name% fell into the void.</red>"
drowning: "<red>%player_name% drowned.</red>"
lightning: "<red>%player_name% was struck by lightning.</red>"
hunger: "<red>%player_name% starved.</red>"
default: "<red>%player_name% died.</red>"


