2.6.0-alpha.2
on 2025 Dec 04新特性
- 现在对模特使用交互镜子也需要玩家拥有正常的交互镜子权限
- 在新安装的实例中,默认会在快捷栏上方显示当前伪装的图标
- 击杀带有
feathermorph_nogrant标签的生物将不再为玩家解锁相关伪装 - 重构了插件向玩家发送消息的方式
- 现在可以使用
/fm extract language <lang>命令提取内置语言文件- 该命令的权限为
feathermorph.admin。 - 如果磁盘上已存在匹配的文件,默认会将提取的文件安装到
messages/<lang>.fmnew.json - 您可以通过使用
/fm extract language <lang> true来覆盖原文件,此操作需要再次执行以确认
- 该命令的权限为
- 实例网络中的从机现在在玩家加入时请求玩家数据,而不是主服务器在启动时加载并将所有数据同步到从机
- 现在可以在
PlayerUnMorphEvent中获取相关的DisguiseState实例 - 第三方插件现在能够在启动时将其
SingleProperty实例添加到DisguiseProperties,从而允许从玩家输入中自动分配
其他
- 模特现在会被交互镜子执行者正常选择,而不再被视为特殊对象
by_sight镜子模式现在会遵守配置文件中设置的最大影响距离- Gradle 任务
runFolia现已可用 - 伪装的快捷栏上方消息现在由
DisguiseState处理 - InputHandles 中的
readRotations在玩家提供超过 3 个元素时会抛出错误- 这意味着为盔甲架伪装的各种旋转属性提供超过 3 个元素时将导致错误消息
- 配置定义已从插件自身的
ConfigOption枚举迁移到 PluginBase 的ConfigOption类
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.5.2...2.6.0-alpha.2
这是 2.5 系列的一个维护版本。有关即将推出的新功能,请参见 2.6 alpha:https://github.com/NiFeather/FeatherMorph/pull/59
错误修复
- 附加击退能力在 Y 轴运动变化时始终增加 0.345584025,且不会对 X 和 Z 轴运动变化应用击退抗性。
- 当绑定的玩家退出时,伪装信标点未被移除的问题。
- 使
MorphBasicAvoidPlayerGoal在需要回避的玩家处于不同世界时忽略执行。- 此更改修复了在某些异常情况下 AI 抛出错误的问题。
其他
- 处理
MIC2SLoginCommand中无效的协议层级
完整更新日志:https://github.com/NiFeather/FeatherMorph/compare/2.5.1...2.5.2
从2025/11/3(YYYY/MM/DD)起,我们将1.21.10分支拆分为1.21.10/main和1.21.10/feature。
如果您在此之前克隆了仓库,请在拉取更新前删除本地存储的1.21.10分支!
2.5.1 版本变更
错误修复
entity/equipment输入为空时会导致未处理的异常
2.5.0 版本变更
新功能
- 现在玩家可以保存他们的伪装,并应用本地存储的伪装
- 这要求玩家使用客户端模组 0.16.0-beta.5 或更高版本!
- 为
entity/custom_name、mannequin/description和mannequin/hide_description属性添加权限feathermorph.custom_text,默认对玩家开放 - 添加用于使用伪装属性的权限:
feathermorph.disguise_properties.use - 添加用于为
entity/equipment属性中的物品设置自定义皮肤配置文件的权限,默认仅限管理员:feathermorph.disguise_properties.custom_skin_on_items - 添加对 模特 伪装的支持
- 默认情况下,无法使用 魔法瓶 收集 模特 伪装
- 模特 伪装具有与盔甲架和玩家伪装相同的 仿制装备 技能
mannequin/skin属性默认仅限管理员使用。您可为玩家授予feathermorph.custom_skin权限以启用该功能
- 添加对 铜傀儡 伪装的支持
- 默认情况下,可使用 魔法瓶 收集 铜傀儡 伪装
- 为铜傀儡伪装添加天气状态属性
- 初步兼容(?) Ping Wheel
- 使用官方 Ping Wheel 插件 可以正常工作,但在伪装状态下标记不会隐藏标记者身份
- ……因此我制作了一个自定义插件来临时解决此问题,可在 https://github.com/MATRIX-feather/pingwheel-plugin-forked 找到
- 初步支持拥有
feathermorph.mirror.mannequin权限的玩家将其潜行动作同步至与其伪装同名且描述相同的模特- 对于 BY_NAME 执行器,会选择范围内的模特,将影响距离设为 -1 可禁用范围限制
- 对于 BY_SIGHT 和 BY_RANGE,将在视线5格范围内选择目标模特
错误修复
- 当授予
feathermorph.disguise_use_real_uuid权限时,玩家伪装存在多个问题- 取消伪装时玩家会从TAB列表中消失
- 从远处传送或从旁观模式切换游戏模式时伪装不显示
slime_magma/size属性的随机范围错误- 覆盖方法中无人调用
BaseLivingEntityProperties#setupPropertiesFromEntity- 导致具有额外属性的伪装无法复制目标实体的自定义名称
其他
- 我们计划未来移除 BY_RANGE 镜像执行器,因其在网络状况不佳的玩家中引发混乱
- 现在部分抛出的异常将转发至 DisguiseState 并导致玩家取消伪装
- 调整了服务器渲染器重建从服务器发送的实体元数据包的方式
- 移除了伪装 NBT 黑名单配置
- 因其已不再使用
entity/custom_name和mannequin/description现在接受以{开头的 JSON 文本组件- 将部分伪装验证移至伪装准备早期阶段
2.5.0-rc.5
on 2025 Nov 12从2025/11/3(YYYY/MM/DD)开始,我们将1.21.10分支拆分为1.21.10/main和1.21.10/feature。
如果您在此之前已克隆了仓库,请在拉取更新前删除本地存储的1.21.10分支!
修复内容
- 为
ResolvableProfile添加了SkinPatch支持,修复了部分皮肤设置在客户端无法正确显示的问题。 - 明确声明
MorphResolvableProfileStruct是否正在呈现动态的ResolvableProfile,修复了部分皮肤在客户端无法显示的问题。- 上述两项修复要求玩家将客户端模组更新至
0.16.0-beta.6!
- 上述两项修复要求玩家将客户端模组更新至
entity/custom_name现在始终从目标实体复制,不再忽略实体类型- 在覆写方法中无人调用
BaseLivingEntityProperties#setupPropertiesFromEntity- 这导致具有额外属性的伪装形态无法复制目标实体的自定义名称。
完整更新日志:https://github.com/NiFeather/FeatherMorph/compare/2.5.0-rc.4...2.5.0-rc.5
从 2025/11/3(YYYY/MM/DD)起,我们将 1.21.10 分支拆分为 1.21.10/main 和 1.21.10/feature。
如果你在此日期前已克隆过仓库,请在拉取更新前删除本地存储的 1.21.10 分支!
修复
- 修复了当玩家语言环境为 "en_US" 而非 "en_us" 时导致的堆栈溢出(StackOverflow)问题
完整变更日志: https://github.com/NiFeather/FeatherMorph/compare/2.4.5...2.4.6
2.5.0-rc.3
on 2025 Nov 05修复
- 在之前的 2.5.0 beta 版本中,伪装有时会报告无法更新,并可能导致附近玩家因协议错误而断开连接
其他
- 捕获解析客户端
entity/equipment输入时的 JSON 错误,并将其包装为 ParseErrorException,以告知玩家数据格式不正确
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-rc.2...2.5.0-rc.3
2.5.0-rc.4
on 2025 Nov 05从 2025/11/3(YYYY/MM/DD)起,我们将 1.21.10 分支拆分为 1.21.10/main 和 1.21.10/feature。
如果你在此日期前克隆过仓库,在拉取更新前建议先删除本地存储的 1.21.10 分支!
修复内容
- 修复玩家伪装总是复制目标玩家皮肤的问题,此前未检查相关条件
- 修复当玩家语言环境为 "en_US" 而非 "en_us" 时引发的
StackOverflow异常
其他改进
- 允许在
FoliaThreadUtils#isTickThreadFor中bukkitEntity为 null - 当等待玩家线程超时时,
ServerBackend#disguise和SpawnPacketHandler#onEntityAddPacket将软失败:- 在
beta.6版本中,部分异常会被转发至玩家的DisguiseState,包括构建虚拟实体数据包时的等待超时 - 一旦超时,即使仅影响虚拟实体显示,玩家也会在下次 tick 时解除伪装
- 此更改可在服务器卡顿时提升玩家体验
- 在
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-rc.3...2.5.0-rc.4
2.5.0-rc.2
on 2025 Nov 05我们正在逐步将 Wiki 迁移至仓库中的 docs/ 目录下。如果你感兴趣,可以前往查看!
新功能
- [rc.1] 添加了使用伪装属性的权限:
feathermorph.disguise_properties.use - [rc.1] 添加了为
entity/equipment属性中的物品设置自定义皮肤配置文件的权限:feathermorph.disguise_properties.custom_skin_on_items
修复内容
- [rc.2] 伪装成其他实体时也会触发假人(mannequin)的交互镜像(Interaction Mirror)
- [rc.2] 修复了假人交互镜像在触发时忽略 NPC 描述差异的问题
其他更新
- [rc.1] 将部分伪装验证逻辑移至伪装准备早期阶段
- [rc.1] 升级 PacketEvents 至 2.10.0 版本
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-beta.6...2.5.0-rc.2
2.5.0-beta.6
on 2025 Nov 05新功能
- 拥有
feathermorph.mirror.mannequin权限的玩家现在可以将潜行镜像应用到与其伪装名称相同的假人上- 对于
BY_NAME执行器,会选择一定范围内的假人,若将影响距离设为 -1 则会禁用范围限制 - 对于
BY_SIGHT和BY_RANGE,将选择视线方向5格范围内的目标假人
- 对于
- 将 API 版本提升至 17
- 现在客户端模组可以在 C2S Morph 命令中包含属性输入
- 现在可通过游戏内命令
/fm option mirror_control_distance设置交互镜像的影响距离(控制距离)
修复
- 技能执行事件未触发的问题
slime_magma/size属性的随机范围错误
其他
- 我们计划在未来移除
BY_RANGE镜像执行器,因为它在玩家网络状况较差时会引起混乱 - 某些异常现在会被转发至
DisguiseState并导致玩家解除伪装 - 调整了服务器渲染器重建从服务器发送的实体元数据包的方式
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.5.0-beta.5...2.5.0-beta.6
新增功能
- 初步支持 Ping Wheel
- 目前需要使用自定义插件,可在 https://github.com/MATRIX-feather/pingwheel-plugin-forked 找到
问题修复
- 从从服务器同步的伪装状态实际上并未应用到主服务器
- 当
feathermorph.disguise_use_real_uuid设置为 true 时,玩家在取消伪装时会从其 TAB 视图中被移除
2.5.0-beta.5
on 2025 Oct 13修复
- 从附属服务器同步的伪装状态实际上并未应用到主服务器
其他
- 我们现在升级到了 1.21.10
- 我们现在基于 PacketEvents 2.10.0-SNAPSHOT 开发版本进行编译
- 这样 CI 又可以正常工作了!
此版本可能需要一些手动操作
伪装工具(Disguise Tool)和魔法瓶(Magic Bottle)的合成配方现在通过数据包(datapack)注册。虽然这提供了更高的自定义性,但如果您希望单独禁用其中某个配方,则需要安装一个配方管理插件。
如果您已经使用配方管理插件禁用了相关配方,则无需进行任何操作。(因为该数据包使用的配方 ID 与旧版本一致)
本次更新进行了大量改动,尽管我们已尽力消除漏洞,但仍可能存在尚未发现的问题!
新功能
- 当输入无效属性值尝试伪装时,现在会向玩家发送错误提示并拒绝伪装,而非使用默认值
- 属性输入现已包含在
PlayerMorphEarlyEvent事件中 - 新增对猫/狼项圈颜色属性的支持
- 实装守护者(Guardian)伪装技能
- 玩家需更新模组才能在其视野中看到技能目标
- 海豚和美西螈伪装现在将为玩家提供额外水下呼吸空气
- 新增
#feathermorph:magic_bottle_collectable实体标签- 处于此标签中的生物可被魔法瓶收集伪装形态
- 现在支持使用数量大于1的空魔法瓶来收集伪装
修复内容
- 已修复:收集后的魔法瓶无法正常使用的问题
- 修复了
snow_golem/pumpkin、zoglin/is_baby和zombie/is_baby属性本应有 TAB 补全列表却缺失的问题 - 修复了
burns_under_sun属性失效的问题
其他改进
- 许可证由 MIT 更改为 GPLv3
- 开源许可证文件现已包含在 Jar 包内
- 伪装工具和魔法瓶的合成配方现通过数据包注册
- 重构了技能/能力配置的读写逻辑
- 重构了技能处理机制
- 如果您遇到技能/能力配置无法正确加载的问题,请及时反馈!
- 重构了生物AI修改系统,减少对NMS的依赖
- 移除了生物AI恢复方法
- 配置更改后请重启服务器以生效
- 服务端伪装选择GUI中的图标现使用雪球+物品模型显示
potion_on_attack能力现在要求输入药水ID,而非Spigot枚举名称- 更新了中文(zh_CN)语言翻译
- 将“伪装”替换为更准确的“变形”或“形态”
- 现可通过在插件数据文件夹中创建
cmd_debug.txt文件启用调试命令- 警告!此功能不适用于生产环境。启用可能导致问题!
- 夜视能力不再对玩家施加药水粒子效果
entity/custom_name属性现对用户输入限制为256字符,最终文本限制为50字符entity/custom_name不再接受空输入- 伪装Boss栏现在会读取已设置的
entity/custom_name属性文本 - 玩家伪装形态不再接受
entity/custom_name输入- 但末影龙伪装仍保留此功能,目前为有意设计 :D
armor_stand/show_arms的默认值将再次从配置文件中读取并应用DisguiseState实例现在自行更新,而非由MorphManager更新- “We are not connected with master server! Refusing to update unlock state...” 消息现记录为错误级别而非警告
API 变更
- 属性输入现已包含在
PlayerMorphEarlyEvent中
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.4.0...2.4.1
2.5.0-beta.2
on 2025 Oct 08这是一个针对 1.21.9 的测试版本。请注意,由于 PacketEvents 尚未更新,此版本可能不支持通过服务端渲染显示假人(Mannequin)和铜傀儡(Copper Golem)的伪装形态。
新功能
- API 版本现已升级至 16
- 玩家伪装的皮肤以及任意实体伪装的装备现在作为伪装属性进行管理
- 对不支持伪装属性的客户端的兼容性支持将持续到 2026 年,或 1.22 正式发布时为止
- 新增对假人(Mannequin)伪装的支持
- 默认情况下,无法使用魔法瓶收集假人伪装
- 假人伪装具有与盔甲架和玩家伪装相同的“假装备”(Fake Equip)技能
mannequin/skin属性仅限管理员使用,因为插件会尝试从输入内容获取并缓存皮肤。你可以为玩家授予feathermorph.custom_skin权限,以允许他们使用该属性
- 新增对铜傀儡(Copper Golem)伪装的支持
- 默认情况下,可以使用魔法瓶收集铜傀儡伪装
- 为铜傀儡伪装新增了天气状态(Weather State)属性
- 初步支持 Ping Wheel
- 当前需要一个自定义插件,可在 https://github.com/MATRIX-feather/pingwheel-plugin-forked 找到
修复内容
- 修复了当
feathermorph.disguise_use_real_uuid设置为 true 时,玩家伪装出现的多个问题- 取消伪装时玩家会从 TAB 列表中消失
- 从远处传送或从旁观模式切换游戏模式时,伪装无法正常显示
其他变更
- 移除了伪装 NBT 黑名单配置
- 因为该功能已不再使用
完整更新日志: https://github.com/NiFeather/FeatherMorph/compare/2.4.3...2.5.0-beta.2
2.5.0-beta.3
on 2025 Oct 08新功能
- 为
entity/custom_name、mannequin/description和mannequin/hide_description属性添加了权限feathermorph.custom_text,默认对玩家开放 - 假人和铜傀儡伪装现已支持服务端渲染(Server Renderer)
- 需要使用基于 此 PR 构建的 PacketEvents
其他更新
- 多项伪装属性已变更,玩家需将模组更新至 0.16.0-beta.2!
- 合并
mannequin/skin_internal和mannequin/skin属性。现在mannequin/skin用于皮肤输入及属性同步 - 更改了插件向玩家同步
mannequin/skin的方式 entity/custom_name和mannequin/description现在支持以{开头的 JSON 文本组件player/skin现在支持 GameProfile 复合字符串mannequin/skin现在支持以{开头的有效MorphResolvableProfileStruct字符串
- 合并
此版本可能需要一些手动操作
伪装工具和魔法瓶的合成配方现在通过数据包注册。虽然这允许你进行更深入的自定义,但如果你想单独禁用其中某个配方,则需要安装一个配方管理插件。
如果你已经使用配方管理插件禁用了相关配方,则无需任何操作。(因为数据包使用的配方 ID 与旧版本行为一致)
如果你是从较早版本更新而来,建议同时查阅 2.4.1 版本的更新日志。
新功能
- 空魔法瓶的收集结果现在基于战利品表(loot table)
- 默认情况下,插件会处理来自战利品表的所有输出物品
- 你可以为特定物品设置自定义 NBT 数据
feathermorph:skip_magic_bottle_setup为true,使插件跳过该物品的处理 - 更多详情请参见:战利品表数据包
- 由于存在限制,并非所有类型的战利品表都受支持。目前仅
empty和entity类型经过测试可正常工作
- 新增权限节点
feathermorph.acquire_morph,用于控制特定玩家是否可以通过游戏行为解锁伪装形态 - 新增权限节点
feathermorph.disguise_use_real_uuid,用于控制伪装形态是否应使用玩家的真实 UUID 创建虚拟实体- 这可能有助于提升与 Simple Voice Chat 等模组的兼容性
- 但请注意,这应被视为一种 变通方案 或 临时修复
- 玩家现在可以使用
/discard-morph命令丢弃已解锁的伪装形态
问题修复
- 当目标为有效实体时,猫和狼的伪装形态未正确应用项圈颜色
/fm make_disguise_tool命令未正确注册- AI 修改功能在某些配置下注入失败并导致日志刷屏
其他变更
- AI 修改功能在新安装实例中默认关闭
- 我们现在重新使用 NMS 注入目标行为(goal),因为使用 API 会导致问题……
完整更新日志:https://github.com/NiFeather/FeatherMorph/compare/2.4.2...2.4.3
此版本可能需要一些手动操作
伪装工具(Disguise Tool)和魔法瓶(Magic Bottle)的合成配方现在通过数据包(datapack)注册。虽然这提供了更高的自定义灵活性,但如果你想单独禁用其中某个配方,则需要安装一个配方管理插件。
如果你已经使用配方管理插件禁用了相关配方,则无需进行任何操作。(因为该数据包使用的配方 ID 与旧版本行为一致)
已知此版本在 Folia 上存在 AI 修改功能的问题。我们建议在 Folia 服务器上尽快禁用此功能
修复内容
- 某些生物在本应因玩家而恐慌时未触发恐慌
- 猫和豹猫缺少针对玩家伪装状态的攻击目标
- 已驯服的生物仍会执行自定义攻击目标
其他更新
- 移除了
MorphBasicAvoidPlayerGoal中的调试输出("ToAvoid is xxxxx")造成的日志刷屏问题 - 确保
MorphBasicAvoidPlayerGoal中目标实体与运行中的生物处于同一线程- 此前无人报告相关问题,但为防万一做了处理 :D
新功能
- 在 https://github.com/NiFeather/FeatherMorph/pull/46 中,@MATRIX-feather 将伪装中的 NBT 使用替换为伪装属性
- 这会影响伪装的构建和同步
- 此功能允许玩家更自定义他们的伪装,而无需先创建一个实体。
- 玩家需要升级他们的客户端模组。当 1.22 到来或我们到达 2026 年时,计划结束对使用 NBT 同步伪装的遗留 API 实现的客户端的支持
- 目前尚未实现用于自定义属性的权限控制。
- 更多详细信息,请查看 https://github.com/NiFeather/FeatherMorph/pull/46
- 对于 Residence 集成:
- 在没有
place权限的住宅内的玩家,在伪装时将不再能够留下雪痕 - 在没有
use权限的住宅内的玩家,将不再能够激活他们的伪装技能
- 在没有
其他
- 调整了 CommonEventProcessor 中 PlayerRegisterChannelEvent 的监听优先级
- 为了让某人闭嘴,使他们不再在私信中向我抱怨 HuskSync 再次破坏了模组功能
新功能
- 现在可以通过设置
main_hand属性来设置玩家伪装的主手 - 玩家现在可以消耗任何具有有效组件的物品来解锁新的伪装。
/fm query命令现在接受多个玩家作为参数/request send命令现在接受多个玩家作为参数
错误修复
- 修复了一个长期存在的问题,即切换
Modify Boundingboxes选项时不会正确通知客户端重新连接 - 有时服务器的表情 GUI 不会显示表情名称。
- 离线伪装总是在 UUID 检查中失败
- 修复了一个潜在的问题,即玩家退出时玩家伪装的航路点不会被删除
其他
- 我们现在使用
addTransientModifier来添加属性修饰符- 这意味着我们添加的修饰符将不再被游戏保存。
- 带有
morph:fake_equip技能的伪装现在默认总是复制显示有效的目标实体的装备,即使它为空。 - 使用
getListeningPluginChannels来检查玩家注册的插件通道
API
- API 级别现在是 5
- 现在可以通过 API 获取插件的首选和所有支持的插件通道
- 现在可以监听插件是否恐慌
- 目前,只有在不支持 Minecraft 版本时,此插件才会恐慌
- 替换了
runWhenAPILoaded的使用为getApiFuture,它返回一个CompletableFuture <FeatherMorphAPI> - 添加了
PlayerConnection,可用于监听玩家客户端登录、获取他们实现的 API 或断开他们的连接。断开客户端现在需要一个Exception作为原因。


