基本信息
我的世界Java版本
1.21.3–1.21.11
1.21–1.21.1
1.20.6
1.20–1.20.4
1.19.3–1.19.4
平台
Folia
运行环境
搬运团队
搬运资源声明
对于可进行 JAR 文件搬运的许可证,我们提供站内下载服务;其他资源会跳转到原帖下载。资源更新可能不及时,建议前往资源内提供的原帖链接下载最新版本。
详情信息
许可证 MIT
发布于 2024-11-29
更新于 2026-05-03
更新日志
新功能
- 现在在进行伪装时会显示当前伪装的图标
- 带有
feathermorph_nogrant标签的实体现在在被击杀时,不会再为玩家解锁对应的伪装。 - 现在可以使用
/fm extract language <lang>命令导出内置语言文件- 此命令所需权限为
feathermorph.admin。 - 如果磁盘上已经有匹配的文件,导出的文件默认会安装到
messages/<lang>.fmnew.json - 你可以使用
/fm extract language <lang> true进行覆盖。此操作需要你再次执行该命令来确认
- 此命令所需权限为
- 现在为人体模型触发 Interaction Mirror 时,玩家需要拥有触发 Interaction Mirror 的权限
- Instance Network 中的从节点现在会在玩家加入时为其请求数据,而不是由主服务器在启动时加载并将所有数据同步到从节点。
- 现在可以在
PlayerUnMorphEvent中获取对应的DisguiseState实例。 - 第三方插件现在可以在引导阶段将它们的
SingleProperty实例添加到DisguiseProperties中,从而支持根据玩家输入自动赋值。 - 新增对 Zombie Nautilus 变体属性的支持。
- 现在
DisguiseProperty的实例可以声明自己对客户端模组不可见- FeatherMorph 目前还没有需要此功能的属性;这主要是为其他插件的开发准备的。
- 为 InputHandles 新增了
readString方法。 - 如果异常发生在更新过程中,或已被转发到
DisguiseState,插件现在会尝试显示该异常的消息。 - 将 Instance Network 中异步加载玩家数据的能力带到了
IManagePlayerData。- 目前只有在启用 Instance Network,且当前服务器是网络中的从服务器时,异步加载功能才会被完整利用。
- 如果支持该功能,当玩家进入配置状态时,插件会尝试异步加载其数据,并为每名玩家最多等待 150ms;超时后仍允许其继续登录,并在数据加载完成后通知其客户端。
最多等待 150ms 是为了确保在性能较好的机器上,玩家登录后立刻就能使用伪装解锁数据。而且这个等待机制可能会在下一个(编辑:下一个或未来的)版本中移除,因为它从字面意义上就和 async 的概念相冲突…… 🤯\- 从服务器现在不再为主服务器响应我们的查询请求最多等待 150ms
- 为 Nautilus 和 Zombie Nautilus 新增能力
- 伪装成 Nautilus 现在会让玩家获得水下呼吸能力,并在空气中逐渐干枯
- 伪装成 Zombie Nautilus 时,如果没有装备头盔,玩家还会在阳光下燃烧。
- 新增 Dash 技能
- 伪装成 Camel/Camel Husk 现在可以在地面上或水下冲刺
- 伪装成 Nautilus/Zombie Nautilus 现在可以在水下冲刺
- backport:允许服务器通过配置禁用伪装路标点
Bug 修复
- 从
1.21.11/feature-next分支回移植了一项变通修复,以防止错误的组件输入被应用并导致正在查看的玩家被踢出服务器- 不过我也不确定这个问题是否应该归类到 FeatherMorph……
- 修复了一个回归问题:当面对其他伪装成另一名玩家的人时,尝试伪装成某个玩家会复制对方的属性,而无视伪装目标是否相同。
- 修复了检查当前代码是否运行在某个实体的 tick 线程上时可能出现的错误。
- 现在当目标人体模型没有描述时,人体模型伪装的描述属性也会被正确设置
- 修复了在丢弃/缓存皮肤后,SkinStorage 的缓存不会更新的问题
- 修复了一个回归问题:使用
by_name选择器时,已伪装玩家仍然会被选为 Interaction Mirror 目标。 - 修复了一个回归问题:如果控制玩家伪装成了与目标相同的玩家,则已伪装玩家无法被选为 Interaction Mirror 目标。
- 修复了初始技能配置设置后,Package Version 未被保存的问题
其他
- 移除了
feathermorph.disguise_use_real_uuid权限的使用 - 服务器关闭时,当前激活的伪装现在会保存到磁盘
- Offline Disguise 现在会保存伪装属性
- Skin Storage 和 Offline Disguise Storage 现在改为基于目录的存储。
- 这大幅提升了在存储大量数据时对单个皮肤/伪装进行读写的性能。
- 我们会尝试迁移先前存储的皮肤;而离线伪装不会被迁移,因为我们没有从 NBT -> Disguise Properties 的转换方法。
- 人体模型现在会被 Interaction Mirror Executors 正常选中,而不再被当作特殊对象处理。
by_sight镜像模式现在会遵守配置中设置的最大影响距离- 现在可使用 Gradle 任务
runFolia - 伪装的 actionbar 消息现在由
DisguiseState处理。 InputHandles中的readRotations现在会在玩家提供超过 3 个元素时报错- 这意味着,对于装备架伪装的各种旋转属性,若提供超过 3 个元素,现在会显示错误消息。
- 将配置定义从插件自身的
ConfigOption枚举迁移到了 PluginBase 的ConfigOption类 - 简化了部分位置的异常处理。
- 语言文件中的消息
morph.error_while_disguising_user_fault已重命名为morph.error_parsing_property。 - 为适配新的
IManagePlayerData#loadPlayerDataAsync方法,批量处理玩家数据请求的间隔已从 10 tick 改为 2 tick - 插件现在会根据服务器规格检查
Paper或Folia平台更新。 - Offline Disguises 现在改名为 Saved Disguises
变更内容
- 由 @MATRIX-feather 在 https://github.com/NiFeather/FeatherMorph/pull/61 中将 2.8.0 从 1.21.11/feature 合并
完整更新日志:https://github.com/NiFeather/FeatherMorph/compare/2.5.2...2.8.0



