Repository navigation
Releases: EndlessPixel/FakePlayer-CE
Release list
FakePlayer-CE.Build7
FakePlayer-CE.Build7
Fake Player Chat Fix & fp say Action Subcommand Overhaul
This release fixes fake players being completely unable to send chat messages on modern Leaf forks, overhauls the fp say command to align with the action command syntax (supporting once / continuous / interval / stop), and inherits all removal and compatibility fixes from Build6.
Highlights
- Working Fake Player Chat: Replaced the signature-gated
connection.chat(...)path with a direct unsignedPlayerChatMessagebroadcast, so fake players can actually speak on Leaf 26.2+ (and all modern versions). fp sayNow an Action Command:fp saygains the sameonce / continuous / interval / stop / helpsubcommands as other actions, with TAB-completable fake player names and a<name> <msg>argument layout.- Iterative Optimization Based on Build6: Inherits Build6's complete fake player removal fix, Leaf
CraftServer#getServer()adaptation, and all stability improvements.
Critical Fixes - Fixed fake players cannot send chat messages (Leaf 26.2+):
ServerGamePacketListenerImpl.chat(String, LastSeenMessages, boolean)runs the message through the signed-chat validation chain; fake players have no real session, so a null signature was silently discarded. The newNMSServerPlayer.chatbroadcasts an unsignedPlayerChatMessageviaPlayerList.broadcastChatMessage, bypassing signature validation entirely. - Fixed
fp sayhad no fake player name argument and no TAB completion: the command previously registered only a greedy message argument, so it could not target a specific fake player nor complete names. It now registers an optionalfakeplayer("name")argument shared across all action subcommands. - Added
ActionType.SAYandSayAction: a new repeatable action that emits the chat message on every tick (driven byActionManager), carrying the text through a newmessagefield onActionSetting.ActionTickerImplin all 13 version modules was updated to handle the new enum value.
Important Notes - Vanilla native
/kickcannot affect fake players by design, as fake players do not occupy real server connections. Use/fp killor/fp killallinstead. - Use
/fp say once <name> <msg>for a single message,/fp say continuous <name> <msg>for every-tick spam (stop with/fp say stop <name>), and/fp say interval <ticks> <name> <msg>for periodic messages.
Usage - Java: 21+ (Java 25 recommended for 26.x support)
- Server: Paper / Leaf 1.20.1+ (Purpur compatible)
- API: CommandAPI 12.0.0+ (Mandatory dependency)
Credits - CE Maintenance: @EndlessPixel
FakePlayer-CE.Build7 —— 假人聊天修复与 fp say 动作化重构
假人聊天失效修复、fp say 动作子命令化重构
本次更新修复了现代 Leaf 分支下假人完全无法发送聊天消息的问题,将 fp say 命令重构为与其他动作命令一致的 once / continuous / interval / stop 子命令体系,并完整继承 Build6 的假人移除与兼容性修复。
核心特性
- 假人聊天真正生效:弃用受签名校验拦截的
connection.chat(...),改为直接广播未签名PlayerChatMessage,使假人在 Leaf 26.2+(及所有现代版本)均可正常发言。 fp say升级为动作命令:现在支持once / continuous / interval / stop / help子命令,与其他动作命令一致,假人名可 TAB 补全,参数为<name> <msg>。- 迭代继承 Build6 修复:完整保留 Build6 的假人彻底移除修复、Leaf
CraftServer#getServer()适配及全部稳定性改进。
关键修复 - 修复假人无法发送聊天消息(Leaf 26.2+):新版
ServerGamePacketListenerImpl.chat走聊天签名校验链,假人无真实会话,传入 null 签名被静默丢弃。新NMSServerPlayer.chat改用PlayerList.broadcastChatMessage直接广播未签名消息,彻底绕过签名校验。 - 修复
fp say缺假人名参数、无法 TAB 补全:旧命令仅注册贪婪文本参数,既不能指定说话的假人也无法补全名字。现统一注册可选fakeplayer("name")参数,覆盖全部动作子命令。 - 新增
ActionType.SAY与SayAction:新增可重复动作,按ActionManager调度在每 tick 广播聊天内容,文本通过ActionSetting新增的message字段携带;全 13 个版本模块的ActionTickerImpl均已补充新枚举分支。
注意事项 - 原版原生
/kick依设计无法影响假人,因假人不占用真实服务器连接。请改用/fp kill或/fp killall移除假人实体。 - 单次发言用
/fp say once <name> <msg>,持续刷屏用/fp say continuous <name> <msg>(用/fp say stop <name>停止),定时发言用/fp say interval <ticks> <name> <msg>。
使用要求 - Java: 21+(26.x 建议 Java 25)
- 服务端: Paper / Leaf 1.20.1+(兼容 Purpur)
- API: CommandAPI 12.0.0+(强制依赖)
维护者 - CE 维护: @EndlessPixel
FakePlayer-CE.Build6
FakePlayer-CE.Build6
Fake Player Entity Removal Fix & Full Leaf Compatibility Polish
This release fixes the core issue that fake players could not be completely removed from the server, thoroughly optimizes the fake player cleanup logic, perfects compatibility with all modern Leaf forks, and inherits all stability fixes from Build5.
Highlights
- Complete Fake Player Removal: Overhauled fake player cleanup logic, truly deregisters fake player entities from the server via native NMS methods, completely resolving the residual fake player issue.
- Full Leaf Fork Compatibility: Adapted to Leaf’s special CraftServer#getServer() return logic, ensuring removal commands work normally on all Leaf versions.
- Iterative Optimization Based on Build5: Inherits all Build5 fixes, including Leaf spawn exception fixes and CommandAPI 12.0.0 adaptation, for more stable overall performance.
Critical Fixes - Fixed fake players cannot be completely removed (Issue #3): Traditional Player.kick() is a no-op for custom NetworkManager-injected fake players. The old logic only cleared internal plugin records but did not disconnect server-side entities. The new cleanup process calls NMS native PlayerList.remove(ServerPlayer) to permanently deregister fake player entities from the server. Fully compatible with Leaf forks that directly return PlayerList via CraftServer#getServer().
- Inherited Build5 Compatibility Fix: Resolved ClassCastException when executing/fp spawn on Leaf 1.21.11 / 26.2, fixing the type conversion error between DedicatedPlayerList and MinecraftServer.
Important Notes - Vanilla native /kick command cannot affect fake players by design, as fake players do not occupy real server connections.
- Please use the dedicated plugin commands /fp kill or /fp killall to remove fake player entities.
Usage - Java: 21+ (Java 25 recommended for 26.x support)
- Server: Paper / Leaf 1.20.1+ (Purpur compatible)
- API: CommandAPI 12.0.0+ (Mandatory dependency)
Credits - CE Maintenance: @EndlessPixel
FakePlayer-CE.Build6 —— 假人彻底移除修复与 Leaf 兼容性完善
假人实体彻底移除修复、全版本 Leaf 分支兼容优化
本次更新修复了假人无法从服务器彻底删除的核心问题,全面重构假人清理逻辑,完善对全系现代 Leaf 服务端分支的适配,并继承 Build5 所有稳定性修复内容。
核心特性
- 假人彻底移除机制:全面改版假人清理逻辑,通过 NMS 原生方法从服务端注销假人实体,彻底解决假人残留、无法删除的问题。
- 全量 Leaf 分支兼容:适配 Leaf 服务端 CraftServer#getServer() 特殊返回逻辑,确保假人删除指令在所有 Leaf 版本正常生效。
- 迭代继承 Build5 修复:完整保留 Build5 所有修复内容,包含 Leaf 假人生成异常修复、CommandAPI 12.0.0 适配,整体运行更稳定。
关键修复 - 修复假人无法彻底移除问题(Issue #3):插件假人通过自定义 NetworkManager注入服务端,原生 Player.kick() 对假人连接为空操作。旧版逻辑仅清空插件内部记录,未真正断开服务端实体。新版清理流程调用 NMS 原生 PlayerList.remove(ServerPlayer),可从服务器彻底注销假人实体,同时完美适配 CraftServer#getServer() 直接返回PlayerList 的 Leaf 分支服务端。
- 继承 Build5 兼容性修复:解决 Leaf 1.21.11 / 26.2 版本中,执行 /fp spawn 出现的类型转换异常,修复 DedicatedPlayerList 无法转换为 MinecraftServer 的报错。
重要说明 - 服务端原版 /kick 指令对假人无效,属于设计特性,原因是假人并非真实客户端连接。
- 移除假人请使用插件专属指令:/fp kill(移除单个假人)或 /fp killall(移除所有假人)。
使用要求 - Java: 21+(26.x 服务端推荐使用 Java 25)
- 服务端: Paper / Leaf 1.20.1+(兼容 Purpur 服务端)
- 前置依赖: CommandAPI 12.0.0 及以上(必需前置)
鸣谢 - CE 维护: @EndlessPixel
FakePlayer-CE.Build5
FakePlayer-CE.Build5
Loader & Spawn Compatibility: CommandAPI 12, Adventure 4.x & Leaf Forks
This release makes FakePlayer-CE load and spawn correctly on modern Leaf/Paper forks. It upgrades to CommandAPI 12.0.0, shades a self-contained adventure copy (fixing the UTF8ResourceBundleControl startup crash), and fixes a ClassCastException that broke /fp spawn on Leaf 1.21.11 / 26.2.
Highlights
- CommandAPI 12.0.0 Support: Updated command argument construction to the new
Argument(String, ArgumentType)signature. - Self-Contained Adventure:
adventure-api/adventure-text-minimessageare now shaded into the plugin (previouslycompileOnly), so the plugin no longer relies on the server's adventure copy. - Leaf Spawn Fix:
/fp spawnno longer throwsClassCastExceptionon Leaf forks whoseCraftServer#getServer()returns the player list instead of theMinecraftServer.
Critical Fixes
- Fixed Startup
NoClassDefFoundError(Leaf 26.2 + CommandAPI 12.0.0): adventure 4.17 removednet.kyori.adventure.util.UTF8ResourceBundleControl, which devtools still references, and the server's adventure copy is not visible to the plugin classloader. Added a self-containedUTF8ResourceBundleControl(pure JDKResourceBundle.Control, UTF-8 properties) and changed adventure dependencies toimplementationso the plugin shades its own copy. - Fixed
ClassCastExceptionon/fp spawn(Leaf 1.21.11 / 26.2):Reflections.getServer()calledCraftServer.getServer(), which on Leaf forks returns theDedicatedPlayerListrather than theMinecraftServer, causingDedicatedPlayerList cannot be cast to MinecraftServeratNMSServerImpl.<init>. AddedReflections.getMinecraftServer(server, mcServerClass)which resolves theMinecraftServervia its exact-typedconsolefield and only falls back togetServer()when no such field exists. Verified locally:/fp spawncreates a fake player correctly on Leaf 26.2 + CommandAPI 12.0.0.
Usage
- Java: 21+ (Java 25 recommended for 26.x support)
- Server: Paper / Leaf 1.20.1+ (Purpur compatible)
- API: CommandAPI 12.0.0+
Credits
- CE Maintenance: @EndlessPixel
FakePlayer-CE.Build5 —— 加载与生成兼容:CommandAPI 12、Adventure 4.x 与 Leaf 分支
本次更新让 FakePlayer-CE 能在现代的 Leaf / Paper 分支上正常加载并生成假人。我们升级到 CommandAPI 12.0.0,将 adventure 以自包含方式打包(修复 UTF8ResourceBundleControl 启动崩溃),并修复了在 Leaf 1.21.11 / 26.2 上导致 /fp spawn 失败的 ClassCastException。
核心特性
- 支持 CommandAPI 12.0.0:命令参数构造已更新为新的
Argument(String, ArgumentType)签名。 - 自包含 adventure:
adventure-api/adventure-text-minimessage现在被打包进插件(此前为compileOnly),不再依赖服务端自带的 adventure。 - 修复 Leaf 生成崩溃:在
CraftServer#getServer()返回玩家列表而非MinecraftServer的 Leaf 分支上,/fp spawn不再抛出ClassCastException。
关键修复
- 修复启动
NoClassDefFoundError(Leaf 26.2 + CommandAPI 12.0.0):adventure 4.17 移除了net.kyori.adventure.util.UTF8ResourceBundleControl,而 devtools 仍引用该类,且服务端自带的 adventure 对插件类加载器不可见。新增自包含的UTF8ResourceBundleControl(纯 JDKResourceBundle.Control,UTF-8 读取 properties),并将 adventure 依赖改为implementation打包进插件。 - 修复
/fp spawn的ClassCastException(Leaf 1.21.11 / 26.2):Reflections.getServer()调用CraftServer.getServer(),在 Leaf 分支上该方法返回的是DedicatedPlayerList而非MinecraftServer,导致在NMSServerImpl.<init>处报DedicatedPlayerList cannot be cast to MinecraftServer。新增Reflections.getMinecraftServer(server, mcServerClass),优先按精确类型反射CraftServer上的console字段获取MinecraftServer,仅当找不到该字段时才回退到getServer()。本地实测:在 Leaf 26.2 + CommandAPI 12.0.0 上/fp spawn已能正确创建假人。
使用要求
- Java: 21+ (推荐 Java 25 以支持 26.x)
- 服务端: Paper / Leaf 1.20.1+ (兼容 Purpur)
- API: CommandAPI 12.0.0+
鸣谢
- CE 维护: @EndlessPixel
FakePlayer-CE.Build4
FakePlayer-CE.Build4
Interaction & Stability: Replenish, Live Config & Loader Compatibility
This release fixes long-standing Fakeplayer quirks: tools now auto-repair under replenish, config changes apply immediately to online Fakeplayers, and Mohist loading no longer crashes. We also hardened the look/movement logic against remapped server implementations.
Highlights
- Live Config Applied Instantly: Changing
/fp config(e.g. invulnerable, collidable, pickup_items) now takes effect on already-online Fakeplayers without respawn. - Tool Auto-Repair: Replenish now periodically repairs worn tools whose durability drops (previously only event-triggered consumables were refilled).
- Mohist Compatibility: Removed direct dependency on
io.papermc.paper.entity.LookAnchor, eliminatingNoClassDefFoundErroron remapped (Mohist) servers.
Critical Fixes
- Fixed Invincible Fakeplayers (tanyaofei#178, tanyaofei#181, tanyaofei#199):
setFeaturepreviously only persisted to DB and never re-applied modifiers to live Fakeplayers, soinvulnerable falsehad no effect. Now saved changes are pushed to the creator's online Fakeplayers immediately. - Fixed Tools Not Replenished (tanyaofei#195): Tools wear via durability loss, which fires no refill event. Added a periodic check (
replenish.tools.durability-thresholdinconfig.yml, 0–100% wear, default off) that repairs held items once worn past the threshold. - Fixed Mohist Load Crash (tanyaofei#200):
LookAtEntityActionandRotationCommandreferencedio.papermc.paper.entity.LookAnchor, which Mohist remaps and fails to find. Replaced with pure NMS angle calculation (LookUtils), noio.papermcdependency at load time.
Usage
- Java: 21+ (Java 25 recommended for 26.x support)
- Server: Paper 1.20.1+ (Purpur compatible)
- API: CommandAPI 11.1.0+
Credits
- CE Maintenance: @EndlessPixel
FakePlayer-CE.Build4 —— 交互与稳定性:自动补货、实时配置与加载兼容
本次更新修复了多个长期存在的假人问题:自动补货现在会修复磨损的工具,配置修改会立即作用于在线假人,并且 Mohist 端加载不再崩溃。同时强化了朝向/移动逻辑以兼容被重映射的服务端实现。
核心特性
- 配置实时生效:修改
/fp config(如无敌、可碰撞、拾取物品)现在会立即作用于已经在线(spawned)的假人,无需重新生成。 - 工具自动修复:开启自动补货后,会周期性修复耐久下降的工具(此前仅补充由事件触发的消耗品)。
- Mohist 兼容:移除了对
io.papermc.paper.entity.LookAnchor的直接依赖,消除在 Mohist 等重映射服务端上的NoClassDefFoundError。
关键修复
- 修复假人无法取消无敌(tanyaofei#178, tanyaofei#181, tanyaofei#199):
setFeature此前只写入数据库、不会把 modifier 重新应用到在线假人,导致invulnerable false不生效。现在保存后会立即将变更推送给该创造者的在线假人。 - 修复工具不被补货(tanyaofei#195):工具靠耐久磨损消耗,而磨损不触发任何补货事件。新增周期性检查(在
config.yml配置replenish.tools.durability-threshold,0–100% 磨损阈值,默认关闭),磨损超过阈值时自动修复手中物品。 - 修复 Mohist 加载崩溃(tanyaofei#200):
LookAtEntityAction与RotationCommand引用了io.papermc.paper.entity.LookAnchor,Mohist 会重映射该类导致其找不到。改用纯 NMS 角度计算(LookUtils),加载时不依赖io.papermc。
使用要求
- Java: 21+ (推荐 Java 25 以支持 26.x)
- 服务端: Paper 1.20.1+ (兼容 Purpur)
- API: CommandAPI 11.1.0+
鸣谢
- CE 维护: @EndlessPixel
FakePlayer-CE.Build3
FakePlayer-CE.Build3
Stabilizing the Core: NMS Lifecycle & Interaction Fixes
This release focuses on internal stability, fixing critical crashes during plugin reloads and enhancing NMS compatibility for the latest Minecraft versions. We also introduced a new interaction command for Fakeplayers.
Highlights
- New
/fp sayCommand: Fakeplayers can now send chat messages directly via NMS network packets. - NMS Stability: Fixed lifecycle management issues, preventing crashes during
/reloador plugin disabling. - Slim & Efficient: Continued use of ShadowJar to ensure a lightweight build (~500KB).
Critical Fixes
- Fixed Chat Method Signature: Adapted to the new API by adding the missing
lastSeenMessagesparameter, resolvingNoSuchMethodErrorin newer versions. - Fixed Plugin Reload Crashes: Implemented graceful shutdown logic to unregister commands and clean up resources, preventing
IllegalPluginAccessException. - Fixed NMS Packet Handling: Refined
ClientboundRespawnPacketand motion packet handling for better cross-version compatibility (1.20.1 - 26.2). - Fixed BungeeCord Channel: Corrected plugin message channel validation to ensure compatibility with proxy networks.
Usage
- Java: 21+ (Java 25 recommended for 26.x support)
- Server: Paper 1.20.1+ (Purpur compatible)
- API: CommandAPI 11.1.0+
️ Credits
- CE Maintenance: @EndlessPixel
- NMS Patches: @ifloppy (for lifecycle stability fixes)
FakePlayer-CE.Build3 —— 核心稳固:NMS 生命周期与交互修复
本次更新专注于内部稳定性,修复了插件重载时的关键崩溃问题,并增强了针对最新 Minecraft 版本的 NMS 兼容性。同时,我们为假人引入了全新的交互指令。
核心特性
- 新增
/fp say命令:假人现在可以通过 NMS 网络包直接发送聊天消息。 - NMS 稳定性提升:修复了生命周期管理问题,防止在执行
/reload或禁用插件时发生崩溃。 - 轻量高效:继续使用 ShadowJar 构建,保持极致轻量的体积 (~500KB)。
关键修复
- 修复聊天方法签名不匹配:适配新版 API,补充了缺失的
lastSeenMessages参数,解决了新版服务端报错的问题。 - 修复插件重载崩溃:实现了优雅停机逻辑,正确注销命令并清理资源,防止出现
IllegalPluginAccessException。 - 修复 NMS 数据包处理:优化了
ClientboundRespawnPacket和实体运动包的处理逻辑,提升跨版本兼容性 (1.20.1 - 26.2)。 - 修复 BungeeCord 通道问题:修正了插件消息通道的校验逻辑,确保在代理网络环境下的兼容性。
使用要求
- Java: 21+ (推荐 Java 25 以支持 26.x)
- 服务端: Paper 1.20.1+ (兼容 Purpur)
- API: CommandAPI 11.1.0+
️ 鸣谢
- CE 维护: @EndlessPixel
- NMS 补丁: @ifloppy (贡献了生命周期稳定性修复)
FakePlayer-CE.Build2
Changes
- feat: 适配 v26_2 版本并升级构建配置至 Java 25
- build: 升级 paperweight 并配置 reobf
- feat: 适配 Minecraft 26.1 与 26.2 版本
- docs: 添加 NMS 变更总结报告
支持的版本
- 1.20.1 ~ 1.20.6
- 1.21 ~ 1.21.11
- 26.1 / 26.1.1 / 26.1.2 / 26.2
FakePlayer-CE.Build1
🚀 FakePlayer-CE Build1 — Modern Paper Plugin Reborn
The first stable milestone of FakePlayer Community Edition.
This release migrates the original abandoned project to modern Paperweight Userdev standards, introducing a clean multi-version NMS architecture and a slim build (~500KB).
✨ Highlights
- ✅ Migrated from Maven to Gradle Kotlin DSL
- ✅ Adopted Paperweight Userdev (Mojang mappings)
- ✅ Multi-version NMS support: 1.20.1 → 1.21.11
- ✅ Slim ShadowJar (~500KB) — no dependency conflicts
- ✅ Full compatibility with Paper / Purpur / Pufferfish
🐛 Critical Fixes
- Fixed inventory loading failures
- Fixed
/openinvcompatibility - Fixed placeholder translations
- Fixed
%fakeplayer_actions%resolution - Fixed after-quit command execution
- Fixed NMS mapping breakages across 1.21.9–1.21.11
📦 Usage
- Java: 21+ (Java 25 recommended for future 26.x support)
- Server: Paper 1.20.1+ (Purpur compatible)
- API: CommandAPI 11.1.0+
❤️ Credits
- Original: @tanyaofei
- Patches: @xiplugin and @PrenSJ2, @bnjmn21
- CE Maintenance: @EndlessPixel
I am also the first time to build such a large plug-in, there may be some unexpected or functional anomalies, if there is a problem, you can tell me in the issues.
🚀 FakePlayer-CE Build1 —— 面向 Paper 时代的假人插件重生
FakePlayer 社区版的首个稳定里程碑。
本次发布将原作者已弃坑的项目迁移至现代 Paperweight Userdev 标准,引入了清晰的多版本 NMS 架构与极致瘦身的构建产物(~500KB)。
✨ 核心特性
- ✅ Maven → Gradle Kotlin DSL 现代化构建
- ✅ 全面接入 Paperweight Userdev(Mojang 原生映射)
- ✅ 多版本 NMS 支持:1.20.1 → 1.21.11
- ✅ ShadowJar 极致瘦身(~500KB),彻底杜绝依赖冲突
- ✅ 原生兼容 Paper / Purpur / Pufferfish
🐛 关键修复
- 修复假人背包加载失败
- 修复
/openinv兼容性问题 - 修复 Placeholder 汉化异常
- 修复
%fakeplayer_actions%变量解析 - 修复退出后命令执行逻辑
- 修复 1.21.9–1.21.11 的 NMS 映射断裂
📦 使用要求
- Java: 21+(推荐 Java 25,为 26.x 预热)
- 服务端: Paper 1.20.1+(兼容 Purpur)
- API: CommandAPI 11.1.0+
❤️ 鸣谢
- 原作者:@tanyaofei
- 关键补丁:@xiplugin 和 @PrenSJ2 以及 @bnjmn21
- CE 维护:@EndlessPixel
我也是第一次构建如此大型的插件,可能会出现一些意外或功能异常,如果有问题可以在 issues 中告诉我