跳到主要内容

自定义模型

EliteMobs 通过 Model Engine 和 FreeMineCraftModels 支持自定义模型。

前言

从 EliteMobs 的角度来看,自定义模型系统非常简单,管理员只需在 NPC 或自定义 Boss 配置文件中添加一行,指明使用哪个自定义模型即可。然而,为了让该系统完全可用,需要在 Model Engine 与 Minecraft 端采取正确的步骤,而这些步骤并不那么容易上手。

本指南将详细介绍与 Model Engine 和 Minecraft 对接的部分。它不会告诉你如何使用 Blockbench 创建自定义 Boss,也不会详细讲解 Model Engine 的工作方式。关于这些已经有大量他处的指南可参考,如果你想了解更多相关系统,直接查看它们的文档会更有帮助。

FreeMineCraft Models​

如果你想了解如何使用 FMM 让你的模型生效,可以查看这个 Wiki 页面以了解更多。

模型名牌

当前 FreeMinecraftModels 优先使用作者设置的 tag_ 骨骼(例如 tag_head),没有锚点时则把名牌放在模型碰撞箱上方。锚点可让作者选择位置,但不再是显示名称的必要条件。FMM 负责整个名牌,包括 EliteMobs NPC 的名称和角色行。较旧的 FMM 版本可能仍然需要锚点。

基岩版(Geyser)支持​

通过 Geyser/Floodgate 连接的基岩版玩家能否看到自定义模型,完全取决于你的模型插件(ModelEngine 或 FreeMinecraftModels)以及你的资源包配置,而不取决于 EliteMobs。EliteMobs 确实会检测基岩版客户端,但它将这一信息用于菜单渲染、名牌定位等方面——它不会生成或提供单独的基岩版兼容模型。关于基岩版/Geyser 的模型支持,请参阅你所用模型插件的文档。

LibsDisguises 集成​

EliteMobs 也支持 LibsDisguises 作为自定义模型的替代方案。已配置且可用的模型优先于伪装;没有选择可用模型时,可以使用配置的伪装。此集成会同步名称的可见性。

要使用 LibsDisguises,请配置 Boss/NPC 的伪装,不指定 customModel 字段。

物品模型和魔法武器(FMM)

使用 fmmItemModel 设置 FMM 物品外观;对于作者定义的魔法武器,再设置 weaponType: WANDS 或 weaponType: STAVES。EliteMobs 保留名称、描述、附魔和等级。FMM 提供模型,并为魔法武器提供攻击定义。

旧的 scriptedItem 桥接仍用于作者定义物品的身份和显示,但不再运行装备物品的 Lua 脚本。FMM 会拒绝包含非空 scripts 列表的物品定义。不要将它与作者定义的魔法武器组合使用。

# Example EliteMobs custom item config
material: IRON_SWORD
name: "&cFlame Blade"
enchantments:
- "FIRE_ASPECT,2"
scalability: scalable
fmmItemModel: flame_blade

引用的 FMM 物品或模型必须存在。缺少外观模型时,可能保留原版材质并输出警告;如果显式设置的 weaponType 与可用的作者定义武器不匹配,则会拒绝构建物品。请参阅 FMM 魔法武器和自定义物品配置。

最低要求

需要 EliteMobs、兼容的 FreeMinecraftModels 版本或 ModelEngine 集成*、Blockbench** 和 Minecraft 资源包。ModelEngine 集成针对 R3 API:只有当 ModelEngine 已启用且其版本中包含 R3 时,EliteMobs 才会选用它。更新的主版本不代表自动兼容。

* 该插件可能有进一步的依赖。请查阅其官方文档。
** 创建与编辑自定义模型所必需。如果你只是想安装内容而不修改它们,则不需要它。

插件优先级

如果同时安装了 ModelEngine 和 FreeMinecraftModels,EliteMobs 将默认使用 FreeMinecraftModels。同时只会启用一个自定义模型插件。

手动设置自定义模型

注意:本指南假设你已经拥有一个有效的自定义模型。它们以 Blockbench 文件格式提供(.bbmodel)。

EliteMobs 能够为 NPC 与自定义 Boss 使用自定义模型。两者的操作流程相同,如下:

第 1 步. 设置 EliteMobs 配置​

前往你想修改的自定义 Boss 或 NPC 的配置文件,并添加以下一行:

customModel: modelname

将 modelname 替换为你的模型名称。该名称即你所使用的自定义模型文件的名称。例如,测试 Boss 的自定义模型文件为 showcase_boss.bbmodel。因此,配置选项应为

