All versions
1.4.0
Release
AuthMeMessages 1.4.02 months ago 172
Compatibility
Minecraft: Java Edition
26.2
26.1.x
1.21.x
Platforms
Bukkit
Paper
Spigot
Changes
π Whatβs New
π Premium Verification System (new)
- New
/premiumcommand: 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
Componentinstead of the deprecatedkickPlayer(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.
- If the account is premium β it's saved to
- New admin command
/authmemessages premium <add|remove> <player>to manage the list manually. - New
PremiumManager, which persists the premium player list inpremium.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 versionis_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: truefilters 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&#RRGGBBcodes 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: TICKSaction 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 bundledconfig.ymland automatically adds them to the user's file without erasing their custom edits. - The
/authmemessages reloadcommand now also reloads thepremium.ymllist 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 reloador plugin disable, instead of continuing to run in the background. - Global placeholders broken in HolographicDisplays: placeholders like
total_onlineused to fail when queried without an attached player; theplayer == nullcheck was moved after evaluating them so holograms can read them. is_first_joincleared 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
isAuthenticatedandisRegisteredlookups were split apart to prevent loops when they queried each other. - Native auto-login wasn't firing welcome messages: the old
handlePremiumAutoLoginwas replaced withverifyLoginState/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/catchblocks, so if pre-registration fails (e.g. a false negative fromisRegistered()), the forced login is still attempted instead of aborting the whole process. /reloadleft stale references: the listener and the placeholder expansion are now correctly re-registered, updating the plugin's internal reference via reflection./premiumactions now use the same engine as login/register/logout: every premium message list now supportsmessage:,centered_message:,playsound:,title:,player:,console:,wait:, andto_all:, not just plain text.
β οΈ Migration Notes
- The
premium.ymlfile is automatically created in the plugin's folder the first time the premium system is used. - The
/authmemessagescommand now requires theauthmemessages.adminpermission defined inplugin.yml(thepremiumsubaction 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).
# =====================================================
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:lW3dMg6S:FDCnrW5U"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:lW3dMg6S:FDCnrW5U"
}

