Releases: Hayston1001/FastLoginPlus
v0.0.6
ChangeLog
v0.0.6
- Change
autoRegister,premiumUuid,nameChangeCheckdefaults totrue - Change
/crackeddefault permission fromtruetoop - Optimize config comments and sections
- Clarify
offline-whitelistonly controls access, not registration - Add
LOGIN-FLOW.mddocumentation
- 将
autoRegister、premiumUuid、nameChangeCheck默认值改为true - 将
/cracked默认权限从true改为op - 优化配置文件注释和分区
- 明确
offline-whitelist仅控制访问权限,不负责注册 - 新增
LOGIN-FLOW.md登录流程文档
v0.0.5
ChangeLog
v0.0.5
AuthMe 6.0 Compatibility / AuthMe 6.0 兼容
Full compatibility with AuthMe 6.0's premium system. FLP auto-detects AuthMe version at startup and adapts without user intervention:
- Runtime version detection — checks for
PendingPremiumCacheclass existence (more reliable than version string parsing) - Premium state injection — after Mojang verification, injects
PendingPremiumCache+PremiumLoginVerifiervia reflection to skip AuthMe's Pre-Join dialog - Auto-registration — new premium players are force-registered in AuthMe's database and marked as premium
- Session restore — respects AuthMe 6.0's own premium bypass instead of interfering with it
/flpcommand namespace — when AuthMe 6.0 is detected, FLP registers commands under/flp(e.g./flp premium) to avoid conflict with AuthMe's/premium- Startup logging — detailed AuthMe compatibility info on server start (version, enablePremium status, active behavior)
- All reflection calls wrapped in try-catch — falls back to no-op if AuthMe internal classes change
完整兼容 AuthMe 6.0 的正版系统。FLP 启动时自动检测 AuthMe 版本并适配,无需用户手动配置:
- 运行时版本检测 — 通过
PendingPremiumCache类存在性判断(比版本号解析更可靠) - 正版状态注入 — Mojang 验证后通过反射注入
PendingPremiumCache+PremiumLoginVerifier,跳过 AuthMe 的 Pre-Join 对话框 - 自动注册 — 新正版玩家会被强制注册到 AuthMe 数据库并标记为 premium
- 会话恢复 — 尊重 AuthMe 6.0 自身的 premium 跳过机制,不再互相干扰
/flp命令命名空间 — 检测到 AuthMe 6.0 时,FLP 命令注册为/flp(如/flp premium),避免与 AuthMe 的/premium冲突- 启动日志 — 服务器启动时输出详细的 AuthMe 兼容信息(版本、enablePremium 状态、当前行为)
- 所有反射调用都有 try-catch 保护 — AuthMe 内部类变更时自动降级为空操作
v0.0.4
ChangeLog
v0.0.4
Session Retry / 会话验证重试
Added automatic retry for Mojang session server verification (Spigot+ProtocolLib only):
- When
hasJoinedfails due to a network error (IOException), the plugin now retries up tomojang-retry-counttimes (default 3) withmojang-retry-delayms between attempts (default 1000) - HTTP 204 (auth rejection) is NOT retried — only network errors
- New kick message
session-retry-exhaustedshown when all retries fail
新增 Mojang 会话服务器验证自动重试(仅 Spigot+ProtocolLib):
- 当
hasJoined因网络错误(IOException)失败时,插件会自动重试,最多mojang-retry-count次(默认 3),每次间隔mojang-retry-delay毫秒(默认 1000) - HTTP 204(认证拒绝)不会重试,仅重试网络错误
- 所有重试耗尽后显示新的踢出消息
session-retry-exhausted
Log Improvement / 日志优化
Improved login flow log readability:
- Replaced raw ProtocolLib packet dump with human-readable messages
- Moved internal details (packet type override, encryption setup) to DEBUG level
- Added "Verifying session for {player}" log at session check start
优化登录流程日志可读性:
- 用人类可读的消息替代原始 ProtocolLib 包名输出
- 将内部细节(包类型覆盖、加密初始化)降为 DEBUG 级别
- 新增"Verifying session for {player}"日志,标识验证开始
Dependency / 依赖更新
- Mockito 5.17.0 → 5.18.0 (fixes JDK 25 ByteBuddy compatibility / 修复 JDK 25 ByteBuddy 兼容性)
v0.0.3
ChangeLog
v0.0.3
SkinsRestorer Compatibility / SkinsRestorer 兼容性
Fixed FastLogin overriding SkinsRestorer custom skins (TuxCoding/FastLogin#1347):
- Player skins set via SkinsRestorer's
/skincommand are now preserved — FastLoginPlus skips its own skin when SR has a custom skin for the player - Added
SkinsRestorerCompathelper using SR's official API (PlayerStorage.getSkinIdOfPlayer) - SkinsRestorer listed as
softdependinplugin.ymlto ensure correct load order
修复 FastLogin 覆盖 SkinsRestorer 自定义皮肤的问题(TuxCoding/FastLogin#1347):
- 通过 SkinsRestorer
/skin命令设置的皮肤现在会被保留 — 当 SR 有玩家的自定义皮肤时,FastLoginPlus 会跳过自身皮肤 - 新增
SkinsRestorerCompat辅助类,使用 SR 官方 API(PlayerStorage.getSkinIdOfPlayer) plugin.yml中添加 SkinsRestorer 为softdepend,确保加载顺序正确
Bug Fixes / Bug 修复
-
forwardSkin: falsenot working on Paper: ThePaperCacheListenerwas always registered on Paper regardless of theforwardSkinconfig. Now respects the setting. -
Paper 服务端
forwardSkin: false无效:PaperCacheListener在 Paper 上无论forwardSkin设置如何都会注册,现已修复为正确读取配置。
v0.0.2
ChangeLog
v0.0.2
Offline Whitelist / 离线白名单
Replaced switchMode with a new standalone offline-whitelist feature:
offline-whitelist: true— Only players already in the database can join as cracked/offline- New offline (cracked) players are kicked with a localized message
- Premium players are unaffected — auto-detected via Mojang API and allowed to join
- Existing cracked players in the database continue to join normally
- The Mojang API check is automatically triggered when
offline-whitelistis enabled (no need to enableautoRegisterornameChangeCheckseparately)
用新的独立 离线白名单 功能替代 switchMode:
offline-whitelist: true— 仅数据库中已有记录的玩家可以离线模式加入- 新的离线玩家会被踢出,显示本地化消息
- 正版玩家不受影响 — 通过 Mojang API 自动检测并允许加入
- 数据库中已有的离线玩家仍可正常加入
- 开启
offline-whitelist后自动触发 Mojang API 检查(无需额外开启autoRegister或nameChangeCheck)
Removed / 移除
switchModeconfig option removed — replaced byoffline-whitelistswitchMode配置项移除 — 由offline-whitelist替代
v0.0.1
ChangeLog
v0.0.1
First independent release of FastLoginPlus, forked from FastLogin with enhancements.
FastLoginPlus 首个独立版本,基于 FastLogin fork 并增强。
Project Renaming / 项目更名
-
Renamed to FastLoginPlus, Maven artifact
fastlogin→fastloginplus -
Independent versioning starting from v0.0.1
-
Java package names (
com.github.games647.fastlogin) unchanged for upstream compatibility -
项目更名为 FastLoginPlus,Maven 坐标从
fastlogin改为fastloginplus -
独立版本号体系,从 v0.0.1 起步
-
Java 包名(
com.github.games647.fastlogin)保留不变,便于合并上游更新
Bug Fixes / Bug 修复
-
switchMode kicked new premium players: When
switchModewas enabled, premium players joining for the first time were incorrectly kicked (#1359). Now premium players are properly detected via Mojang API and allowed to join. -
switchMode 误踢正版新玩家:上游
switchMode开启后,首次加入的正版玩家会被错误踢出(#1359)。修复后,正版玩家会通过 Mojang API 自动检测并正确放行。
SQLite Concurrency / SQLite 并发优化
-
WAL mode — Write-Ahead Logging for better concurrent read/write under proxy architecture
-
Busy timeout — 5-second wait instead of instant
SQLITE_BUSYerrors -
Thread-safe operations —
ReentrantLockon allloadProfile/savecalls -
启用 WAL (Write-Ahead Logging) 模式,代理架构下多线程读写不再互相阻塞
-
设置 5 秒 busy timeout,避免
SQLITE_BUSY瞬间报错 -
所有
loadProfile/save操作加ReentrantLock,防止竞态条件
fldelete Enhancement / fldelete 命令增强
The upstream fldelete was bare-bones (hardcoded English, no premium protection, broken under BungeeCord). Fully rewritten:
- Localized message strings (multi-language support)
- Premium player protection — cannot delete online-mode player records
- BungeeCord support via PluginMessage forwarding
- Fires
BukkitFastLoginPremiumToggleEventon successful deletion
上游的 fldelete 实现较为简陋(硬编码英文、无 premium 保护、BungeeCord 下不可用),本版本重写了完整实现:
- 消息文本改为本地化,支持多语言
- 新增 premium 玩家保护——不允许删除在线模式玩家的记录
- 支持 BungeeCord 环境,通过 PluginMessage 转发删除请求
- 删除成功后触发
BukkitFastLoginPremiumToggleEvent事件
Multi-language System / 多语言系统
-
Built-in English (
messages_en.yml) and Chinese (messages_zh.yml) language files -
languageoption inconfig.ymlto select language (en/zh/ custom) -
Custom languages supported — set any value (e.g.
ja), plugin loadsmessages_ja.yml, falls back to English if missing -
Auto-detects missing keys on startup and fills them from the English default
-
Config comments in bilingual (English + Chinese)
-
内置 英文(
messages_en.yml)和 中文(messages_zh.yml)语言文件 -
config.yml中通过language选项指定使用的语言(en/zh/ 自定义) -
支持自定义语言文件:设置任意值(如
ja),插件自动加载messages_ja.yml,不存在时回退到英文 -
启动时自动检测语言文件完整性,缺失的键值从英文默认文件补全
-
配置文件注释改为中英双语