ChatControl - Format & Filter Chat v12.1.7

The ultimate chat formatting, filtering & anti-spam. Can replace 200+ plugins. Folia supported.
Note: Happy new year! We got over 30 tickets and 240+ bug reports to process since holidays end. If you have not been answered yet note we are actively working through the queue. Please do not double post or email us if you have already opened a ticket. Thanks for your patience.
  • New | Added an option to purge old mails.
  • Improve | Now intelligently uses double quotes when a setting value contains single quotes. Removes the need for double quotes '' in scripts.
  • Fix | Solved comments being removed and |- being converted to \n when saving variables.
  • Fix | Solved Clear_Data_If_Inactive key not working.
  • Fix | Solved a null pointer exception when private messaging players from the console.
  • Fix | Solved "Database queries cannot be executed on the main server thread!" when using LiteBans.
  • Fix | Attempt to solve "Cannot invoke "org.mineacademy.chatcontrol.SyncedCache.isIgnoringPlayer(java.util.UUID)" because "spyingReceiverCache" is null" in spying.
  • Reverted | Thanks to our community feedback, we now again store database keys and proxy server name in each unique file, apart from settings.yml. Your keys will be migrated automatically.
  • New | Added back support for legacy #123456 and &#123456 hex variable syntax. This can be toggled off in the Performance section of settings.yml
  • Improve | Renamed /chc migrate to /chc convert and solved a bug breaking gradient hex colors in the command.
  • Fix | Solved mini end tags not properly ending styles in formats in some cases.
  • Misc | Silenced "Unable to ask Vault plugin if" warning message if the message sender is a non-player, which is normal and was not an error as these data can't be retrieved for non-players.
  • New | Added Performance.Support_Variables_In_Variables option to enable double parse of variables. This has been been true by default in ChatControl 10 but results in 2x performance loss, so now only uses who actually need this can enable it.
  • Improve| No longer auto migrate variables each plugin start. We now only do this when ChatControl 10 folder is upgraded, or when you run "/chc migrate" command manually.
    • DO NOT USE /CHC MIGRATE IF YOU USE MINI TAGS ALREADY due to a problem that will replace hex in tags such as <gradient:#ccffdd to <gradient:<#ccffdd> and break the format. This will be addressed tomorrow. For other issues please open a ticket on github.
  • Fix | Solved a regression wiping comment lines in some files in the variable migrator change introduced in the last update.
  • Fix | Solved "Legacy formatting codes have been detected" when sending some messages in a frame layout.
  • Fix | Solved empty string return not supported in variables and actually throwing a nasty error.
  • New | You can now use "require variable" operator in rules on multiple lines to stack it.
  • Improve | Added %placeholder% to {placeholder} syntax migrator as well as one for &#123456 hex design placeholders and one for more legacy variables. Those will run always even if you already migrated your folder.
  • Fix | Solved chat not rendering if all of your format parts are conditional and won't show for the console. We will now send the chat but won't print anything to the console unless you set a custom console format for such formats.
  • Fix | Solved {player_nick} not working for EssentialsX nicknames.
  • Misc | Emptied Apply_On sections of settings.yml for default installs to keep everything off on first launch as promised.
Important: Please see our Upgrading page on docs.mineacademy.org for up-to-date upgrading information. The information below might be out of date.

The long awaited ChatControl 11 is here! I recoded about 70% of the plugin, brought full Adventure and MiniMessage support and improved performance 1.5-3x. Please read your logs carefully and enjoy the plugin!

Updating from ChatControl 10:
  • Is 99% automatic. We will make a backup of your old folder. The new folder is named just "ChatControl".
  • Localization format has changed completely and automatic update is not offered at the moment.
  • Hex color codes will be migrated but if you used decorations such as &m you will need to convert them to mini(such as <st>) and use closing tags (such as </st>) otherwise they will overflow.
    • The legacy &m will still work but it will overflow because Bukkit never implemented it properly. We will keep supporting legacy colors alongside mini tags.
  • mysql.yml and bungee.yml were merged to settings.yml
    • If you symlinked this file you will need to create a small plugin that uses the static {} initializer block to write per-server values to this file at server boot.

Changelog:
  • Major | The plugin is now called “ChatControl” only, marking the end of ChatControl Red series.⁠
  • New | Added "clear chat history" operator which removes past messages from the sending player. Requires ProtocolLib.
  • New | Updated some variable syntax, such as {warn_prefix} etc. is now {prefix_warn}. See https://github.com/kangarko/ChatControl-Red/wiki/Variables for up-to-date placeholders.
  • New | Custom tablist header and footer with formats/ support.
  • New | You can now use {sender_x} and {receiver_x} variables in private messages where x can be anything in our synced cache, where previously that was limited to just player names. List of available data is present below.
  • New | Added a new antispam feature whereby you can exclude commands without arguments from similarity check, preventing the annoying blocking of /help being typed 2x for example.
  • New | Added /dummy command that does absolutely nothing, please give a 5* review. This is not a joke, this command was added to allow command rules properly register in tab-completion. For example, if you made a /ping command in rules/commands.rs, route to it in commands.yml. (TIP: Remove the $1- if you do not want player names to complete after the main command label).
  • New | Added ultra fast “require variable <variable <value>” rule operator to replace use of heavy “require script” whenever possible. For example “require variable {player_vanished} true” will be about 2x faster. See our docs for examples and usage.
  • New | Added /say command to replace Mojang limited /say command with robust formatting capabilities. Proxy addons have their own network-wide /say and /me commands too.
  • New | Added ability to use colors or minimessage tags on anvils, books and signs, including gradients. On books, you can include hover and click events. Those are protected by an extra chatcontrol.action.<name> permission.
  • New | Full-stack support for emojis on Discord<>Minecraft. When ItemsAdder is enabled, we render the proper emoji images. If it’s not installed, we translate emojis to tags like :heart: etc. The only limit is we can’t translate emojis not in ItemsAdder or not on Discord, both platforms must have the same tag.
  • New | Added sexy as hell dynmap integration including rules, proxy and Discord support.
  • New | You might be greeted by occassional “Unable to find cached database player” during the beta, yay! Don’t panic. Still better than leaks. Let this be your personal guide to freedom. And don’t forget to report all such occurences to my GitHub.
  • New | Added “ignore commandprefix” operator to rules to ignore the "/chc:me" in "/chc:me hello world" and only test this rule against "hello world" to prevent false catches.
  • New | Added the ability to make links in chat, private messages, /me and /say auto clickable. Proxy supported.
  • New | Added support proxy and per-serve mute.
  • Improve | Improved “then deny silently” so that spying players will receive the soft muted message with [denied] prefix (configurable), plus you can use {message_is_denied_silently} placeholder in chat formats to show that the message was soft muted to the sender. This variable is unsupported in spy format since they have a custom prefix if denied silently already.
  • Improve | The | divider in “then console”, “then command” and “then proxy” is now used to pick one command randomly. Since you can use this operator multiple times, this now opens a whole lot of new possibilities. For comparison, on ChatControl 10 the | was used to separate multiple commands (all of which will be executed at the same time).
  • Improve | Auto-capitalization now works even for sentences starting with a & color or a minimessage tag.
  • Improve | Resolved all instabilities when sending join messages on proxy, reworked this communication system completely.
  • Improve | Solved Spigot placeholders not working on Velocity such as you can now use {player_nick} in your proxy join messages on VelocityControl and this will get replaced by the nick consistently over all servers.
  • Improve | In death messages, the {killer_item} variable now properly shows the exact ItemStack as it appears in vanilla Minecraft death messages.
  • Improve | You no longer will receive spy messages from players you ignore.
  • Improve| Rewritten variables for player messages. You can now use {sender_x}, {receiver_x} and {killer_x} variables such as to get data from these player's Synced Cache.
    • List of available data:
      • _name: Player's name
      • _prefix: Player's prefix
      • _suffix: Player's suffix
      • _group: Player's primary permission group
      • _server: Current server the player is connected to
      • _is_vanished: Returns true if player is vanished, otherwise false
      • _is_afk: Returns true if player is AFK, otherwise false
  • Improve | The /toggle <join/quit> now properly ignores messages set on proxy too. The only limit is you cannot toggle individual message groups.
  • Improve | Spying on books will now properly open them over proxy or if player has disconnected when clicked the spy message.
  • Fix | Fixed sounds in channels not working.
  • Fix | Solved -f option in “/chc clear” command not working.
  • Fix | Solved Anti_Bot.Cooldown.Chat_After_Login and Command_After_Login options not working.
  • Fix | Solved fallback command prefix for commands not being ChatControl. Starting this release, you can tab /chatcontrol: and you will see all commands we have as a result. Thus, you can do /chatcontrol:me to explicitly invoke the me command.
  • Remove | Removed /chc tour secret command and simplified the plugin enabling process.
  • Remove | Removed packet rules. Current implementation had numerous flaws, showed up heavily in spark reports and was unreliable due to how component trees are now serialized. Additionally we found this feature to be extremely rarely used. All other packet features such as removing messages with [X] were re-implemented with higher performance.
  • Remove | Dropped support for %% variables, and made all variables support the {syntax}. This 2x the plugin performance because we no longer need to check for placeholders twice.
  • Remove | Removed Integration.Discord.Forward_From_Proxy because it was poorly implemented and required online players on the master server. We recommend having DiscordSRV installed on all servers from which you want to send or receive messages.
  • Remove | Removed waiting until the resourcepack is loaded to send player join message, because this is now unneeded on modern Minecraft versions as resourcepacks are loaded before the player join event is fired. And maintaining this insanity for multi-version is above my time and nerve scope. Btw on v10 right now we actually invoke 2x database calls due to this, dragging down performance and opening up for potential issues, so I recommend you turn off this option there as well if you are waiting with the upgrade.
  • Remove | Removed rarely used Receiver_Condition/Permission keys from variables/ files due to unsupported behavior with the new minimessage format.
  • Breaking | Renamed some variables to ensure consistency, i.e. isp is now player_isp, town to player_town, nms_version to server_nms_version etc. The only exception is still {player} and {nick} but we recommend you change them to {player_name} and {player_nick} too.
  • Breaking | Replaced %syntax% with variable {syntax} consistently in the plugin, including those from PlaceholderAPI.
  • Drop | Support for Minecraft 1.7.10 and older.
  • Drop | The mic.

