Join and Quit Messages
1.6.0Join and Quit Messages is a plugin that gives you the opportunity to customize the messages when a player joins or leaves your server.
1.6.0latestJoinAndQuitMessages 1.6.0Aug 19, 2026 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](#upgrading).
---
If you useHex colours work again on Spigot 26.x
<#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, so1.21.8gave21and passed, but26.2gave2and 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. ---
Messages can now run a command, open a link, copy text, or show a tooltip.Clickable and hover messages
| Tag | What it does | |-----|--------------| |joinmessage: "&7[&2+&7]&a%player% <click:suggest_command:/msg %player% ><hover:show_text:&7Send a message>&8[msg]</hover></click>"<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 yourconfig.ymlcan create clickable text. Tags are read before placeholders are filled in, so another plugin supplying a custom nickname can never inject a clickablerun_commandinto your join messages.
Give brand new players their own welcome.First join messages
first_join: enabled: true message: "&7[&2+&7] &6Welcome &e%player% &6to the server! &7(&a#%playercount_online%&7)"
Anyone withSilent join and quit
joinandquitmessages.silentis not announced at all — ideal for staff and alongside vanish plugins. Suppressed messages still reach the console by default.
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.Per-world messages, managed in-game
- The message is everything after the type, so it needs no quoting - World names and/jqm world list /jqm world add <world> <join|leave> <message> /jqm world remove <world> [join|leave]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.
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 commentedA documented config.yml
config.ymlexplaining 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 apermission_messages.prioritylist to decide the order. - `/jqm test` matches 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: 1. 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. 2. Your existing config keeps working and picks up the new options automatically on first start. Nothing to migrate by hand. 3. 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. 4. Recommended: deleteconfig.ymland restart to get the fully commented version. 5. Recommended: if you use rank messages, add apermission_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 inplugins/bStats/config.yml. --- Requires: Spigot/Paper 1.16+ · Java 17+ Optional: PlaceholderAPI Full technical changelog, including internal changes: [CHANGELOG.md](https://github.com/thedutchruben/joinandquitmessages/blob… Found a problem? [Open an issue](https://github.com/thedutchruben/joinandquitmessages/issu…1.5.0Nov 22, 2025 #### Permission based Messagespermission_messages: enabled: true join: "myserver.vip": "&7[&6VIP+&7] &6%player% &7joined with style!" "myserver.premium": "&7[&5PREMIUM+&7] &5%player% &7entered the server!" leave: "myserver.vip": "&7[&6VIP-&7] &6%player% &7left the server" "myserver.premium": "&7[&5PREMIUM-&7] &5%player% &7departed"
| Command | Description | Permission | |---------|-------------|------------| |Commands
/jqm test| Test configured join message |joinandquitmessages.test| |/jqm test <message>| Test custom message |joinandquitmessages.test| |/jqm reload| Reload configuration |joinandquitmessages.reload|
| Permission | Description | Default | |------------|-------------|---------| |Permissions
joinandquitmessages.use| Access to main command |true| |joinandquitmessages.test| Test message formatting |true| |joinandquitmessages.reload| Reload configuration |op|Placeholders
- %player% : Player name - %world% : World name where the player leaves/joins - %playercount_online% : Current amount of players - %playercount_max% : Maximum amount of players1.4.0Aug 10, 2025 #### Permission-Based Messages - NEW: Players can now have custom join/quit messages based on their permissions - Configurable permission-based message system with priority handling - Example: VIP players get gold messages, Premium players get purple messages #### Commands - NEW:/jqm test- Test your configured join message with full formatting - NEW:/jqm test <custom message>- Test any custom message with colors, hex codes, and placeholders - NEW:/jqm reload- Reload configuration with proper permission checks #### Basic Permission Messagespermission_messages: enabled: true join: "myserver.vip": "&7[&6VIP+&7] &6%player% &7joined with style!" "myserver.premium": "&7[&5PREMIUM+&7] &5%player% &7entered the server!" leave: "myserver.vip": "&7[&6VIP-&7] &6%player% &7left the server" "myserver.premium": "&7[&5PREMIUM-&7] &5%player% &7departed"
| Command | Description | Permission | |---------|-------------|------------| |Commands
/jqm test| Test configured join message |joinandquitmessages.test| |/jqm test <message>| Test custom message |joinandquitmessages.test| |/jqm reload| Reload configuration |joinandquitmessages.reload|
| Permission | Description | Default | |------------|-------------|---------| |Permissions
joinandquitmessages.use| Access to main command |true| |joinandquitmessages.test| Test message formatting |true| |joinandquitmessages.reload| Reload configuration |op|1.3.0Join and Quit Messages 1.3.0Jul 9, 2025 Update dependency versions1.2.0Join and Quit Messages 1.2.0Oct 10, 2024 Add support for random messages ![Information](https://cdn.modrinth.com/data/cached_images/b71b536aef70e…
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta