Advanced messaging extension for AuthMe Reloaded. Group-based Chat, ActionBar, and Titles on player login and registration, with optional PlaceholderAPI and Geyser/Floodgate support.
Fully customize your authentication messages with style
AuthMeMessages is a lightweight and highly configurable addon designed to enhance the visual and communication experience of AuthMe.
It allows you to customize, center, color, and format all login, registration and logout messages, giving your server a much more professional and polished look — and now includes a built-in Premium (Java/Bedrock) account verification system.
Perfect for servers that want to replace boring default messages with clean, modern, and fully branded ones.
✨ Main Features
✅ 100% configurable messages from config.yml
✅ Compatible with AuthMe Reloaded
✅ Dynamic placeholder support (PlaceholderAPI)
✅ Automatic chat text centering
✅ HEX colors (&#RRGGBB) and legacy & color codes
✅ Premium account verification via Mojang API
✅ Full Bedrock/Geyser/Floodgate support
✅ Titles, subtitles, sounds and BossBars per event
✅ Actionbar messages per event
✅ Timed action sequences (wait: delays between actions)
✅ Smart config auto-update (new options added without wiping your edits)
✅ Advanced text formatting utilities
✅ Reload command (no server restart required)
✅ Lightweight and optimized performance
✅ Easy setup and configuration
✅ No heavy dependencies
🧩 What can you customize?
Login messages
Registration messages
Logout messages (authenticated and non-authenticated)
Group-specific messages by permission, and Bedrock-only / Java-only variants
⚡ Commands
/authmemessages reload
Instantly reloads the configuration (including the premium list), no restart needed.
/authmemessages premium <add|remove> <player>
Admin command to manually manage a player's premium status.
/premium
Player command. Confirm twice within 30 seconds to verify your account with Mojang (Bedrock players are verified instantly, no Mojang check needed).
🎨 Example
✨ Welcome to the server ✨
Please login using /login
First impressions matter.
A clean and well-designed authentication system — now with premium account verification and full Bedrock support — makes your server feel more professional from the very first second a player joins.
### 🚀 What’s New
### 🔐 Premium Verification System (new)
- New `/premium` command: the player confirms twice within a 30-second window, then the account is verified against Mojang's API asynchronously (never blocks the main thread).
- If the account is premium → it's saved to `premium.yml`, a confirmation title/sound is shown, and the player won't need to log in again.
- If it's not premium → the player is kicked with a configurable kick message (now built as a modern `Component` instead of the deprecated `kickPlayer(String)` method on Paper).
- If Mojang doesn't respond (timeout, 429, no connection) → the error is reported and the player is **not** kicked over a temporary API failure.
- New admin command `/authmemessages premium <add|remove> <player>` to manage the list manually.
- New `PremiumManager`, which persists the premium player list in `premium.yml` (names stored lowercase to avoid duplicates).
- Auto-login for players marked as premium: if they join without being authenticated, the plugin registers them (with a random password) and logs them in automatically.
- New placeholder `%authmemessages_is_premium%` (plus its customizable version `is_premium_YES_NO`).
### 📱 Bedrock Player Support (Geyser/Floodgate)
- Bedrock players are detected via reflection (`BedrockUtil`), without a hard dependency on the Floodgate library.
- They're automatically marked as premium when using `/premium`, skipping the Mojang check (their identity is already guaranteed by Xbox Live login).
- New `bedrock_only: true` / `java_only: true` filters to target messages to each platform specifically.
- Fixed a bug where the `[Bedrock]` tag broke internal console commands (e.g. in Multiverse).
### 🎨 Full HEX Color Support
- New `ColorUtil`, which translates `&#RRGGBB` codes into real RGB color in addition to the traditional `&` codes.
### 🐉 BossBars
- New temporary, configurable BossBars (color, style, duration) for login, register, logout, and logout-without-authentication.
### ⏱️ Delays Between Actions
- New `wait: TICKS` action to pause between messages, sounds, or commands and build timed sequences.
### 🔄 Smart Config Auto-Update
- When updating the `.jar`, the plugin detects new keys from the bundled `config.yml` and automatically adds them to the user's file without erasing their custom edits.
- The `/authmemessages reload` command now also reloads the `premium.yml` list in case it was edited by hand.
## 🐛 Bug Fixes
- **Memory leaks / ghost tasks:** the periodic cleanup tasks (`AuthListener`, `AuthMePlaceholders`, `PremiumCommand`) are now properly cancelled on `/authmemessages reload` or plugin disable, instead of continuing to run in the background.
- **Global placeholders broken in HolographicDisplays:** placeholders like `total_online` used to fail when queried without an attached player; the `player == null` check was moved after evaluating them so holograms can read them.
- **`is_first_join` cleared too early:** it's now unmarked only on quit (`onQuit`) instead of at login time, so it stays true for the whole first session.
- **Infinite recursion in placeholders:** the `isAuthenticated` and `isRegistered` lookups were split apart to prevent loops when they queried each other.
- **Native auto-login wasn't firing welcome messages:** the old `handlePremiumAutoLogin` was replaced with `verifyLoginState`/`notifyLogin`, which detects any player authenticated via Floodgate, forceLogin, or another auto-login plugin, guaranteeing login messages are never missed (with a cooldown to avoid duplicates if the normal event does fire shortly after).
- **More robust premium registration/login:** they now run in separate `try/catch` blocks, so if pre-registration fails (e.g. a false negative from `isRegistered()`), the forced login is still attempted instead of aborting the whole process.
- **`/reload` left stale references:** the listener and the placeholder expansion are now correctly re-registered, updating the plugin's internal reference via reflection.
- **`/premium` actions now use the same engine as login/register/logout:** every premium message list now supports `message:`, `centered_message:`, `playsound:`, `title:`, `player:`, `console:`, `wait:`, and `to_all:`, not just plain text.
## ⚠️ Migration Notes
- The `premium.yml` file is automatically created in the plugin's folder the first time the premium system is used.
- The `/authmemessages` command now requires the `authmemessages.admin` permission defined in `plugin.yml` (the `premium` subaction didn't exist before this version).
- Check your `config.yml`: although your existing values are preserved, the auto-update will add the new keys (`premium-*`, `geyser`, `bossbars`, etc.) the first time the plugin starts.
```
# =====================================================
# AuthMeMessages - Configuration (v1.4.0)
# =====================================================
# --- COLOR FORMATTING ---
# Legacy: &a, &b, &l, etc.
# HEX (RGB): &#FF0000, �BFFF, etc.
#
# --- INTERNAL PLACEHOLDERS ---
# %player% → Player name
# %online% → Online players count
# %max_players% → Server max players
# %time% → Current time (HH:mm)
# %date% → Current date (dd/MM/yyyy)
# {prefix} → Plugin prefix
#
# --- PLACEHOLDERAPI PLACEHOLDERS (%authmemessages_...%) ---
#
# === PLAYER STATUS ===
# %authmemessages_is_authenticated% → yes/no - Is logged in?
# %authmemessages_is_logged% → yes/no - Alias of above
# %authmemessages_is_registered% → yes/no - Is registered?
# %authmemessages_is_not_authenticated% → yes/no - Not logged in?
# %authmemessages_is_first_join% → yes/no - Is first time joining?
# %authmemessages_is_premium% → yes/no - Is on the premium list? (NEW)
#
# === CUSTOMIZABLE STATUS (yes_no) ===
# %authmemessages_is_authenticated_yes_no% → Shows "yes" if logged in, "no" if not
# %authmemessages_is_authenticated_✔_✖% → Shows ✔ if logged in, ✖ if not
# %authmemessages_is_authenticated_&aOn_&cOff%→ With colors
# %authmemessages_is_registered_yes_no% → Same pattern for is_registered
# %authmemessages_is_first_join_yes_no% → Same pattern for is_first_join
# %authmemessages_is_premium_yes_no% → Same pattern for is_premium (NEW)
#
# === VISUALS (icons and texts) ===
# %authmemessages_status_icon% → &a✔ / &c✖ / &7? (based on status)
# %authmemessages_status_text% → &aAuthenticated / &cUnauthenticated / &7Unregistered
# %authmemessages_status_letter% → &aA / &cP / &7G (A=Auth, P=Pending, G=Guest)
# %authmemessages_name_with_status% → Colored name based on status
#
# === GLOBAL (Server) ===
# %authmemessages_total_registered% → Total registered accounts
# %authmemessages_total_online% → Connected players
# %authmemessages_total_authenticated% → Logged in players
# %authmemessages_total_not_authenticated% → Unauthenticated players
#
# === INFO ===
# %authmemessages_ip% → Player's IP
#
# External PlaceholderAPI support included (LuckPerms, etc.)
# NOTE: global placeholders (total_online, total_registered, etc.) work with no
# player attached, so they are safe to use inside HolographicDisplays.
#
# =====================================================
# --- AVAILABLE ACTIONS PER LINE ---
# Work the same way inside "messages" (login/register/logout/logout-not-authenticated
# AND every "premium-*" message) and inside "commands". Freely combinable, in any
# order, and all of them accept a "to_all:" prefix.
#
# message: TEXT → Send message to player
# to_all: message: TEXT → Send message to everyone
# centered_message: TEXT → Send centered message
# to_all: centered_message: TEXT → Send centered message to everyone
# playsound: SOUND VOLUME PITCH → Play sound for player
# to_all: playsound: SOUND VOLUME PITCH → Play sound for everyone
# title: FADEIN;STAY;FADEOUT;TITLE;SUBTITLE → Title/subtitle for player (times in ticks) (NEW)
# to_all: title: FADEIN;STAY;FADEOUT;TITLE;SUBTITLE → Same title for every online player (NEW)
# title: TEXT → Short form: title with default times (10;70;20), no subtitle (NEW)
# player: command → Execute command as the player (without /)
# to_all: player: command → Every online player executes the command as themselves
# console: command → Execute command from console (without /)
# to_all: console: command → Execute from console once per online player
# wait: TICKS → Pause before next action (20 ticks = 1 sec) (NEW)
#
# A plain text line with no prefix is sent as "message:" (not centered).
#
# --- GROUP FILTERS ---
# permission: "vip.diamond" → Requires permission (use | for multiple)
# bedrock_only: true → Triggers only for Bedrock players (Geyser) (NEW)
# java_only: true → Triggers only for Java players (NEW)
# Groups are evaluated in the order they're defined and do NOT inherit "default"
# lines: repeat them inside the group if you want default lines plus something extra.
#
# =====================================================
# --- PREMIUM VERIFICATION SYSTEM (NEW) ---
# /premium → Player command. Requires two
# confirmations within 30 seconds,
# then verifies the account against
# Mojang's API (async, non-blocking).
# Bedrock/Geyser players are approved
# instantly, skipping the Mojang check.
# /authmemessages premium <add|remove> <player> → Admin command to manage the list
# manually (permission: authmemessages.admin).
# Related messages: premium-warning, premium-checking, premium-verified,
# premium-bedrock-verified, premium-already, premium-not-premium-kick,
# premium-check-error, premium-admin-*. All support the actions listed above.
# Verified players are stored in premium.yml and auto-logged in on join.
#
# --- BOSSBARS (NEW) ---
# Configurable per event under "bossbars.<login|register|logout|...>".
# title, color (BLUE, GREEN, PINK, PURPLE, RED, WHITE, YELLOW),
# style (SOLID, SEGMENTED_6, SEGMENTED_10, SEGMENTED_12, SEGMENTED_20),
# stay (display time in ticks).
#
# --- ACTIONBAR (NEW) ---
# Configurable per event under "actionbar.<login|register|logout|...>.default.message".
#
# --- GEYSER / FLOODGATE (NEW) ---
# geyser.enabled: true|false → Enable Bedrock-specific handling
# geyser.bedrock_suffix → Suffix/tag appended for Bedrock players
# Only takes effect if the "floodgate" plugin is present (soft-dependency).
# =====================================================
```
# 🚀 What’s New
This update introduces powerful new customization tools, modern server features, and critical optimizations to make your authentication messages smarter and more dynamic than ever:
⏱️ Individual Action Delays: You can now pause between actions! Add - "wait: 20" (20 ticks = 1 second) to create timed sequences of messages, sounds, or commands.
🐉 BossBar Support: Display beautiful, temporary BossBars when a player logs in, registers, or leaves. Fully customizable colors and styles!
📱 Platform-Specific Messages (Geyser/Floodgate): Target Bedrock or Java players specifically by simply adding bedrock_only: true or java_only: true to your groups. Give your mobile players a unique welcome!
🎨 Full HEX Color Support: Say goodbye to simple colors. Use the &#RRGGBB format to bring modern, vibrant RGB colors to your messages and UI.
🔄 Smart Auto-Updating Config: Updating the .jar will no longer require deleting your configuration! The plugin now automatically injects new features into your config.yml without touching your custom edits.
🐛 Major Bug Fixes & Optimizations:
Fixed a bug where the [Bedrock] tag would break internal console commands (like Multiverse).
Fixed memory leaks causing ghost tasks when using the reload command.
Fixed global placeholders (like total online) breaking when used in HolographicDisplays.
Fixed %authmemessages_is_first_join% prematurely clearing upon login.
```
# =====================================================
# AuthMeMessages - Configuration
# =====================================================
# --- COLOR FORMATTING ---
# Legacy: &a, &b, &l, etc.
# HEX (RGB): &#FF0000, �BFFF, etc.
#
# --- INTERNAL PLACEHOLDERS ---
# %player% → Player name
# %online% → Online players count
# %max_players% → Server max players
# %time% → Current time (HH:mm)
# %date% → Current date (dd/MM/yyyy)
# {prefix} → Plugin prefix
#
# --- PLACEHOLDERAPI PLACEHOLDERS (%authmemessages_...%) ---
#
# === PLAYER STATUS ===
# %authmemessages_is_authenticated% → yes/no - Is logged in?
# %authmemessages_is_logged% → yes/no - Alias of above
# %authmemessages_is_registered% → yes/no - Is registered?
# %authmemessages_is_not_authenticated% → yes/no - Not logged in?
# %authmemessages_is_first_join% → yes/no - Is first time joining?
#
# === CUSTOMIZABLE STATUS (yes_no) ===
# %authmemessages_is_authenticated_yes_no% → Shows "yes" if logged in, "no" if not
# %authmemessages_is_authenticated_✔_✖% → Shows ✔ if logged in, ✖ if not
# %authmemessages_is_authenticated_&aOn_&cOff%→ With colors
#
# === VISUALS (icons and texts) ===
# %authmemessages_status_icon% → &a✔ / &c✖ / &7? (based on status)
# %authmemessages_status_text% → &aAuthenticated / &cUnauthenticated / &7Unregistered
# %authmemessages_status_letter% → &aA / &cP / &7G (A=Auth, P=Pending, G=Guest)
# %authmemessages_name_with_status% → Colored name based on status
#
# === GLOBAL (Server) ===
# %authmemessages_total_registered% → Total registered accounts
# %authmemessages_total_online% → Connected players
# %authmemessages_total_authenticated% → Logged in players
# %authmemessages_total_not_authenticated% → Unauthenticated players
#
# === INFO ===
# %authmemessages_ip% → Player's IP
#
# External PlaceholderAPI support included (LuckPerms, etc.)
#
# =====================================================
# --- AVAILABLE ACTIONS PER LINE ---
# message: TEXT → Send message to player
# to_all: message: TEXT → Send message to everyone
# centered_message: TEXT → Send centered message
# to_all: centered_message: TEXT → Send centered message to everyone
# playsound: SOUND VOLUME PITCH → Play sound for player
# to_all: playsound: SOUND VOLUME PITCH → Play sound for everyone
# wait: TICKS → Pause before next action (20 ticks = 1 sec)
#
# --- COMMANDS ---
# player: command → Execute as player (without /)
# console: command → Execute as console (without /)
# to_all: console: command → Execute as console for every online player
# wait: TICKS → Pause before executing the next command
#
# --- GROUP FILTERS ---
# permission: "vip.diamond" → Requires permission (use | for multiple)
# bedrock_only: true → Triggers only for Bedrock players (Geyser)
# java_only: true → Triggers only for Java players
# =====================================================
```
Now you have complete control over how login and register messages look and behave.
# 🚀 What’s New
This update introduces powerful new customization tools to make your authentication messages smarter and more dynamic:
- ✨ **Added placeholder support for dynamic player data**
- 🎯 **New actions system to trigger behaviors when messages are sent**
- 🖥️ **Improved centered text formatting**
- 🎨 **Full HEX color & formatting support**
- ⚙️ **Expanded config options for easier customization**
- 🔄 **Reload command to apply changes instantly**
- 🚀 **Performance optimizations and cleaner message handling**
```
# =====================================================
# AuthMeMessages - Configuración
# =====================================================
# Colores con &
#
# Placeholders internos de este plugin:
# %player% → Nombre del jugador
# %online% → Jugadores online
# %max_players% → Máximo de jugadores
# %time% → Hora actual (HH:mm)
# %date% → Fecha actual (dd/MM/yyyy)
# {prefix} → Prefijo del plugin
#
# Placeholders de PlaceholderAPI (%authmemessages_...%):
#
# === ESTADO DEL JUGADOR ===
# %authmemessages_is_authenticated% → yes/no - ¿Está logueado?
# %authmemessages_is_logged% → yes/no - Alias de arriba
# %authmemessages_is_registered% → yes/no - ¿Está registrado?
# %authmemessages_is_not_authenticated% → yes/no - ¿NO está logueado?
# %authmemessages_is_first_join% → yes/no - ¿Primera vez en el servidor?
#
# === PERSONALIZABLES (sí_no) ===
# %authmemessages_is_authenticated_si_no% → Muestra "si" si está logueado, "no" si no
# %authmemessages_is_authenticated_✔_✖% → Muestra ✔ si está logueado, ✖ si no
# %authmemessages_is_authenticated_&aOnline_&cOffline% → Con colores
# %authmemessages_is_registered_✔_✖% → Igual para registro
# %authmemessages_is_first_join_&aNuevo_&7Antiguo% → Igual para primera vez
#
# === VISUALES (iconos y textos) ===
# %authmemessages_status_icon% → &a✔ / &c✖ / &7? (según estado)
# %authmemessages_status_text% → &aAutenticado / &cNo autenticado / &7No registrado
# %authmemessages_status_letter% → &aA / &cP / &7G (A=Auth, P=Pending, G=Guest)
# %authmemessages_name_with_status% → Nombre coloreado según estado
#
# === GLOBALES (servidor) ===
# %authmemessages_total_registered% → Total de cuentas registradas
# %authmemessages_total_online% → Jugadores conectados
# %authmemessages_total_authenticated% → Jugadores logueados
# %authmemessages_total_not_authenticated% → Jugadores no logueados (registrados pero sin login)
#
# === INFORMACIÓN ===
# %authmemessages_ip% → IP del jugador
#
# PlaceholderAPI externo también soportado (LuckPerms, etc.)
#
# =====================================================
# Acciones disponibles por línea:
# message: TEXTO → Mensaje al jugador
# to_all: message: TEXTO → Mensaje a todos
# centered_message: TEXTO → Mensaje centrado
# to_all: centered_message: TEXTO → Mensaje centrado a todos
# playsound: SOUND VOLUME PITCH → Sonido al jugador
# to_all: playsound: SOUND VOLUME PITCH → Sonido a todos
#
# Comandos:
# player: comando → Ejecuta como jugador (sin /)
# console: comando → Ejecuta como consola (sin /)
# to_all: console: comando → Ejecuta como consola para cada jugador online
#
# Permisos en grupos:
# permission: "vip.diamond" → Un solo permiso
# permission: "vip.diamond | vip.gold | admin" → Múltiples permisos (cualquiera funciona)
# =====================================================
```
Now you have complete control over how login and register messages look and behave.
📌 AuthMeMessages
AuthMeMessages es un plugin ligero y altamente configurable que amplía AuthMe Reloaded, permitiéndote enviar mensajes personalizados cuando un jugador se registra o inicia sesión en el servidor.
Está diseñado para servidores modernos y ofrece soporte para mensajes por grupos, ActionBar, Titles, comandos automáticos, delays configurables y compatibilidad con PlaceholderAPI y Geyser/Floodgate, todo sin afectar el rendimiento.
🧾 Resumen corto
Mensajes avanzados para AuthMe Reloaded.
Chat, ActionBar y Titles por grupos al registrarse o iniciar sesión, con soporte PlaceholderAPI y Geyser/Floodgate.
✨ Características
📢 Mensajes de chat al login y registro
🧠 Sistema de grupos con permisos (LuckPerms friendly)
🔊 ActionBar y Titles configurables y por grupos
⏳ Delay configurable por acción
🔄 /authmemessages reload sin reiniciar el servidor
🔧 Ejecución de comandos automáticos
🌍 Compatibilidad con Geyser / Floodgate (detección Bedrock)
🧩 Soporte completo para PlaceholderAPI
🎨 Prefijo dinámico {prefix} y colores con &
🔒 Permisos granulares por acción
⚙️ Compatibilidad
✔ Minecraft 1.21.x
✔ Paper / Spigot
✔ AuthMe Reloaded
✔ PlaceholderAPI (opcional)
✔ LuckPerms (opcional)
✔ Floodgate / Geyser (opcional)