
Join and Quit Messages
Join and Quit Messages is a plugin that gives you the opportunity to customize the messages when a player joins or leaves your server.
Список изменений
JoinAndQuitMessages 1.6.0
The biggest release yet: clickable messages, first-join and per-world messages, in-game commands to manage them — and a fix for hex colours, which had silently stopped working on modern Spigot.
Heads up: this release now requires Java 17 or newer. See Upgrading.
🚨 Hex colours work again on Spigot 26.x
If you use <#RRGGBB> colours, they had stopped rendering entirely on recent Spigot
builds — every hex tag showed as plain text.
The version check read the minor version number, so 1.21.8 gave 21 and passed,
but 26.2 gave 2 and failed the "is this 1.16+?" test. Hex support is now detected by
asking the server what it can actually do, so it cannot break again when the version
scheme changes.
✨ Clickable and hover messages
Messages can now run a command, open a link, copy text, or show a tooltip.
joinmessage: "&7[&2+&7]&a%player% <click:suggest_command:/msg %player% ><hover:show_text:&7Send a message>&8[msg]</hover></click>"
| Tag | What it does |
|---|---|
<click:run_command:/spawn>text</click> | Runs the command as the player who clicks |
<click:suggest_command:/msg Steve >text</click> | Puts the command in their chat box |
<click:open_url:https://example.com>text</click> | Opens a link |
<click:copy_to_clipboard:hello>text</click> | Copies text to their clipboard |
<hover:show_text:&7Tooltip>text</hover> | Shows a tooltip on hover |
- Click and hover combine and nest
- Colours carry across a tag —
<#FF0000>a <click:...>b</click> cstays red throughout - Placeholders work inside a tag's value:
<click:suggest_command:/msg %player% > /jqm test <message>renders the result clickable and tells you about typos, instead of leaving you with a tag that quietly does nothing
Only messages in your config.yml can create clickable text. Tags are read before
placeholders are filled in, so another plugin supplying a custom nickname can never inject
a clickable run_command into your join messages.
🎉 First join messages
Give brand new players their own welcome.
first_join:
enabled: true
message: "&7[&2+&7] &6Welcome &e%player% &6to the server! &7(&a#%playercount_online%&7)"
🤫 Silent join and quit
Anyone with joinandquitmessages.silent is not announced at all — ideal for staff and
alongside vanish plugins. Suppressed messages still reach the console by default.
🌍 Per-world messages, managed in-game
Different messages depending on which world the player is in — no YAML editing required. Changes save and apply straight away, and work from the console too.
/jqm world list
/jqm world add <world> <join|leave> <message>
/jqm world remove <world> [join|leave]
- The message is everything after the type, so it needs no quoting
- World names and
join/leaveare tab-completable - Adding a message while the feature is off switches it on for you
- Worlds that are not loaded yet can still be configured
Per-world messages use the world the player is in at the moment they join or quit — they are not triggered by walking through a portal.
📋 A documented config.yml
The plugin used to build its config in code, leaving you with an uncommented file and the
wiki for company. It now ships a fully commented config.yml explaining every option,
every placeholder, and which message wins when several could apply.
Other improvements
- Rank messages now have a real priority. Previously a player holding several
configured permissions got an unpredictable message that could change between restarts.
Add a
permission_messages.prioritylist to decide the order. /jqm testmatches reality. The test command and the real join message used different placeholder names, so a preview could render differently than the real thing.&is no longer replaced blindly. "Tom & Jerry joined" rendered as "Tom § Jerry joined". Only&followed by a real colour code is translated now, and translation happens after placeholders, so codes coming out of PlaceholderAPI are coloured too./jqm quittest— quit messages were previously impossible to preview.- Smarter random messages — the same line is never picked twice in a row.
- An empty random message list no longer errors; it falls back to your default message.
- New built-in placeholders —
%displayname%, plus%online%/%max%as aliases.
Commands
| Command | Description | Permission |
|---|---|---|
/jqm test [message] | Preview a join message | joinandquitmessages.test |
/jqm quittest [message] | Preview a quit message | joinandquitmessages.test |
/jqm world list | List worlds with a configured message | joinandquitmessages.world |
/jqm world add <world> <join|leave> <message> | Set a per-world message | joinandquitmessages.world |
/jqm world remove <world> [join|leave] | Remove a per-world message | joinandquitmessages.world |
/jqm reload | Reload the configuration | joinandquitmessages.reload |
Permissions
| Permission | Description | Default |
|---|---|---|
joinandquitmessages.use | Use the main command | true |
joinandquitmessages.test | Preview messages | true |
joinandquitmessages.reload | Reload the configuration | op |
joinandquitmessages.world | Manage per-world messages | op |
joinandquitmessages.silent | Join and quit unannounced | false |
joinandquitmessages.checkupdate | Be told about updates | op |
Upgrading
From any earlier version — please read:
- Java 17 or newer is now required. Any server running a Minecraft version this plugin targets already meets that, but double-check if you are on an old JVM.
- Your existing config keeps working and picks up the new options automatically on first start. Nothing to migrate by hand.
- Small behaviour change: a stray
&in a message now shows as a literal&instead of turning into a colour character. If you relied on that, replace it with a real code. - Recommended: delete
config.ymland restart to get the fully commented version. - Recommended: if you use rank messages, add a
permission_messages.prioritylist so the order is yours rather than arbitrary.
Metrics
bStats now records which features are actually in use, so development can follow what
servers really configure. Only feature on/off flags and counts are sent — never message
content, player data, or world names. It can still be disabled in
plugins/bStats/config.yml.
Requires: Spigot/Paper 1.16+ · Java 17+ Optional: PlaceholderAPI
Full technical changelog, including internal changes: CHANGELOG.md
Found a problem? Open an issue.
