自定义模型
EliteMobs 通过 Model Engine 和 FreeMineCraftModels 支持自定义模型。
前言
从 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。
- 将你的自定义模型 Blockbench 文件(
.bbmodel)放入目录(yourServer)/plugins/ModelEngine/blueprints中。 - 运行命令
/meg reload。如果一切正常,你应会收到[Model Engine] X models loaded的消息,其中x是你已注册的模型数量。
第 3 步. 分发资源包
如果你希望让服务器管理资源包下载,这可能是最棘手的部分。在着手自动分发之前,请先检查在你客户端拥有该资源包时系统是否能正常工作!
- 前往目录
(yourServer)/plugins/ModelEngine/resource pack,使用其中数据创建一个资源包,或将其中的assets文件夹加入你的资源包的assets中 - 将资源包分发给你的玩家。只有拥有该资源包的玩家才能看到自定义模型,对其他人来说看起来会非常诡异且破损。如果你打算大量使用这些模型,可能需要强制玩家使用资源包。
- (可选)若要允许玩家在登录时下载资源包,你需要将文件托管在网上某处,并将 server.properties 中的
resource-pack=字段指向该地址。* - (可选)如果你修改资源包,你需要使用
resource-pack-sha1=选项,以便服务器能检查玩家的资源包是否需要更新。要生成此值,请将你的资源包上传到 http://onlinemd5.com/ 并务必选择 SHA1 选项。每次更新资源包时都需要这样做,否则你的玩家将无法获得更新。* - (可选)要强制玩家使用资源包,请在 server.properties 中使用选项
require-resource-pack=true。*
- (可选)若要允许玩家在登录时下载资源包,你需要将文件托管在网上某处,并将 server.properties 中的
如果你修改了 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 资源包文件合并,并将合并后的资源包分发给你的玩家。只有拥有该资源包的玩家才能看到自定义模型。
故障排查
常见问题:
-
模型不可见:
- 验证
/meg reload显示了你的模型已加载 - 检查客户端是否已安装资源包
- 确保 customModel 名称与 .bbmodel 文件名匹配(不含扩展名)
- 验证
-
动画不播放:
- 验证 Blockbench 中的动画名称与文档完全匹配
- 检查动画在应只播放一次时是否被设为循环
- 使用 Model Engine 命令单独测试动画
-
两个插件都已安装:
- 如果两者都存在,EliteMobs 将使用 FreeMinecraftModels
- 若要强制使用 ModelEngine,请卸载 FreeMinecraftModels