FakePlayer-CE.Build12
Folia Support, Login Plugin Compatibility, Chat Event Pipeline & Instant Cleanup
This release adds first-class Folia support (verified on Folia 26.2: fake players spawn, tick and stay alive 90s+ with zero keep-alive kicks), marks fake players as logged in for AuthMe, CatSeedLogin and LibreLogin, routes /fp say through the real chat event pipeline so chat-formatting plugins work again, and adds a follow-quiting-force option that removes a creator's fake players the moment they quit.
Highlights
- Folia Support: FakePlayer-CE now runs on Folia and other regionised servers. Every scheduling call goes through a single unified scheduler API (global / region / entity / async) that automatically falls back to the main thread on Bukkit/Paper/Spigot; fake-player ticking is driven by the entity scheduler, spawning runs on the region thread with
teleportAsync, and the fake connection answers keep-alive packets itself — so fake players are no longer kicked for being "timed out". - Login Plugin Compatibility: fake players are now marked as logged in for AuthMe / AuthMeReloaded (public API
forceLogin/forceRegister, unregistered names auto-registered with a random short password), CatSeedLogin / ReCatSeedLogin (added to the plugin'sloginPlayerslist) and LibreLogin (Paper) / LibreLoginNext (Paper) (a temporary unregistered record is created for the online fake player, authorized on spawn, and removed on disconnect or orderly shutdown). All three are declared assoftdependand only load when that plugin is installed. /fp sayNow Goes Through the Chat Event Pipeline: messages are sent as unsigned chat throughChatProcessor, fully triggeringAsyncPlayerChatEvent/AsyncChatEvent, so chat-formatting plugins (EssentialsX Chat, Vane, …) can modify the format again; the result is broadcast unless the event is cancelled. Previously/fp saywas silently dropped on modern versions because of chat signature verification (#21).- New
follow-quiting-forceOption: a creator's fake players are removed right after the creator quits (afterfollow-quiting-force-delayseconds, default 3) instead of waiting for the periodic cleanup.
Breaking Changes
/fp sayoutput is now processed by chat plugins. Because messages go through the real chat events, any installed chat formatter will reformat/fp sayoutput, and if a plugin cancelsAsyncPlayerChatEvent/AsyncChatEventthe message is not broadcast. This is the intended fix for the silent-drop bug, but it does change how/fp sayrenders on servers with chat formatters.
Critical Fixes
- Fixed fake players being kicked as "timed out" on Folia (the connection now answers keep-alive packets itself).
- Fixed fake-player spawning on Folia:
No currently ticking regionwhile creating the player, and illegal synchronous teleport inside a region thread (nowteleportAsyncon the region thread). - Fixed AuthMe login failing with short passwords.
- Fixed CatSeedLogin compatibility when its classes live in a different location.
- Fixed command help ignoring the configured locale — help text is now resolved with the plugin's configured locale (#20).
Important Notes
config.ymlis bumped to version 22; existing configs keep working and fall back to defaults for the new keys.follow-quiting-forceis disabled by default. Note that enabling it also removes the fake players when the creator merely switches servers on a proxy (the usual "server switching does not trigger follow-quiting" guard is bypassed).- Login plugin compatibility is opt-in by presence: nothing is loaded unless the corresponding login plugin is installed.
- Known low-priority leftovers on Folia shutdown:
PlayerList.removereports a reflectiveInvocationTargetException, and CommandAPI logs a "cannot register/unregister commands after the server is done starting" warning. Neither affects gameplay.
Usage
- Java: 21+ (Java 25 recommended for 26.x support)
- Server: Paper / Leaf 1.20.1+ (Purpur compatible; Folia supported — verified on 26.2)
- API: CommandAPI 12.0.0+ (Mandatory dependency)
Credits
- CE Maintenance: @EndlessPixel
- @ifloppy (PR #25: honor the configured locale in command help; PR #26: Paper LibreLogin compatibility)
- @MCForgeTitle123 (PR #22:
/fp saynow triggers Bukkit chat events; reported issues #17, #20, #21)
FakePlayer-CE.Build12 —— Folia 支持、登录插件兼容、聊天事件管线与退出即时清理
本次更新带来首等 Folia 支持(已在 Folia 26.2 实测:假人成功生成、持续 tick 且存活 90 秒以上,零 keep-alive 踢出),为假人补齐 AuthMe、CatSeedLogin、LibreLogin 登录插件兼容,让 /fp say 重新走真正的聊天事件管线(聊天格式化插件恢复生效),并新增 follow-quiting-force 配置,在创建者退出瞬间清理其假人。
核心特性
- Folia 支持:FakePlayer-CE 现可在 Folia 及其他区域化服务端上运行。所有调度统一走一套调度 API(全局 / 区域 / 实体 / 异步),在 Bukkit/Paper/Spigot 上自动回落到主线程;假人 tick 改由实体调度器驱动,生成在区域线程执行并改用
teleportAsync,连接会自行回应 keep-alive 包,假人不再被判定超时踢出。 - 登录插件兼容:假人生成时会被标记为已登录,支持 AuthMe / AuthMeReloaded(走公开 API
forceLogin/forceRegister,未注册的名称用随机短密码自动注册)、CatSeedLogin / ReCatSeedLogin(写入插件的loginPlayers名单)与 LibreLogin(Paper)/ LibreLoginNext(Paper)(为在线假人创建临时未注册记录、生成时授权、断开连接或正常关闭时清理)。三者均以softdepend声明,仅在对应插件安装时加载。 /fp say走聊天事件管线:消息以未签名形式交给ChatProcessor处理,完整触发AsyncPlayerChatEvent/AsyncChatEvent,聊天格式化插件(EssentialsX Chat、Vane 等)可再次介入修改格式;事件未取消时按结果广播。此前因聊天签名校验,/fp say在新版服务端会被静默丢弃(#21)。- 新增
follow-quiting-force配置:创建者退出后立即清理其假人(延迟follow-quiting-force-delay秒,默认 3),无需等待定时轮询。
破坏性变更
/fp say的输出现在会经过聊天插件处理。 因为消息走真实聊天事件,已安装的聊天格式化插件会重新格式化/fp say的输出;若有插件取消了AsyncPlayerChatEvent/AsyncChatEvent,该消息将不再广播。这是修复「静默丢弃」的预期行为,但在装有聊天格式化插件的服务器上,/fp say的呈现会与之前不同。
关键修复
- 修复假人在 Folia 上被判定
keepalive timeout踢出(连接现在自行回应 keep-alive 包)。 - 修复 Folia 上的假人生成:创建时的
No currently ticking region,以及区域线程内禁止同步 teleport(现改为区域线程内teleportAsync)。 - 修复 AuthMe 短密码登录失败。
- 修复 CatSeedLogin 类位于不同位置时的兼容问题。
- 修复命令帮助未遵循配置语言:帮助文本现按插件配置的 locale 解析(#20)。
重要说明
config.yml版本号提升至 22;旧配置可继续使用,新配置项自动采用默认值。follow-quiting-force默认关闭。注意:开启后会绕过「仅切换服务器不触发跟随下线」的判断,代理服上玩家仅切换服务器时其假人也会被清理。- 登录插件兼容按「是否安装」生效:未安装对应插件时不会加载任何相关逻辑。
- Folia 关服时的已知低优先遗留:
PlayerList.remove反射调用报InvocationTargetException,CommandAPI 输出 "cannot register/unregister commands after the server is done starting" 告警。均不影响游戏运行。
使用要求
- Java: 21+(26.x 建议 Java 25)
- 服务端: Paper / Leaf 1.20.1+(兼容 Purpur;支持 Folia,已在 26.2 验证)
- 前置依赖: CommandAPI 12.0.0 及以上(必需)
鸣谢
- CE 维护: @EndlessPixel
- @ifloppy(PR #25:命令帮助遵循配置语言;PR #26:Paper LibreLogin 兼容)
- @MCForgeTitle123(PR #22:
/fp say触发 Bukkit 聊天事件;提出 issue #17、#20、#21)