Configuration
Every option in config.yml, channels.yml and the other module config files.
All of SlateChat's config files support MiniMessage and MineDown formatting, plus any PlaceholderAPI expansion you have installed. Each module has its own file so you're never staring at options you don't use.
config.yml
Global messages, plus the switches that turn each module on or off.
# Sent when a player lacks permission for a channel or command
no_permission: '<red>You do not have permission!'
# Sent to the sender with how many players saw their message
amount_readed: '<dark_purple><amount> players saw your message!'
no_one: '<red>No one readed your message! :c'
# Console-only / usage messages
players_only: '<red>Only players can execute this command!'
channel_command_usage: '<red>Usage: /ch <channel>'
channel_usage_message: '<red>Usage: /<command> <message>'
channel_changed: '<green>Channel changed to <channelName> - <channelCommand>'
invalid_channel: '<red>Invalid channel!'
plugin_reloaded: '<green>Plugin reloaded.'
# Update checker messages (see modules.update_checker below)
# Placeholders: <version> - the newer version found, <current> - the version you're running
update_available: '<yellow>A new SlateChat version (<green><version></green>) is available! You are running <red><current></red>.'
update_up_to_date: "<green>You're already running the latest version (<current>)."
update_check_failed: '<red>Could not reach GitLab to check for updates. Try again later.'
# Console-only, logged on startup. Placeholders: <version>, <current>, <url>
update_console_log: 'A new version (<version>) is available! You are running <current>. Download: <url>'
# Mirror every chat message to console
log_to_console: true
console_log: '[<channel>] <player>> <message>'
modules:
chatcolor: true # Lets players pick their own chat color with /chatcolor
discordsrv: true # Detect DiscordSRV and bridge channel messages to it
discordsrv_send: false # Forward chat to DiscordSRV, per-channel (off by default, avoids duplicates)
itemsadder: true # ItemsAdder compatibility: resolve its :name: font images in chat (no-op without ItemsAdder)
update_checker: true # Check GitLab for a newer release on startup (async, fail-silent)
focus: true # Let players lock to a default channel with /ch
filter: true # Word filtering (blocked_words / replace)
chatformat:
spam:
enable: false
limit: 10 # Max repeated characters before a message is blocked
message: '<green>Message canceled because contain spam.'
flood:
enable: false # Block sending the same message twice in a row
message: '<green>You cannot send a message like the previous message.'
lowercase: false # Force messages to lowercase
title_format: false # Force-capitalize the first letter of every messagePicking which channel goes to Discord
With discordsrv_send: true, a SlateChat channel is only forwarded if its
name is a key in DiscordSRV's own Channels option
(plugins/DiscordSRV/config.yml) — e.g. Channels: {"global": "123456789"}
forwards only the global channel, and anything left out simply isn't
sent. If DiscordSRV's own built-in chat listener is also relaying raw
vanilla chat regardless of channel, set DiscordChatChannelMinecraftToDiscord: false
in DiscordSRV's config so SlateChat's per-channel forwarding is the only
path to Discord.
ItemsAdder compatibility
With itemsadder: true (the default), any :name: font image ItemsAdder
registers — emoji, rank/prefix badges (including one set via
%luckperms_prefix%), custom icons — resolves through ItemsAdder's own
FontImageWrapper.replaceFontImages() API wherever SlateChat renders text,
including that font image's permission, if it has one set in ItemsAdder's
config. Nothing to configure on ItemsAdder's side, it just needs to be
installed and enabled. See the formatting
guide for the
syntax.
channels.yml
Defines every channel. Keys must be unique, and local is the default
channel new players start in — don't remove it.
local:
format: '<yellow>[Local] <yellow><player><blue><bold>> <yellow>%chat_color%<message>'
command: 'l'
enable: true
broadcast: false
radius: 200
restrict: false
actionbar: true
permission: chat.local
global:
format: '<gray>[Global] <gray><player><blue><bold>> <gray>%chat_color%<message>'
command: 'g'
broadcast: true
radius: 0
restrict: false
actionbar: false
permission: chat.globalPrefixes/suffixes are opt-in
The default formats above don't depend on LuckPerms — add placeholders like
%luckperms_prefix% directly into a channel's format if you want ranks
shown, resolved through PlaceholderAPI.
| Key | Meaning |
|---|---|
format | The message format. Supports <player>, <message>, PAPI placeholders and %chat_color% |
command | What /ch <command> matches, alongside the channel's name |
enable | Only used on local — whether the default channel is active |
broadcast | If true, ignores radius and reaches every online player |
radius | Block radius the message reaches when broadcast is false. 0 means same world only |
restrict | If true, only players with permission can use this channel |
actionbar | Show the sender an action bar read receipt for this channel |
permission | Node checked when restrict is true, and reported by /ch tab-completion |
Add as many extra channels as you want under this file, they all support the
same keys as global.
color.yml
Backs the /chatcolor command.
enable_rgb: true # Allow hex colors; disable to only accept legacy codes
clear_keywords:
- 'clear'
- 'remove'
- 'reset'
only_players: '<red>Avaliable only for players!'
no_permission: '<red>You do not have permission!'
no_arg: '<red>Type an color! /chatcolor #<color>'
invalid: '<red>Type an valid hex color! /chatcolor #<color>'
removed: '<green>Your chat color was removed!'
success: '<green>The color of your chat was changed to %chat_color%this<green>.'filter.yml
Word filtering. Matching is case-insensitive.
# Censored (replaced with asterisks) wherever they appear
blocked_words:
- 'bitch'
- 'damn'
# left->right replacement, e.g. every "barney" becomes "swarley"
replace:
- 'barney->swarley'focus.yml
Forces players into a channel while they're in specific worlds, regardless
of what they last picked with /ch.
worlds:
- dummy:globalEach entry is world:channel — replace dummy with a real world name and
global with the channel you want enforced there.