customModel: showcase_boss

EliteMobs 端就到此为止!接下来会更复杂一些。

第 2 步. 生成 Model Engine 数据​

以下路径来自已归档的 ModelEngine 导入指南。请使用适合已安装 ModelEngine 版本的说明。

  1. 将你的自定义模型 Blockbench 文件(.bbmodel)放入目录 (yourServer)/plugins/ModelEngine/blueprints 中。
  2. 运行适合当前 ModelEngine 版本的模型重载命令;归档指南使用 /meg reload models。确认模型出现在已加载注册表中,并检查控制台错误。

第 3 步. 分发资源包​

如果你希望让服务器管理资源包下载,这可能是最棘手的部分。在着手自动分发之前,请先检查在你客户端拥有该资源包时系统是否能正常工作!

  1. 前往目录 (yourServer)/plugins/ModelEngine/resource pack,使用其中数据创建一个资源包,或将其中的 assets 文件夹加入你的资源包的 assets 中
    1. 新资源包应将 assets 和有效的 pack.mcmeta 放在 ZIP 根目录。使用兼容客户端版本的元数据,不要复制归档示例中的旧格式编号。更多信息。
    2. 如果你已有资源包,请确保不会意外覆盖现有模型。更多信息。
  2. 将资源包分发给你的玩家。只有拥有该资源包的玩家才能看到自定义模型,对其他人来说看起来会非常诡异且破损。如果你打算大量使用这些模型,可能需要强制玩家使用资源包。
    1. (可选)若要允许玩家在登录时下载资源包,你需要将文件托管在网上某处,并将 server.properties 中的 resource-pack= 字段指向该地址。*
    2. 自动下载时,将最终 ZIP 的 SHA-1 填入 resource-pack-sha1=。可在本地用 PowerShell 的 (Get-FileHash -LiteralPath "pack.zip" -Algorithm SHA1).Hash.ToLowerInvariant() 或 Linux 的 sha1sum pack.zip 计算。只复制 40 字符的哈希值,并在 ZIP 每次变更后更新。
    3. (可选)要强制玩家使用资源包,请在 server.properties 中使用选项 require-resource-pack=true。*

如果你修改了 server.properties,你需要重启!

* 注:网上有许多指南可以帮你完成此操作,如果上述说明对你帮助不大,可以去搜索一下。

合并资源包​

可以手动合并资源包,或使用 ResourcePackManager 管理 Nightbreak 资源包流程。merge.elmakers 等外部工具可以合并 ZIP,但仍需解决模型 ID 冲突,并在目标客户端验证合并后的资源包。

第 4 步. 验证模型​

模型注册表加载完成、客户端应用对应资源包后,在实际 Boss 或 NPC 上验证模型。以下命令要求由玩家执行,并具有相应权限:

  • 自定义 Boss:/em spawn boss filename.yml — elitemobs.place.admin,在视线指向的位置生成。
  • NPC:/em place npc filename.yml — elitemobs.place.npc,在脚下保存持久放置。

/em remove 切换移除模式。攻击目标将其移除,然后再次运行命令退出此模式。这样移除已放置的 NPC 也会删除保存的放置记录。

为 EliteMobs 创建与适配自定义模型

请使用所选提供者支持且已成功加载的模型。提供者的兼容性及支持的模型功能仍有限制。

不过,对于动画,需要使用特定名称才能保证 Boss 可以使用动画。

这些动画名称即你在 Blockbench 的动画标签页中设置的名称。你随时可以重命名它们,这意味着你可以将任何现有模型改造为与 EliteMobs 兼容。

动画​

EliteMobs 的自动钩子使用以下动画名称。

idle​

idle 是常规待机动画名称。EliteMobs 将 ModelEngine 模型启动为其默认待机状态;后续待机和移动动画由模型提供者选择。

walk​

walk 是常规移动动画名称。EliteMobs 不会在附加模型时显式启动 walk 动画;移动动画由 ModelEngine/FMM 选择。

attack​

有三种攻击动画:

attack​

attack 是 Boss 进行攻击时正确的通用动画名称。

attack_melee​

attack_melee 在自定义 Boss 作为 Bukkit 实体伤害事件的直接伤害者时替代 attack。动画在事件处理期间请求播放,不是会延迟命中的前摇。已取消事件被忽略,但后续监听器仍可能取消伤害。请使用较短动画,不要依赖它调度伤害发生时间。

attack_ranged​

