兼容 ModelEngine 插件(MCPets)
有些插件写死只支持 ModelEngine——例如宠物插件 MCPets,没装 ModelEngine 就无法启动。
云模型提供 ModelEngine 兼容层(1.2.0 起):它的插件名称就叫 ModelEngine,这些插 件调用的 ModelEngine 接口全部交给云模型处理。
不用改那些插件,也不用重做模型。
安装
- 在资源中心的云模型页面下载 CloudModel-MEG兼容层 的 jar(与云模型放在一起,需要云模型 1.2.0 以上)。
- 把它和云模型一起放进
plugins,重启服务器。 - 后台出现下面这行就完成了:
[ModelEngine] 已连接 CloudModel:只支持 ModelEngine 的插件(例如 MCPets)现在会使用 CloudModel 的模型
不要和真正的 ModelEngine 同时安装
兼容层的插件名称就是 ModelEngine,两个同时放会冲突。已经装了 ModelEngine 的服务器不需要兼容层,云模型照常用 cmodel{} 等技能共存(见 与 ModelEngine 共存)。
装了兼容层以后,MythicMobs 的 model{}、state{}、mountmodel{} 等技能照常由云模型接手(就像没装 ModelEngine 一样)。
已测试的插件
| 插件 | 测试版本 | 支持的功能 |
|---|---|---|
| MCPets | 4.1.6(1.21+) | 召唤宠物、宠物名称、骑乘(walking / flying / force_walking / force_flying)、下坐骑、DespawnOnDismount、MountPermission、只有主人能骑 |
其他只支持 ModelEngine 的插件,只要用到的是下面列出的接口也能用;用到没做的接口会在后台报错,欢迎回报给我们补上。
MCPets 设置
宠物的 MythicMobs 怪物照常写 model{},MCPets 的宠物配置不用改:
# MythicMobs/mobs/pets.yml
Dragon_Pet:
Type: ZOMBIE
Options:
MovementSpeed: 0.3 # 骑乘时的速度也看这个
Invincible: true
Skills:
- model{mid=dragon_pet} @self ~onSpawn
# MCPets/Pets/dragon.yml
Id: dragon
MythicMob: Dragon_Pet
Mountable: true
MountType: flying # walking / force_walking / flying / force_flying
DespawnOnDismount: false
模型的骨骼
| 骨骼 | 作用 |
|---|---|
mount | 驾驶座:玩家骑上宠物时坐在这里,跟着动画移动。没有 mount 骨骼时直接骑在宠物身上(原版的骑乘位置) |
p_ 开头 | 乘客座位 |
tag_name | 宠物名称显示的位置(MCPets 设置的名称,例如 Pet of 玩家)。没有这根骨骼时照原版规则显示在宠物头上 |
骑乘操控
与 ModelEngine 的规则相同,速度是怪物的移动速度属性(MythicMobs 的 MovementSpeed):
| MountType | 移动 | 跳跃键 | 潜行键 |
|---|---|---|---|
walking(默认) | 前后左右照玩家面向走 | 在地上或水里跳起来 | 下坐骑 |
force_walking | 同上 | 同上 | 不会下来 |
flying | 不受重力,前后左右照玩家面向飞 | 往上飞 | 空中往下飞;落地后再按才下坐骑 |
force_flying | 同上 | 往上飞 | 只会往下飞,不会下来 |
- 骑乘中宠物不会自己乱跑(AI 暂停),下来后恢复。
- 主人以外的玩家不能骑(MCPets 的规则) ,
MountPermission照常生效。 - 新版(1.21.2 起)与旧版客户端的按键封包都支持。
骑乘的运作方式
1.2.0 起云模型的座位(mountmodel{} 与兼容层的骑乘)改成与 ModelEngine 相同的做法:
- 服务器上:乘客直接骑在模型的实体身上。不会每 tick 传送玩家,潜行下坐骑、死亡、离线等都照原版处理,其他插件看到的就是「玩家骑着这只怪」。
- 玩家看到的:座位跟着
mount/p_骨骼走,动画怎么动乘客就怎么动。
以前座位是一个看不见的实体,每 tick 连乘客一起传送,会让「玩家传送时把人放下来」的插件(MCPets 就是)把玩家踢下来;现在不会了。
给开发者:支持的 ModelEngine 接口
兼容层实现了下面这些 ModelEngine R4 接口(包名、方法名与 ModelEngine 相同):
| 类 | 方法 |
|---|---|
ModelEngineAPI | getModeledEntity(UUID / Entity)、isModeledEntity、removeModeledEntity、getMountControllerTypeRegistry、getMountPairManager |
ModeledEntity | getBase、getModels、getModel、hasModel、removeModel、destroy、getMountData |
ActiveModel | getModeledEntity、getBlueprintId、getBone、getBones、getMountManager、destroy |
ModelBone | getBoneId、getBoneBehavior(NAMETAG、MOUNT、HEAD、GHOST…)、hasBoneBehavior |
NameTag | setString、getString、setVisible、isVisible |
MountData / MountManager | getMainMountManager、getDriver、hasRiders、hasPassengers、mountDriver、mountPassenger、dismountDriver、dismountRider、dismountAll |
MountPairManager | getController、getMountedPair、tryDismount |
MountControllerTypeRegistry | get("walking" / "force_walking" / "flying" / "force_flying") |
| 事件 | ModelMountEvent(骑上之前,可取消)、ModelDismountEvent(下来之后) |
写新插件建议直接用云模型自己的 开发者 API。