Skip to main content
← All Guides
Player Experience · 7 min read

How to Create Custom Join and Leave Messages

Set up custom join and leave messages on your Minecraft server using EssentialsX, LuckPerms meta, PlaceholderAPI placeholders, and per-group formatting.

Why Custom Join and Leave Messages Matter

The default Minecraft join message, "Player joined the game" in plain yellow, does not tell your community anything about who just logged in. On a server with ranks, donor perks, and a strong community identity, those vanilla messages feel impersonal. Custom join and leave messages let you show prefixes, use colors, display play time, welcome first-time players differently, and even suppress messages entirely for staff using vanish. They are a small detail that makes a big difference in how polished your server feels.

EssentialsX, The Most Common Approach

If your server already runs EssentialsX, you have custom join/leave messages built in. Open plugins/Essentials/config.yml and find the following section:

# Custom join and leave messages
custom-join-message: "&8[&a+&8] &7{DISPLAYNAME}"
custom-quit-message: "&8[&c-&8] &7{DISPLAYNAME}"

The {DISPLAYNAME} placeholder pulls the player's display name, which includes their prefix and name color if set through a permissions plugin. You can use any standard color code with & as the prefix character. Other available placeholders include {USERNAME} (raw IGN), {PLAYER} (same as USERNAME), and {ONLINE} (current player count).

Disabling Vanilla Messages

When you enable custom messages in EssentialsX, it automatically suppresses the vanilla yellow join/leave text. If you are not using EssentialsX for this and instead handle it through another plugin, you may need to cancel the PlayerJoinEvent message by setting event.setJoinMessage(null) in a custom plugin, or by using a dedicated plugin like CustomJoinMessage.

Per-Group Messages with LuckPerms Meta

A flat join message gets boring when you have multiple ranks. You probably want VIP players to have a gold announcement, staff to have a red one, and default players to keep things simple. The cleanest way to achieve this is through LuckPerms meta values combined with EssentialsX or a custom plugin.

In LuckPerms, set a meta value for each group:

/lp group vip meta set join-prefix "&6&l>> &e"
/lp group admin meta set join-prefix "&c&l>> &4"
/lp group default meta set join-prefix "&7> &7"

Then, if you use a plugin that supports PlaceholderAPI, your join message can reference %luckperms_meta_join-prefix% to pull the correct prefix per group. This approach scales well, you never have to hardcode group names into your join message plugin config, you just add a meta value whenever you create a new rank.

First-Join Messages

Welcoming brand-new players with a distinct message creates a warmer atmosphere. EssentialsX does not differentiate between first join and regular join out of the box, but several methods exist:

  • EssentialsX custom-new-player-announcement, Newer versions of EssentialsX have a custom-new-player-announcement option in config.yml. Set it to something like "&a&lWelcome to the server, {DISPLAYNAME}! &7Type /rules to get started." and first-time joiners get a special broadcast.
  • FirstJoinPlus plugin, A lightweight plugin dedicated to first-join events. It supports titles, action bars, sounds, fireworks, and custom commands on first join.
  • Skript, If you run Skript, a three-line script can check player has not played before and send a custom broadcast.

PlaceholderAPI in Join Messages

If you have PlaceholderAPI installed alongside EssentialsX, you can inject dynamic data into your messages. Useful placeholders include:

PlaceholderOutput
%player_name%The player's username
%luckperms_prefix%Their rank prefix
%statistic_time_played_hours%Hours played on the server
%server_online%Current online count
%player_world%The world they joined into

Note that PlaceholderAPI support in EssentialsX join messages requires the EssentialsX build that includes PAPI hooks (all modern builds do). If placeholders appear as raw text instead of values, make sure you have the correct PAPI expansion installed, run /papi ecloud download Essentials and /papi ecloud download LuckPerms, then /papi reload.

Join Titles and Action Bar Messages

Beyond chat messages, you can greet players with a title, the large text that appears in the center of the screen. EssentialsX does not have built-in join titles, but several approaches work:

  • TitleManager, Lets you set a title and subtitle on join, with configurable fade-in, stay, and fade-out timings. Supports PlaceholderAPI.
  • DeluxeHub, A hub/lobby plugin that includes join titles, scoreboards, and tab customization aimed at lobby servers.
  • Custom command on join, EssentialsX supports running commands on join via the essentials.spawn-on-join feature combined with a command plugin. You can trigger /title %player% title {"text":"Welcome back!"} through a plugin like CMI.

Action bar messages (the text above the hotbar) are another option. They are less intrusive than titles and work well for short welcome messages or tips. Plugins like CMI and TAB can display action bar text on join.

Private Join for Vanished Staff

Staff members using vanish should not trigger a join message, it defeats the purpose of being invisible. EssentialsX handles this automatically: if a player joins while vanished (using /v or having the essentials.silentjoin permission), no join message is broadcast. If you use a different vanish plugin like SuperVanish or PremiumVanish, those plugins also suppress join/leave messages for vanished players out of the box.

You can grant the silent-join permission to staff groups in LuckPerms:

/lp group admin permission set essentials.silentjoin.vanish true

Broadcast Formatting Tips

A few formatting guidelines to keep join messages looking clean:

  • Keep messages short, one line maximum. Nobody wants a paragraph every time someone logs in.
  • Use consistent formatting across all ranks. Change the color or prefix, but keep the structure identical so chat does not look chaotic.
  • Avoid overusing bold and magic formatting codes (&k, &l). They are attention-grabbing but fatiguing when repeated 50 times an hour on a busy server.
  • Test your messages at different client widths. Chat on Bedrock clients (via Geyser crossplay) may wrap differently than Java.

Sound Effects on Join

Some servers play a subtle sound when a player joins, a chime, a level-up ding, or a custom sound from a resource pack. This is a small touch that makes the server feel alive. EssentialsX does not handle join sounds natively, but you can achieve it with a Skript one-liner:

on join:
    play sound "entity.experience_orb.pickup" to all players at volume 0.5

Or use a plugin like JoinSound that provides config-based sound assignment with per-permission support, so VIP players trigger a different sound than default players. Keep the volume low and the sound unobtrusive, nobody wants a trumpet fanfare 80 times a day.

Common Mistakes to Avoid

A few pitfalls that catch server owners when setting up custom join messages:

  • Forgetting to disable the vanilla message, If your custom message plugin does not suppress the default, players see two join messages: the vanilla yellow one and your custom one. Double-check that the vanilla message is cancelled.
  • Using &r without setting a new color, The reset code clears all formatting and defaults to white. If your message continues after a reset without specifying a new color, the remaining text appears in plain white, which may look inconsistent.
  • Not testing with a fresh player, First-join messages only trigger once. If you configure them and test with your existing account, you will not see the first-join version. Use an alt account or clear your player data file to test properly.

Once your join messages are set, pair them with a custom tab list and scoreboard to round out the player experience.

See these features in action: Astroworld MC runs economy survival with custom tab, scoreboard, join messages and crossplay. IP: play.astroworldmc.com

Related Tools & Resources

🔧

Minecraft Tools

Calculators, generators & server tools

🧱

Item Database

Browse all Minecraft items, stats & recipes

⚒️

Crafting Recipes

Visual crafting guides for every recipe