Technical limitations:
  • ItemsAdder won’t render emojis while inside a gradient due to how MiniMessage works.
  • Legacy versions such as 1.8.8 lose hover colors if \n is used, please append colors on each line manually.
  • If Colors are enabled, and another plugin modifies the new Paper chat event, we will only keep the modified message’s colors if the sending player has permission for them.
  • If Colors are disabled, we will remove all & and minimessage tags from the message added by the sender. This is a technical limitation and a safety feature.
  • When you use minimessage hover event in a variable, it will override the Hover format in a format part.
  • Legacy versions do not support rules with hover/click events if channels are disabled due to the old chat event not working with components.
  • If rules will change your book pages and you are not signing the book, colors and hover/click events from the page will be removed.
  • When using gradients in tags (prefix, nick, suffix), end tags </gradient> won’t work. You need to use <reset>.
  • The Server_Aliases setting in VelocityControl/BungeeControl will not work on commands sent from Spigot servers because it is parsed downstream already.
  • Performance is reduced if JavaScript variables are used. Compiling realtime JavaScript is simply put heavy, do not complain about performance if you use JavaScript variables, there is nothing we can do and a cache is unfeasable because it is unfeasible. This is the same in ChatControl 10.
  • /chc sendas <player> requires the player to be on the same server because formats need a Bukkit entity to build their conditions

Why beta:
  • Since click events can run commands and can potentially trick admins into running privileged commands to give the original sender privileges or harm the server, we have spent extensive time eliminating this option unless players have the “chatcontrol.action.{name}” permission (use /chc perms to see what actions are supported).
  • However, because ChatControl is a very complex plugin, there might be edge cases where they get parsed and we are actively looking for them.
  • The plugin should be very secure and was tested, but needs more use on real networks to uncover these cases. Therefore we are marking this release as beta.

What I need help testing:
  • Discord: All rule operators when sending a message on Discord to Minecraft.
  • Parties: The channel Party option with the latest version of all supported plugins.
  • 1.9-1.21.3: I only test on 1.8.8 and 1.21.4 because I simply physically can’t test on 100+ game versions. But I will happily fix a bug if you report it.
  • BungeeCord: I primarily test on Velocity now, but will continue to support BungeeCord as needed.

Open sourcing:
  • As discussed on Discord I am strongly considering open sourcing ChatControl 11 shortly after the new documentation is done. I will be going through the code and documenting stuff before that. The goal is to help networks customize the plugin to their own unique needs as my time is increasingly shortened as life goes on. Open source will also ensure the longevity of the plugin.

ChatControl 10 support:
  • I will continue to deliver critical fixes and security patches for ChatControl 10 until March 2025 but other general support will not be provided.

Thanks for reading!

PS: Don't forget to update your BungeeControl and VelocityControl too. I hope you will enjoy the plugin as much as I did making it. Thanks for everyone who participated and those eagerly waiting.

Enjoy!
-Matej
  • Improve | Compatible with Minecraft 1.7.10 - 1.21.4.
  • Fix | Solved a potential security issue where placeholders could be parsed in {message} in certain places. We already prevented this in chat in earlier releases, now this is completely prevented. Thanks for the report!
  • Fix | Solved "Cannot call save() when no file was set! call load first" on plugin shutdown.
  • Improve | Compatible with latest 1.21.3 builds.
  • Misc | Removed "/chc tour confirm" in preparation for ChatControl 11.
Buy a license now
$29.97
EULA
Standard EULA
Use on any projects you own with attribution
Support
Standard
Includes:
Download the resource
Access new updates
Support from the creator
Support duration
Lifetime
Extras
Witty Death Messages Pack
+ $9.99
Advanced Swear & Offensive Words Filters
+ $9.99
Share and earn
Refer this resource and earn a 10% commission.
288,102 Views
2,258 Purchases
3,160 Downloads
Dec 13, 2020 Published
Jun 24, 2026 Updated
5.00 star(s)
Average rating (129)
2.3 MB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. Yes
Game mode
  1. Survival & SMP
  1. Creative
  1. Minigame
Type
  1. Chat
  1. Protection
  1. Staff
Game mode
  1. Survival
  1. Creative
  1. Minigame
Game mode (legacy)
  1. Survival
  1. Creative
  1. Minigame
Supported software
  1. Bukkit
  1. Spigot
  1. Paper
  1. Folia
  1. Purpur
Supported versions
  1. 26.1
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
  1. 1.20
  1. 1.19
  1. 1.18
  1. 1.15
  1. 1.14
  1. 1.13
  1. 1.12
  1. 1.11
  1. 1.10
  1. 1.9
  1. 1.8
Supported languages
  1. English
Includes DRM
No
Source access (legacy)
Open source
Creators
Owner
Recommended for you
Advanced custom monsters & AI plugin with skills system and a clean UI. Folia supported.
5.00 star(s) 53 ratings
777 purchases
An addon for ChatControl to allow cross-network features and player messages.
5.00 star(s) 6 ratings
469 purchases
Procedurally destroyable arenas with classes, tier system & Velocity support.
4.50 star(s) 8 ratings
173 purchases
Protect your economy against raids, duplicated items or zero-day exploits.
4.00 star(s) 7 ratings
145 purchases
Add snow particles & terrain snow, spawn snowmen, place gift chests and much more!
5.00 star(s) 6 ratings
138 purchases
Share and earn
Refer this resource and earn a 10% commission.
288,102 Views
2,258 Purchases
3,160 Downloads
Dec 13, 2020 Published
Jun 24, 2026 Updated
5.00 star(s)
Average rating (129)
2.3 MB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. Yes
Game mode
  1. Survival & SMP
  1. Creative
  1. Minigame
Type
  1. Chat
  1. Protection
  1. Staff
Game mode
  1. Survival
  1. Creative
  1. Minigame
Game mode (legacy)
  1. Survival
  1. Creative
  1. Minigame
Supported software
  1. Bukkit
  1. Spigot
  1. Paper
  1. Folia
  1. Purpur
Supported versions
  1. 26.1
  1. 1.21.11
  1. 1.21.8
  1. 1.21.5
  1. 1.21.4
  1. 1.21.2
  1. 1.21
  1. 1.20
  1. 1.19
  1. 1.18
  1. 1.15
  1. 1.14
  1. 1.13
  1. 1.12
  1. 1.11
  1. 1.10
  1. 1.9
  1. 1.8
Supported languages
  1. English
Includes DRM
No
Source access (legacy)
Open source
Creators
Owner
Recommended for you
Advanced custom monsters & AI plugin with skills system and a clean UI. Folia supported.
5.00 star(s) 53 ratings
777 purchases
An addon for ChatControl to allow cross-network features and player messages.
5.00 star(s) 6 ratings
469 purchases
Procedurally destroyable arenas with classes, tier system & Velocity support.
4.50 star(s) 8 ratings
173 purchases
Protect your economy against raids, duplicated items or zero-day exploits.
4.00 star(s) 7 ratings
145 purchases
Add snow particles & terrain snow, spawn snowmen, place gift chests and much more!
5.00 star(s) 6 ratings
138 purchases
Top