Permission Groups
Overview
ChatControl groups override global settings per-player based on the chatcontrol.group.<name> permission. Groups are NOT Vault permission groups — they are ChatControl-specific permission-based overrides.
Important distinction: There are TWO unrelated "group" concepts:
- •PlayerGroup (this skill) — permission-based setting overrides in
settings.yml→Groups - •Rule Group — reusable operator sets in
rules/groups.rs(see rules-engine skill)
Architecture
Key Classes
- •
PlayerGroup<T>(model/PlayerGroup.java) — generic class holding a setting type and default - •
PlayerGroup.Type— enum of overridable settings
Resolution Logic
code
PlayerGroup.getFor(player)
→ Iterate Settings.Groups.LIST (order matters)
→ For each group: check if player has chatcontrol.group.<name>
→ First match wins → return group value
→ No match → return global default
Common Issues & Solutions
"Group override not applying"
- •Verify permission:
chatcontrol.group.<name>(not Vault group name) - •Check group order in settings.yml — first match wins
- •Ensure the setting key is spelled correctly (case-sensitive)
- •Use
/chc info <player>to check resolved values
"Vault groups vs ChatControl groups"
- •ChatControl does NOT use Vault group names
- •Assign
chatcontrol.group.vippermission to your Vault VIP group - •This is a deliberate design: works with any permissions plugin
"Multiple groups conflicting"
- •Player gets the FIRST matching group only
- •Order groups from most specific (highest rank) to least
- •Admin should be listed before VIP if admin has VIP permission too
"Group delay set to 0 but still delayed"
- •Check channel-specific
Message_Delayoverride (takes priority) - •Check
chatcontrol.bypass.delay.chatpermission instead
Key File Paths
- •PlayerGroup class:
chatcontrol-bukkit/src/main/java/org/mineacademy/chatcontrol/model/PlayerGroup.java - •Settings:
chatcontrol-bukkit/src/main/resources/settings.yml(Groups section) - •Permissions:
chatcontrol-core/src/main/java/org/mineacademy/chatcontrol/model/Permissions.java
Reference
For configuration keys, default values, commands, permissions, and variables not covered above, read the source files directly using read_codebase_file. The key file paths above point to the most relevant files.