-
Notifications
You must be signed in to change notification settings - Fork 5
Chat
Everything ServerTools does to your chat: formatting, cooldowns, emojis, per-player colors, tags, join messages, and custom death messages. Config lives under the Chat: section of config.yml (join MOTD is the one exception, it sits under Events:).
Most of this is standalone, pure Bukkit. Two features lean on other plugins:
| Feature | Hard requirement | Soft (nice to have) |
|---|---|---|
| Tags | Vault + a LuckPerms-style perms plugin | - |
| ChatFormat | - | Vault (prefix/suffix), PlaceholderAPI (PAPI in messages) |
| JoinMOTD | - | PlaceholderAPI (for %server_online% etc.) |
"Hard" means the feature bails out or does nothing useful without it. "Soft" means it still works, you just lose part of it.
Rewrites the whole chat line. Runs on two priorities: a LOWEST pass that sets the base format, then a HIGHEST pass that fills in {prefix}/{suffix} and optionally runs PAPI on the message body.
- Config path:
Chat.ChatFormat - Default enabled: yes
- Format tokens (in
format):{prefix},{name},{suffix},{message} - Where prefix/suffix come from: Vault's
Chatservice (getPlayerPrefix/getPlayerSuffix). No Vault provider registered means those tokens just stay empty. ServerTools listens for Vault service register/unregister events and re-grabs the provider live, so you don't have to reload.
Chat:
ChatFormat:
Enabled: true
EnabledPAPIinMessages: true
ChatColorPerm: chatcolor.codes
PrefixOffset: 0
format: '{prefix}{name}{suffix} &7» &f{message}'Notable options:
-
ChatColorPerm(defaultchatcolor.codes): players with this perm (or OP) get their&color codes in the format/message translated. Without it, codes stay literal. Note the code also hard-checks the literal stringchatcolor.codesin the HIGHEST pass, so renaming this perm only changes the LOWEST pass behavior, the HIGHEST colorize still keys offchatcolor.codes. Heads up if you rename it. -
EnabledPAPIinMessages: run PlaceholderAPI on what the player typed. Only kicks in if PAPI is installed, the message has a%in it, AND the player haschat.placeholder.message. So it's off by default per-player unless you grant that perm. -
PrefixOffset: trims N chars off the end of the Vault prefix (0= no trim). Handy if your prefix has trailing padding you don't want.
Blocks a player from chatting again until the cooldown passes.
- Config path:
Chat.ChatCooldown - Default enabled: yes
- Command:
/chatcooldown(alias/cooldown) - Perms:
chatcooldown.bypass(skip the cooldown),chatcooldown.admin(use the command)
Chat:
ChatCooldown:
Enabled: true
BypassCooldown: chatcooldown.bypass
CommandPermission: chatcooldown.admin
SecondsCooldown: 5
Message: '&6&l[!] &eYou must wait &6&n%timeleft%s&e before you may chat again.'%timeleft% in the message is the seconds remaining. /chatcooldown set <n> changes the seconds live (and saves to config), /chatcooldown toggle flips it on/off at runtime.
Find-and-replace on chat messages. Type a shortcode, it swaps to a symbol.
- Config path:
Chat.ChatEmoji - Default enabled: yes
- Permission: optional.
permission: ''(the default) means everyone gets it. Set a perm node and only players with it get replacement.
Chat:
ChatEmoji:
Enabled: true
permission: ''
Emojis:
<3: ♡
:flip:: (╯°□°)╯︵ ┻━┻
:serious:: (ಠ_ಠ)Add whatever pairs you want under Emojis. Order is preserved (config order).
Per-player chat color via a GUI. Pick a color once, all your future messages get tinted. There's also a Rainbow option that randomizes a color per character.
- Config path:
Chat.ChatColor - Default enabled: yes
- Command:
/chatcolor(alias/color) opens the GUI - Perms: each swatch needs
Chatcolor.<ColorName>(e.g.Chatcolor.Red,Chatcolor.Rainbow). Click a color you don't have the perm for and you get denied.
Colors in the GUI: White, Orange, Pink, Aqua, Yellow, Lime, Dark Gray, Gray, Cyan, Purple, Blue, Green, Red (plus Rainbow via the XP bottle).
Rainbow pulls from your configurable list:
Chat:
ChatColor:
Enabled: true
RainbowColors:
- '&f'
- '&e'
- '&6'
- '&b'
- '&2'
- '&4'
- '&7'Choices persist to DATA/ChatColor.yml and reload on restart.
Same idea as ChatColor but recolors the player's display name instead of the message.
- Config path:
Chat.NameColor - Default enabled: yes
- Command:
/namecoloropens the GUI - Perms:
Namecolor.<ColorName>per swatch (e.g.Namecolor.Aqua)
Same color list as ChatColor, minus Rainbow. Note: NameColor choices aren't saved to disk, so they reset on restart.
GUI + command for player chat tags. Selecting a tag sets it as your Vault chat suffix (so it shows up via ChatFormat's {suffix}). Players can pick from predefined tags they have perms for, or set a custom text tag.
Dependencies (both hard):
-
Vault: the class is annotated
@RequiresPlugin({"Vault"})and grabs the VaultChatprovider on startup. No Vault, it returns early and does nothing. -
LuckPerms (or compatible): the admin
givepath runs a consolelp user ... permission setcommand (the configurablegiveTagCmd) to grant the tag perm node. Out of the box this is LuckPerms syntax. -
Config path:
Chat.Tags -
Default enabled: NO (
Enabled: false) -
Command:
/tags(aliases/servertags,/ctag,/customtag) -
Perms:
ctag.useto set a custom tag (CustomTagPerm);tools.givetagfor/tags give;tools.createtagfor/tags create. Equipping a predefined tag needsTags.<TagName>.
Chat:
Tags:
Enabled: false
CustomTagPerm: ctag.use
CustomMaxLength: 20
CustomTagFormat: '&8&l<%tag%&8&l>'
selected: '&e&l[!] &eYou have selected &r%tag% &eas your new tag!'
removed: '&c&l[!] &cYou have removed your &4current&c tag!'
giveTagCmd: lp user %name% permission set tags.%tag% true server=skyblock_emcSubcommands: /tags (open GUI), /tags set <tag>, /tags clear, /tags list, /tags give <player> <tag> (admin), /tags create <name> <tag> (admin). Predefined tags live in Tags.yml (auto-seeded with a bunch of defaults like Boss, OG, Twitch, YouTube on first run). giveTagCmd has a server=skyblock_emc in the default, change or drop that for your setup.
Wraps (or hides) vanilla death messages with your own format.
- Config path:
Chat.CustomDeathMessages - Default enabled: yes
- Command:
/toggledeathmessages(alias/toggledeath) flips death messages on/off at runtime
Chat:
CustomDeathMessages:
Enabled: true
message: '&7&o[-] %message%'%message% is the original vanilla death message. If the feature's showing state is toggled off, the death message is set to empty (nothing shows).
Sends a message block to players when they join. Lives under Events:, not Chat:.
- Config path:
Events.ChatJoinMOTD - Default enabled: yes
Events:
ChatJoinMOTD:
Enabled: true
MOTD:
- '&8&l>&7&m----&r %SERVERNAME% &7&m----&8&l<'
- '&2&l▎ &A&lSTORE &f%STORE%'
- '&7&o(( Currently &A&o%server_online% &7&oplayer(s) are playing ))'Two kinds of placeholders:
- ServerTools plugin variables like
%SERVERNAME%,%STORE%,%DISCORD%,%SERVER%etc. These come from the top-levelPluginVariables:config section and always work. - PlaceholderAPI placeholders like
%server_online%. These only resolve if PAPI is installed, otherwise they pass through as literal text.
Bonus: a line containing <center> gets centered (and %player% in it is replaced with the joining player's name).
Getting started
Features
- Core Features
- Chat
- World and Mob Protections
- Moderation
- Events, Cooldowns and Tasks
- Utilities and Misc
- Hopper Optimization