Custom Join / Quit Message
Custom join/quit messages with multiple pools
Custom Join / Quit Message
🚪 Custom Join / Quit Message
Custom join/quit messages with multiple pools, and permissions
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✨ Features - Random join/quit messages from configurable pools - Permission-based pools (default, vip, admin, etc.) - Separate first-join messages with automatic fallback - MiniMessage formatting (HEX, gradients, bold/italic/tags) - Optional PlaceholderAPI support (works without it) - Disable messages in specific worlds - Default Minecraft join/quit messages are suppressed



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Compatibility - Minecraft 1.18.2 – 1.21.x - Paper, Spigot, Purpur - Java 17+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Installation 1) Drop the jar into plugins/ 2) Start the server to generate config.yml 3) Edit pools and messages 4) /cj reload
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧩 Commands - /cj reload
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔐 Permissions - customjoinquit.reload - customjoinquit.pool.vip - customjoinquit.pool.admin
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧪 Usage Examples - Give VIPs a special pool (LuckPerms): /lp group vip permission set customjoinquit.pool.vip true - Disable messages in the Nether: disabled-worlds: [world_nether] - Add a bold gradient first-join message: "<gradient:#00ff87:#60efff><bold>{player}</bold> joined for the first time!</bold></gradient>"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🧩 Placeholders Built-in: - {player} = player name - {displayname} = display name - {uuid} = player UUID - {world} = current world - {server} = server name - {online} = online player count - {max} = max players PlaceholderAPI: - Any %placeholder% from PlaceholderAPI works automatically if installed.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎨 MiniMessage Examples - "<gradient:#ff7eb3:#65d6ff>Gradient Title</gradient>" - "<#ff8800><bold>HEX + Bold</bold></#ff8800>" - "<italic><green>Stylish join!</green></italic>" - "<rainbow>Rainbow welcome</rainbow>"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ℹ️ Notes - Pools are selected by priority (highest first). - First pool whose permission matches is used; empty permission acts as fallback. - If first-join list is empty, a normal join message is used.