PlaceholderAPI
> English · Español
PlaceholderAPI Integration
ChattyChannels registers a chatchannels PAPI expansion when PlaceholderAPI is installed. The expansion exposes the current player's chat-channel state for use in scoreboards, TAB lists, chat formatters, and HUD plugins.
Setup
1. Install PlaceholderAPI
# Drop PAPI in plugins/ and restart
# Or download via the eCloud:
/papi ecloud download Player
/papi reload
ChattyChannels' own expansion is registered internally when the plugin enables — it is not on the PAPI eCloud. You do not need to run
/papi ecloud download ChattyChannels.
2. Verify the hook
On enable, the console banner reports the PAPI status:
◈ Channels: 4 channels · PAPI ✓ · ready in 42ms
You can also verify in-game:
/papi test <yourname> %chatchannels_active%
# Expected output: trade (or whichever channel is your active)
Placeholder Reference
| Placeholder | Returns | Example Output |
|---|---|---|
%chatchannels_active% |
The ID of the player's current active channel | trade |
%chatchannels_muted% |
true if the player is muted in their active channel, false otherwise |
false |
If PlaceholderAPI is not installed, these placeholders will render literally (
%chatchannels_active%) rather than expand. Always guard against that in formats you ship publicly.
%chatchannels_active%
Returns the internal channel ID (the YAML key in channels.yml) that the player is currently posting to. For the default config that's one of global, local, trade, or staff. New custom channels you add will return their custom ID.
Useful for:
- Showing the current channel on a scoreboard or HUD
- Conditional chat formatting in DeluxeChat / EssentialsChat
- TAB plugin suffixes that change with the active channel
%chatchannels_muted%
Returns the literal string true or false depending on whether the player is currently muted in their active channel. Note this checks the active channel specifically — a player muted in trade but currently in local will return false.
If you need server-wide mute detection, mute the player with channel *:
/mute Steve * 1h
That will make %chatchannels_muted% return true regardless of which channel they switch to.
Usage Examples
Scoreboard (FeatherBoard / AnimatedScoreboard)
lines:
- "&7Channel: &b%chatchannels_active%"
- "&7Muted: &c%chatchannels_muted%"
TAB plugin suffix
tablist-name: "%player_name% &8| &7%chatchannels_active%"
Conditional formatting
Using a conditional placeholder expansion (e.g. PlaceholderAPI-Expansion-Conditions):
# Show a red marker next to muted players
name: "{condition: %chatchannels_muted%=true}&c[muted] &7%player_name%|%player_name%}"
Inside a channel format: (self-referencing)
Although the channel format already implies the channel, you can include the ID for clarity in admin-facing channels:
staff:
format: "<dark_red>[STAFF/%chatchannels_active%]</dark_red> <player>: <message>"
Using Other Plugins' Placeholders in Channel Formats
The reverse is also supported: ChattyChannels runs every channel format: through PAPI before MiniMessage parsing, so you can embed any installed expansion. The default Global format does exactly this with LuckPerms:
format: "<gray>[<gold>G</gold>]</gray> %luckperms_prefix%<player><reset>: <message>"
Other popular embeds:
| Placeholder | Source | Use case |
|---|---|---|
%luckperms_prefix% |
LuckPerms | Inject group prefix into chat |
%player_world% |
PAPI built-in | Show sender's world name |
%vault_eco_balance_formatted% |
Vault | Show player wealth in trade channel |
%essentials_nickname% |
Essentials | Use the player's set nickname |
Compatibility Matrix
| Plugin | Works with ChattyChannels Placeholders |
|---|---|
| TAB by NEZNAMY | |
| FeatherBoard | |
| AnimatedScoreboard | |
| CMI | |
| DeluxeChat | |
| EssentialsChat | |
| HolographicDisplays | (via PAPI bridge) |
Troubleshooting
| Symptom | Likely cause |
|---|---|
Placeholder shows literally as %chatchannels_active% |
PlaceholderAPI not installed, or ChattyChannels was loaded before PAPI |
| Returns empty string | Player is offline, or being queried as console (placeholders require a Player context) |
Always returns local |
The player has never run /channel, so they're still on the configured default-channel: |
%chatchannels_muted% returns false even though the player is muted |
The mute applies to a different channel than the player's active one — check with /mute on the right channel or * |
Home · Installation · Commands & Permissions · Configuration · Channel Formats