GUI-based join and leave message plugin for Paper and Folia servers. Ships with 30+ customisable message sets, HEX colour support, a private MOTD system with player head rendering, first-join rewards, configurable fireworks, spawn teleportation and full vanish plugin compatibility.
Overview
BlockyJoin replaces default join and leave messages with a fully configurable system. Each "message set" is a YAML file that defines join messages, leave messages, GUI appearance, sounds and permissions independently. Multiple sets can be active simultaneously — the plugin selects the correct one based on each player's permission level.
Soft Dependencies
- PlaceholderAPI — enables
%placeholder%usage in all messages - Vanish Plugins — SuperVanish, PremiumVanish, Essentials, CMI, VanishNoPacket — suppresses messages for vanished staff automatically
Live reload. Run /bj reload after editing any file — no restart needed.
Installation
- Download BlockyJoin from BuiltByBit
- Place the JAR in your
plugins/folder - Start or restart the server — config.yml, messages.yml, menu.yml and join-leave-messages.yml generate automatically
- Edit
plugins/BlockyJoin/config.ymland the files inplugins/BlockyJoin/messages/ - Run
/bj reloadto apply changes
No hard dependencies. All vanish integrations and PlaceholderAPI support are loaded automatically when those plugins are present.
Configuration
Message Type
Controls how the join message is delivered to all online players.
message-type: "CHAT" # CHAT | ACTIONBAR | TITLE | BOSSBAR | TOAST
default-message-set: "default"
Join and Leave Messages
Fallback messages used when no message set is matched for a player.
join:
enabled: true
sound: BLOCK_NOTE_BLOCK_PLING;7;5
messages:
- "<#49FF00>[+] {player}"
leave:
enabled: true
messages:
- "<#FF3232>[-] {player}"
First Join
Separate messages sent only when a player connects for the first time. Supports {total_new_joins} to display a running count.
first-join:
enabled: true
random-message: true
spawn-on-first-join: false
sound: ENTITY_PLAYER_LEVELUP;7;5
messages:
- "<#CB1FE9>Welcome {player} to the server! [{total_new_joins}]"
Fireworks
firework:
enabled: true
first-join-only: false
type: BALL_LARGE
power: 1
flicker: true
trail: true
colors: [AQUA, RED, TEAL, WHITE]
height: 1.0 # blocks above player eye level
delay-ticks: 20
GUI Settings
gui:
shift-left-click: favorite # favorite | select | none
shift-right-click: remove-favorite
left-click: select
right-click: select
confirm-selection-gui:
enabled: true
favorite-gui:
enabled: true
Database
database:
type: "SQLITE" # SQLITE | MYSQL
mysql:
host: "localhost"
port: 3306
database: "blockyjoin"
username: "root"
password: "password"
Message Sets
Message sets live in plugins/BlockyJoin/join-leave-messages.yml as named keys. Each set defines its own join messages (supports multiple for random selection), leave messages, GUI item, permission node and whether the item glows when selected.
Built-in Sets
BlockyJoin ships with two built-in sets: default (simple green/red prefixed messages) and king (royal-themed messages with random selection, locked behind blockyjoin.set.king). Additional sets can be added freely.
Set Structure
messages:
my-set:
join:
- "<#49FF00>[+] <white>{player} joined!"
- "<#49FF00>[+] <white>Welcome, {player}!" # random per join
leave:
- "<#FF3232>[-] <white>{player} left."
item:
material: "PLAYER_HEAD"
skull: "<base64-texture>"
name: "<white>My Set {favorite-icon}"
lore:
- ""
- "<white>Preview your set here."
- ""
- "{info-lore}"
permission: "blockyjoin.set.my-set"
glow-on-select: true
Placeholders in Messages
{player} Player username
{online_count} Current player count
{max_players} Server max players
{total_new_joins} All-time first-join counter
MOTD
A private multi-line message sent directly to each player on join. Supports player head rendering — {player_head_1} through {player_head_8} render the player's own face texture alongside the text lines.
motd:
enabled: true
delay-ticks: 20 # 1 second delay before sending
lines:
- "{player_head_1} <white>Welcome to <#CB1FE9>YourServer<white>, <#CB1FE9>{player}<white>."
- "{player_head_2} "
- "{player_head_3} <white>Store: <#FFD700>store.example.com"
- "{player_head_4} <white>Discord: <#7289DA>discord.gg/example"
- "{player_head_8} <white>Type <#CB1FE9>/help <white>if you need support."
Welcome Rewards
Players can earn rewards by welcoming new joiners in chat. Configure the trigger words, reward commands and a time window after which the new player can no longer be welcomed.
first-join:
welcome-rewards:
enabled: true
welcome-words: [welcome, "welcome {player}", wb, "wb {player}"]
time-window: 15 # seconds after join to allow welcoming
cooldown: 300 # seconds between welcomes per player
exact-match: false
commands:
- "[MESSAGE] &aThanks for welcoming {player}!"
- "[CONSOLE] give {welcomer} minecraft:diamond 5"
- "[SOUND] ENTITY_PLAYER_LEVELUP {welcomer} 1 1"
Commands
Base command: /blockyjoin — aliases /bj, /blockyj, /joinmessages, /jmsg (configurable).
Permissions
| Node | Default | Description |
|---|---|---|
| blockyjoin.* | op | All BlockyJoin permissions. |
| blockyjoin.reload | op | Use /bj reload. |
| blockyjoin.gui | true | Open the message set GUI. |
| blockyjoin.test | op | Preview messages with /bj test. |
| blockyjoin.set | true | Change your own message set. |
| blockyjoin.set.other | op | Change another player's message set. |
| blockyjoin.list | op | List all loaded sets. |
| blockyjoin.admin | op | Admin commands including /bj setspawn. |
| blockyjoin.update.check | op | Check for updates via /bj update. |
| blockyjoin.update.notify | op | Receive update notifications on join. |
| blockyjoin.set.king | op | Access the king message set. |
Custom set permissions follow the pattern blockyjoin.set.<setname>. Assign this to LuckPerms groups to control access per set.
Advanced
Spawn System
spawn-settings:
enabled: false
spawn-on-join: false # teleport all players to spawn on every join
void-teleport:
enabled: false
trigger-level: -90 # Y level below which players are teleported
no-damage: true
Use /bj setspawn to save the current location, or configure coordinates manually in config.yml.
Vanish Behaviour
vanish:
show-messages: false # show join/leave messages for vanished players
fake-messages: false # send fake leave/join when vanishing/unvanishing
Command Customisation
command:
name: "blockyjoin" # rename the main command
aliases:
- "bj"
- "joinmessages"
- "jmsg"