跳到主要内容

自定义模型

EliteMobs 通过 Model EngineFreeMineCraftModels 支持自定义模型。

前言

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

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

FreeMineCraft Models

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

基岩版(Geyser)支持

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

LibsDisguises 集成

EliteMobs 还支持 LibsDisguises 作为自定义模型的替代方案。当未配置自定义模型时,EliteMobs 可以使用 LibsDisguises 来改变实体外观。这种集成会自动处理名称可见性的同步。

要使用 LibsDisguises 而非自定义模型,请在配置 Boss/NPC 伪装设置时不指定 customModel 字段。

脚本化物品模型(FMM)

EliteMobs 自定义物品可以使用 FreeMinecraftModels 的脚本化物品系统,以实现高级的模型 + Lua 脚本行为。这超越了静态自定义模型——脚本化物品可以通过 Lua 脚本响应装备、攻击、右键点击以及许多其他物品事件(FMM 总共提供 22 个物品脚本钩子)。

要使用此功能,请将自定义物品配置中的 scriptedItem 字段设为 FMM 物品 ID。EliteMobs 处理名称、描述、附魔与等级;FMM 提供 3D 模型与脚本行为。

# EliteMobs 自定义物品配置示例
material: IRON_SWORD
name: "&cFlame Blade"
enchantments:
- "FIRE_ASPECT,2"
scalability: scalable
scriptedItem: flame_blade

请参阅 FMM Lua 入门指南了解如何编写物品脚本,以及 FMM API 指南了解开发者集成详情。

最低要求

EliteMobs、Model Engine R3.0.0* 或更高版本, FreeMinecraftModels、Blockbench**,以及一个 Minecraft 资源包。

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

插件优先级

如果同时安装了 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 数据

注:如有疑问或问题,请参阅 Model Engine 这里的 Wiki。

  1. 将你的自定义模型 Blockbench 文件(.bbmodel)放入目录 (yourServer)/plugins/ModelEngine/blueprints 中。
  2. 运行命令 /meg reload。如果一切正常,你应会收到 [Model Engine] X models loaded 的消息,其中 x 是你已注册的模型数量。

第 3 步. 分发资源包

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

  1. 前往目录 (yourServer)/plugins/ModelEngine/resource pack,使用其中数据创建一个资源包,或将其中的 assets 文件夹加入你的资源包的 assets
    1. 如果你正在创建一个新的资源包,你可以将 resource pack 中的文件压缩成 zip,这就是一个可分发的有效资源包。更多信息
    2. 如果你已有资源包,请确保不会意外覆盖现有模型。更多信息
  2. 将资源包分发给你的玩家。只有拥有该资源包的玩家才能看到自定义模型,对其他人来说看起来会非常诡异且破损。如果你打算大量使用这些模型,可能需要强制玩家使用资源包。
    1. (可选)若要允许玩家在登录时下载资源包,你需要将文件托管在网上某处,并将 server.properties 中的 resource-pack= 字段指向该地址。*
    2. (可选)如果你修改资源包,你需要使用 resource-pack-sha1= 选项,以便服务器能检查玩家的资源包是否需要更新。要生成此值,请将你的资源包上传到 http://onlinemd5.com/ 并务必选择 SHA1 选项。每次更新资源包时都需要这样做,否则你的玩家将无法获得更新。*
    3. (可选)要强制玩家使用资源包,请在 server.properties 中使用选项 require-resource-pack=true*

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

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

合并资源包

如果需要合并资源包,你可以手动操作。但我们建议使用类似 merge.elmakers 这样的在线工具来合并你的资源包。

第 4 步. 祈祷它能用

假设一切操作无误,你现在应该能在你的 Boss 或 NPC 上看到自定义模型。你可以通过以下命令生成它们:

  • 自定义 Boss:/em spawn boss filename.yml
  • NPC:/em place npc filename.yml

之后可以通过命令 /em remove 移除它们。

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

EliteMobs 能够使用 Model Engine 认为有效的任何模型,这意味着几乎没有什么是做不到的。

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

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

动画

请注意,此部分仍在扩展中,因为该系统还很新。随着功能请求的到来,会有更多内容加入。

idle

idle 是不在战斗中且不在移动的实体的动画名称。EliteMobs 会将模型初始化为 idle 状态,但不会覆盖 ModelEngine 自带的 idle 动画系统。模型将通过 ModelEngine/FMM 的默认行为自动使用此动画。

walk

walk 是正在移动的实体的动画名称。EliteMobs 会将模型初始化为 walk 状态,但不会覆盖 ModelEngine 自带的 walk 动画系统。模型将通过 ModelEngine/FMM 的默认行为自动使用此动画。

attack

有三种攻击动画:

attack

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

attack_melee

attack_melee 是自定义 Boss 使用原版 Minecraft 近战攻击攻击某个实体时正确的动画名称。覆盖 attack。请注意,动画在伤害造成之后播放。这目前是一个限制。因此,请尽量让动画非常快。

attack_ranged

attack_ranged 是自定义 Boss 生成弹射物实体时正确的动画名称。覆盖 attack。请注意,动画在弹射物发射之后播放。这目前是一个限制。因此,请尽量让动画非常快。

动画回退系统

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

  • 如果未定义 attack_melee,则回退到 attack
  • 如果未定义 attack_ranged,则回退到 attack
  • 如果未定义 attack,则不播放动画

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

damaged

注意

受伤动画目前尚未实现。该功能计划在未来版本中加入。模型在受到攻击时不会自动播放受伤动画。

death

death 是死亡动画对应的正确动画名称。EliteMobs 不会修改 Model Engine 使用的默认 idle 动画系统。

powers

注意

技能动画尚未实现。该功能计划在未来版本中加入。

注:此部分仍在开发中。以下为计划中的功能。

EliteMobs 中的每一项技能都可以被分配一个动画。该动画会在技能触发时开始,并且目前在技能使用过程中没有提供进一步的触发器。某些技能(如无敌)不会有任何效果,因为它们没有触发器,只是 Boss 的被动属性。

要为技能分配动画,动画必须与 elitemobs 技能文件同名。

例如,要为僵尸死灵之书(zombie necronomicon)技能添加动画,动画应被命名为 zombie_necronomicon.yml。该动画将在技能触发时开始播放,如果未设置循环,则在动画结束或技能结束时停止。

从副本导入自定义模型

第 1 步. 正常导入

导入包含自定义模型的副本打包压缩文件夹后,自定义模型会被自动移动到 (yourServer)/plugins/ModelEngine/blueprints,Model Engine 会自动重载以生成相关资源包与 Model Engine 文件。

第 2 步. 资源包

EliteMobs 在启动时会自动将其内置资源包文件导出到 (yourServer)/plugins/EliteMobs/resource_pack 文件夹。此导出使用校验和比较以避免不必要的复制,因此仅在插件版本更改时才更新文件。

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

故障排查

常见问题:

  1. 模型不可见:

    • 验证 /meg reload 显示了你的模型已加载
    • 检查客户端是否已安装资源包
    • 确保 customModel 名称与 .bbmodel 文件名匹配(不含扩展名)
  2. 动画不播放:

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

    • 如果两者都存在,EliteMobs 将使用 FreeMinecraftModels
    • 若要强制使用 ModelEngine,请卸载 FreeMinecraftModels