attack_ranged 在弹射物生成事件将自定义 Boss 识别为生物射手时替代 attack。它响应弹射物生成,不会让发射等到动画结束。没有这种射手关联的弹射物不会触发自动钩子。

动画回退系统​

EliteMobs 对攻击动画采用回退系统:

  • 如果未定义 attack_melee,则回退到 attack
  • 如果未定义 attack_ranged,则回退到 attack
  • FMM 在播放前检查 attack 是否存在;ModelEngine 适配器将该回退名称传给其动画处理器

这允许你创建一个适用于所有攻击类型的单一攻击动画,或针对近战与远程攻击分别创建专门动画。

damaged​

注意

EliteMobs 没有注册自动 damaged 动画钩子。提供者的受伤变色或其他命中反馈与播放这个命名动画是两回事。

death​

在 EliteMobDeathEvent 中,如果自定义 Boss 模型存在 death 动画,EliteMobs 就会请求播放。移除和阶段切换不等于死亡事件。动画播放和模型清理仍取决于提供者的生命周期。

powers​

注意

技能名称与模型动画名称之间没有自动匹配。

已经可以从技能中播放动画

虽然没有自动名称匹配,但两个脚本系统都能显式按名称播放动画:

  • **EliteScript:**使用 PLAY_ANIMATION 动作,以动画名称为值。它将各目标解析为自定义 Boss,并在其模型上播放动画。
  • Lua:context.boss:play_model_animation("animation_name")。

两者都会在模型没有该名称的动画,或 Boss 没有自定义模型时静默跳过。

从副本导入自定义模型

第 1 步. 正常导入​

导入包含自定义模型的副本打包 ZIP 文件夹时,模型会移入已安装的模型插件:

  • 已安装 FreeMinecraftModels — 模型进入 (yourServer)/plugins/FreeMinecraftModels/models,若旧版 Models 文件夹已存在则使用它;过程中将 .bbmodel 转换为 .fmmodel。随后 EliteMobs 触发模型安装事件,让 FMM 重建模型注册表。
  • 只安装 ModelEngine — 模型进入 (yourServer)/plugins/ModelEngine/blueprints。当前共享导入器不会自动重载 ModelEngine;请用适合其版本的命令重建模型和资源包。
安装 DLC 后首次启动

导入启动 FMM 模型重建后,EliteMobs 会等待 FMM 达到初始化完成状态,最多 300 秒(五分钟)。FMM 失败或被禁用、等待超时或被中断,都会在加载不完整模型和物品之前停止 EliteMobs 初始化。检查两个插件的控制台错误,解决重建问题后再重启;这不是一次只跳过部分模型实体的成功启动。

第 2 步. 资源包​

EliteMobs 启动时将内置包导出到 (yourServer)/plugins/EliteMobs/resource_pack/em_rsp_defaults,并在父文件夹记录 .rsp_checksum。内置与保存的校验和一致且 em_rsp_defaults 存在时,会跳过复制。更改插件版本本身不会强制导出;校验和一致也不会逐个检查导出文件是否被本地修改或删除。替换使用预先准备的目录交换;请将自己的资源包改动保存在此生成文件夹之外。

你需要将这些资源包文件与任何 Model Engine 资源包文件合并,并将合并后的资源包分发给你的玩家。只有拥有该资源包的玩家才能看到自定义模型。

故障排查

常见问题:

  1. 模型不可见:

    • 确认所选提供者的注册表包含模型,使用适合该提供者及版本的重载命令
    • 检查客户端是否已安装资源包
    • 确保 customModel 与注册的模型 ID 匹配,通常是没有扩展名的文件名
  2. 动画不播放:

    • 验证 Blockbench 中的动画名称与文档完全匹配
    • 检查动画在应只播放一次时是否被设为循环
    • 使用所选提供者的命令单独测试动画
  3. 两个插件都已安装:

    • 如果两者都存在,EliteMobs 将使用 FreeMinecraftModels
    • 没有按模型选择提供者的设置。若要改用 ModelEngine,请禁用 FreeMinecraftModels 并运行 R3 版本的 ModelEngine
  4. Boss 或 NPC 没有可见名称(FMM):

    • 先检查 name、Boss 的 alwaysShowName 和模型加载情况。
    • 当前 FMM 在没有 tag_ 锚点时将名牌放在碰撞箱顶部上方。位置不对时,检查碰撞箱高度或添加作者指定的锚点。
    • FMM 发出重载完成事件时会重新附加 NPC 模型。若重载后模型消失,请检查控制台警告。