跳到主要内容

MythicMobs 技能

云模型的技能名称与参数跟 ModelEngine 相同。从 ModelEngine 换过来时,怪物文件一行都不用改。

MythicMobs/Mobs/frost_dragon.yml
FrostDragon:
Type: ZOMBIE
Skills:
- model{mid=frost_dragon} @self ~onSpawn
- state{s=roar;li=2;lo=3} @self ~onAttack
- partvis{m=frost_dragon;p=wing_r;v=false} @self ~onDamaged

技能一览​

技能参数说明
modelmid scale remove usestatemachine lockpitch inherit damagetint(d、tint) invisible(i) shownames(sn) nameoffset(nh) init seeself(vs) vr(viewrange)套上 / 移除模型;init=false 先建立模型、等 renderinit 才显示;seeself=false 模型在玩家身上时玩家自己看不到;vr = 可见距离倍率(1 = 64 格,再乘玩家的实体显示距离设置;不写依 config 的 render.view-range);shownames / nameoffset 见 生物名称;inherit 见 套在展示实体上;damagetint 与 ModelEngine 相同是开关(d=false = 受伤不闪红),也可以直接填颜色(例如 d=#FF4040);i=false = 不隐藏底下的实体
statemid(m) s li lo speed(sp) loop remove(r) ignorelerp(i) onend(oe) oeoffset(oeo)播放 / 停止动画;onend 见 动画播完时执行技能
brightnessm p b s设置亮度(p 为骨骼,省略 = 整个模型;b 方块光、s 天空光)
partvism p visible(v)显示 / 隐藏骨骼
tintm p c染色,c 为 #RRGGBB,省略 = 还原
defaultstatem t s修改自动动画:t 为 idle / walk / death / spawn,s 为动画名称
billboardm p b em c让骨骼永远面向每个玩家的镜头,见 面向玩家(1.0.6 起)
scalem s hitbox(h)改变模型大小,见 缩放(1.0.15 起)
changepartm p nm np把一根骨骼换成另一个模型某根骨骼的方块,见 换零件(1.1.0 起)
remapmodel(remap)m n map整个模型按骨骼名称换成另一个模型的外观,动画照旧(1.1.0 起)
submodelm sp rr=true 拿掉骨骼(含子骨骼)、r=false 放回来(1.1.0 起)
mountmodel dismountmodel dismountallmodel(dismountall)见 座位让玩家或怪物坐在模型的 p_ 骨骼上(1.1.0 起)
bindhitboxm p t在碰撞箱骨骼生成 MythicMobs 怪物并跟着骨骼走,见 名牌与碰撞箱(1.1.0 起)
setmodeltagm p tag v …在 tag_ 名牌骨骼显示文字(1.1.0 起)
light同 brightnessModelEngine 的旧名称,light{p=灯;block=15} 照样可用
animatemodelm p em o r copy pos rot scl rm用技能直接控制骨骼的位置 / 旋转 / 缩放,见 第一人称与玩家模型(1.5.0 起)
pairmodelhidden(h) remove(r)施法者身上的模型对目标玩家强制显示或隐藏(1.5.0 起)
renderinit(rendererinit)mmodel{init=false} 建立的模型开始显示(1.5.0 起)
modelplayerskin(modelskin)m p user uuid skin slim把玩家皮肤套到 limb[type=...] 肢体骨骼(1.5.0 起)
lockmodel(lockrotation)l锁住模型的转向(身体、头部、俯仰),l=false 解开(1.5.0 起)
bodyrotation(bodyclamp) enchant—ModelEngine 专属,接受但不做任何事,避免旧技能报错

目标选择器 @ModelPart、@ModelPassengers、@MountedModel 与条件 ModelHasPassengers 也同 ModelEngine,见 目标选择器与条件(1.1.0 起)。

变量与算式​

技能参数和 ModelEngine 一样支持 MythicMobs 的变量与算式,每次施放时才计算(1.0.10 起):

- setvariable{var=caster.size;value="%attribute_player_value_scale%";type=DOUBLE} @self
- model{mid=magical_slash;scale=2*<caster.var.size>} @self
- state{mid=magical_slash;s=<caster.var.anim>;speed=<caster.var.sp>*2} @self
技能支持变量的参数
modelmid scale
statemid s speed li lo
brightnessm p b s
partvism p
tintm p c
defaultstatem t s
billboardm p
scalem s
changepartm p nm np
remapmodelm n map
setmodeltagm p tag
@ModelPartm p x y z

state{} 找不到动画时会在后台提醒一次,并列出这个模型有哪些动画(例如改了 .bbmodel 里的动画名称却没有 /cm reload)。

抛射物(projectile missile orbital totem)用模型当子弹:bulletType=MEG 原样可用,见 抛射物模型子弹(1.0.8 起)。

state 的 loop​

写法效果
不写使用动画在 Blockbench 里设定的循环模式
loop / true强制循环
once / play_once / false播放一次
hold / hold_on_last_frame停在最后一帧(技能结尾姿势不会跳回待机)

li / lo 是淡入 / 淡出的 tick 数,lo 默认 0,与 ModelEngine 相同。

动画播完时执行技能(onend)​

onend(缩写 oe)填一个 MythicMobs 技能名称,动画播完时执行一次(1.3.0 起):

Skills:
- state{mid=boss;s=attack;loop=once;oe=Boss_AttackEnd} @self
- state{mid=sk132;s=start;loop=hold;oe=SK132_Explode} @self
# MythicMobs/skills/xxx.yml
Boss_AttackEnd:
Skills:
- state{mid=boss;s=idle;loop=loop} @self
- damage{a=20} @PlayersInRadius{r=4}
情况会不会执行
loop=once / hold(或动画本身是播放一次 / 停在最后一帧)播到最后执行一次
loop=loop 循环动画不执行(循环动画不会自己结束)
还没播完就被 state{...;r=true} 停掉、被同名动画重新播放取代、模型被移除不执行
  • 技能的施法者与 state{} 相同;技能里不写目标选择器的机制,目标就是播动画的实体。
  • 技能名称可以用变量(例如 oe=<caster.var.next>),在 state{} 执行当下决定。找不到技能时后台提醒一次。
  • speed 会影响播完的时间(speed=2 就提早一半)。
  • 无缝衔接:技能默认在播完前 2 tick 执行(oeoffset=2,1.3.2 起)——技能排到下一 tick 执行、新生成的模型送到玩家画面各要 1 tick,提早 2 tick 刚好让下一段(例如 oe 发射的子弹模型、播放的下一个动画)在这段结束的同一刻出现,中间没有空窗。要播完才执行就写 oeo=0,想更早就填更大的数字。

自动动画​

模型里有下列名称的动画时会自动播放,名称可以在 config.yml 的 default-states 修改:

状态默认动画时机
待机idle静止时循环
行走walk移动时循环
出生spawn套上模型时播放一次
死亡death实体死亡时播放

用 state{} 明确播放的动画会优先,自动动画不会叠在上面。model{usestatemachine=false} 可以关闭自动动画。

骨骼命名​

与 ModelEngine 相同,骨骼名称前面的标签决定特殊行为;骨骼 ID = 去掉标签的名称。 技能里的 p / pid 写 ID 或完整名称都可以,例如骨骼 h_head 写 p=head、p_seat 写 pbone=seat(1.1.0 起)。

标签 / 名称效果
h_ / hi_(含 h[...]_)跟随实体头部转向(例如龙头、炮塔)
p_乘客座位,mountmodel{driver=false} 用
mount驾驶座位(名称就是 mount);mountmodel 坐上去只会跟着模型走,经由 ModelEngine 兼容层(例如 MCPets)骑乘时可以操控
g_幽灵骨骼:方块平时不显示,用 changepart / remapmodel 换上后才看得到
tag_名牌骨骼,setmodeltag 用;tag_name 同时是生物名称的位置
b_ / ob_碰撞箱骨骼:方块只用来表示碰撞箱大小,不渲染;bindhitbox 用
hitbox不渲染(ModelEngine 的实体碰撞箱骨骼)
phead_ prarm_ plarm_ pbody_ prleg_ plleg_ModelEngine 的旧版玩家肢体,方块不渲染
limb[type=种类]_玩家肢体:用 modelplayerskin 套上玩家皮肤,方块只是预览、不渲染。种类见 第一人称与玩家模型(1.5.0 起)
armor[type=部位]_ModelEngine 的盔甲骨骼,目前不显示

换零件(changepart / remapmodel)​

换装、换武器、Boss 进入第二阶段时,不必移除再套上模型,直接换掉骨骼的外观,动画进度不中断:

# 左手换成另一个模型的左手
- changepart{m=knight;p=left_arm;nm=knight_gold;np=left_arm} @self
# 血量低于一半:整个模型换成狂暴版的外观(同名骨骼逐一替换,找不到的保持原样)
- remapmodel{m=boss;n=boss_enraged} @self ~onDamaged =50%
# 只换上半身:用 boss_upper_body 模型里的骨骼决定要换哪些
- remapmodel{m=boss;n=boss_equipment;map=boss_upper_body} @self
# 换回原本的样子
- remapmodel{m=boss;n=boss} @self
  • 只换骨骼自己的方块,子骨骼不受影响;换上来的方块跟着原骨骼的动画、旋转与缩放。
  • 两个模型同一根骨骼的结构相同时(例如同一个模型的不同配色),只换物品、不重新生成,画面不会闪。
  • 染色(tint{})在换零件、/cm reload 后会保留。

座位(mountmodel)​

# 施法者的模型:附近的玩家坐上 p_seat 骨骼
- mountmodel{mid=swing;driver=false;pbone=seat} @PlayersInRadius{r=3}
# Boss 抓住目标:坐在 p_grab 骨骼上,跟着动画移动;乘客不能打 Boss
- mountmodel{mid=lady;driver=false;pbone=grab;dmg=false} @target
# 放下 grab 座位上的所有乘客
- dismountallmodel{mid=lady;p=grab} @self
参数默认说明
mid全部模型施法者身上的模型(注意 m 在这个技能是 mode)
pbone / p / seat所有 p_ 座位座位骨骼,可填多个(seat1,seat2),坐第一个空位
drivertruefalse = 乘客座位;true = mount 骨骼
forcefalse座位都满了时换掉第一个座位的乘客
autodismountfalse目标已经骑着别的东西时,先下来再坐上去
dmg / intfalse乘客能不能打 / 右键自己坐的模型
  • 乘客按潜行键可以下来(与原版骑乘相同)。模型消失、乘客死亡或离线时座位自动收掉。
  • 与 ModelEngine 相同,服务器上乘客直接骑在模型的实体身上,玩家看到的座位跟着骨骼走;不会每 tick 传送乘客(1.2.0 起)。
  • dismountmodel 放下目标自己;dismountallmodel(dismountall)放下模型座位上的所有乘客。

名牌与碰撞箱​

# tag_name 骨骼显示文字(& 色码、MythicMobs 变量都可以)
- setmodeltag{m=totem;p=name;tag="&a已启动"} @self
- setmodeltag{m=totem;p=name;v=false} @self
# ob_shield 骨骼生成 Orc_Shield 怪物,跟着盾牌骨骼移动,模型消失时一起移除
- bindhitbox{m=orc;p=shield;t=Orc_Shield} @self
  • setmodeltag 参数同 ModelEngine:v 显示、billboard、scale、seethrough、shadow、linewidth、textopacity、backgroundcolor、usedefaultbackground、alignment。
  • bindhitbox 生成的怪物以施法者为上层(parent),可以填多根骨骼(p=shield,helmet)。

生物名称​

生物套上模型后,原版会把名称藏起来(实体隐形、身上有乘客都不显示),所以由云模型照原版规则代为显示: AlwaysShowName: true 时一直显示,否则准心对准时才显示(1.1.2 起)。

名称高度与原版、ModelEngine 相同(1.1.3 起):

模型里有名称显示在
tag_name 骨骼那根骨骼的位置
hitbox 骨骼它顶端上方 0.5 格
都没有实体碰撞箱顶端上方 0.5 格

光环、特效之类很高的方块不会影响名称高度;想调高调低用 nameoffset,不想显示用 shownames=false:

- model{mid=boss;nameoffset=1.5} @self ~onSpawn # 名称再往上 1.5 格(负数往下)
- model{mid=npc_portal;shownames=false} @self ~onSpawn # 这只生物的名称不显示
  • 全部关掉:config 的 render.show-names: false;整体调高:render.name-offset。
  • 同一只生物套了好几个模型时只显示一个名称(shownames=true 的优先,否则最先套上的那个)。

目标选择器与条件​

名称说明
@ModelPart{m=;p=}施法者模型某根骨骼的位置(em=false 时名称包含即可,会选到多根)
@ModelPassengers{m=;p=}施法者模型座位上的乘客
@MountedModel施法者正坐在哪个模型上
ModelHasPassengers{m=;p=;mode=AND}条件:模型座位上有乘客(mode=OR = 任何一个座位有人就成立)

@ModelPart 的偏移:offset=LOCAL(默认,跟着骨骼转:z 往前、x 往左、y 往上)、MODEL(跟着模型朝向)、GLOBAL(世界座标); x y z 或 l=x,y,z 为偏移量,scale=true(默认)时偏移乘上模型大小。

# 在剑尖放粒子
- particle{p=flame;a=5} @ModelPart{m=sword_demon;p=blade_tip}
# 以剑尖的位置为目标执行技能
- skill{s=BladeHit} @ModelPart{m=sword_demon;p=blade_tip}
# 炮口往前 1 格的位置
- particle{p=smoke;a=10} @ModelPart{m=tank;p=barrel;offset=LOCAL;z=1}

套在展示实体上​

技能特效常用 block_display / item_display / text_display 当底座,再用 MythicMobs 去改展示实体的缩放、旋转、位移来做动态效果。 加上 inherit=true,模型就会继承展示实体的参数,像是展示实体的内容一样跟着变(1.0.3 起):

- model{mid=slash_fx;inherit=true} @self ~onSpawn
展示实体的参数inherit=true 时模型会
变换:平移、左旋转、缩放、右旋转整个模型跟着变
interpolation_duration、start_interpolation照原版的方式平滑过去,和展示实体同步
朝向(偏航、俯仰)整个模型跟着转(不继承时只跟偏航,俯仰只转 h_ 头部骨骼)
teleport_duration转向也照这个时间平滑
亮度 brightness改用展示实体的亮度;技能的 brightness{} 仍然优先
billboard、发光、阴影不继承:模型由很多零件组成,各自转向玩家会散开
  • 不写 inherit 时看 config 的 render.inherit-display(默认 false),所以旧技能的行为不变。
  • 底座不是展示实体时,这个参数没有作用。
  • 继承设定会随模型一起存档,区块重新加载、重启服务端后照样生效。

面向玩家(Billboard)​

技能特效常需要「不管从哪个角度看都正对着自己」的光晕、刀光、符文。1.0.6 起有两种做法,可以混用:

1. Blockbench 的 Billboard 元素:在 Blockbench 里「添加 Billboard」,读取时自动面向玩家,不用写技能。

Blockbench 的朝向模式游戏内
lookat、rotate(默认)整张正对镜头(原版 CENTER)
lookat_y、rotate_y只左右转、保持直立(原版 VERTICAL)

2. billboard{} 技能:写法与 ModelEngine 相同,可以对整个模型或指定骨骼开关。

- model{mid=slash_fx} @self ~onSpawn
- billboard{p=glow;b=CENTER} @self ~onSpawn
参数默认说明
m全部模型模型 ID
p整个模型骨骼名称
bCENTERFIXED(关闭)、VERTICAL、HORIZONTAL、CENTER
emtrue骨骼名称要完全相同;false = 包含即可
cfalse子骨骼也一起套用
  • Blockbench 的 Billboard 元素:每一片各自面向镜头,不跟着骨骼旋转(与 Blockbench 预览相同),位置照样跟着骨骼与动画走。
  • billboard{} 套在一般方块上:整个模型(写 p 时为那根骨骼)当成一张贴片面向镜头,玩家从任何角度看到的都是 Blockbench 正面(北面)的样子;模型里的旋转、动画与相对位置都保留。例如把 group 转 -45° 做成斜劈的刀光,从哪个角度看都是斜的(1.0.9 起)。
  • 不写 p 时以模型原点为中心转向;写 p 时以那根骨骼的枢轴为中心。
  • 缩放照常,step 关键帧(逐格动画)照样直接切换。
  • 原版会依物品面的朝向打一层固定方向的光:面向玩家的平面从正侧面看会比正面暗一些(约 50% 与 74%),这是原版画物品的规则。

抛射物模型子弹​

把技能特效「射出去」:MythicMobs 的 projectile{}、missile{}、orbital{}、totem{} 都可以用模型当子弹(1.0.8 起)。 ModelEngine 的写法直接可用,bulletType=MEG 不用改;也可以写云模型自己的 bulletType=CMODEL。

FireBolt:
Skills:
- projectile{bulletType=MEG;bulletModel=fire_bolt;bulletState=spin;v=8;i=1;mr=20;hR=0.5;vR=0.5;onHit=FireBoltHit} @target
参数默认说明
bulletType—MEG / ME / MODELENGINE(没装 ModelEngine 时由云模型接手),或 CMODEL / CM(永远由云模型处理)
bulletModel—模型 ID(必填)
bulletState无飞行时循环播放的动画
bulletScale1模型缩放
bulletColor无染色,#RRGGBB
bulletBrightness无亮度 0–15(方块光与天空光同时设定),15 = 在暗处也是全亮
bulletPitchfalse云模型额外参数:true = 整个模型跟着飞行方向上下倾斜
  • 和 ModelEngine 相同:模型立刻转向飞行方向;上下角度只转 h_ 开头的头部骨骼(整个模型保持水平)。箭、长矛这类要整支抬头的子弹加上 bulletPitch=true。
  • 子弹结束(命中、飞到最远距离、时间到)时,模型里有 death 动画就先播完再消失,否则直接消失,与 ModelEngine 相同。
  • 碰撞、命中、速度、重力等全部照 MythicMobs 自己的计算,云模型只负责画出子弹。
  • 子弹底座是一个不存档、没有物品的展示实体(玩家看不到),服务器关闭或区块卸载时不会留下来。
  • bulletType=MEG 的接手规则跟着 mythicmobs.meg-aliases(见下一节):装了 ModelEngine 时 MEG 仍交给 ModelEngine,想用云模型就写 CMODEL。
  • 也可以继续用 bulletType=MOB:让子弹怪物在 ~onSpawn 用 model{} 套模型,云模型照常显示。

在 onStart 里控制子弹模型​

与 ModelEngine 相同,抛射物的 onStart(os)技能里,state{}、brightness{}、tint{}、partvis{}、billboard{}、scale{}、defaultstate{} 会套到子弹的模型上(1.0.15 起):

Shoot:
Skills:
- projectile{bulletType=MEG;model=sk132_shoot;os=Shoot-Start;i=1;d=60;v=7;mr=10} @Forward{f=10;y=1.5;LockPitch=true}
Shoot-Start:
Skills:
- e:p{p=flash}
- brightness{mid=sk132_shoot;b=15;s=15}
- state{mid=sk132_shoot;s=fly;speed=1;li=0;lo=0;loop=HOLD}
  • 只有目标是施法者自己时(@self 或不写目标)才会转到子弹上;写了别的目标(例如 @target)照常套到那个目标。
  • 写了 mid 而子弹不是那个模型时(例如想改施法者身上的另一个模型),照常套到施法者。
  • model{} 不会转到子弹上(子弹的模型由 bulletModel 决定)。
  • MythicMobs 只在 onStart 提供子弹,onTick、onHit、onEnd 里的技能照常套到施法者 / 目标。

第一人称与玩家模型​

ModelEngine 4 的第一人称武器、玩家动作模型(例如 EliteCreatures 的动画武器包)可以直接用,技能档不用改(1.5.0 起)。 在 ModelEngine 与云模型上用同一个武器包实测对照(1.21.4、26.2),第一人称的位置、角度与挥砍动作逐格相同。

dragon_fang_blade-hold:
Skills:
- model{mid=ec-dragon_fang_blade;init=false;i=false} @self
- billboard{bb=CENTER;mid=ec-dragon_fang_blade} @self # 整个模型面向镜头 = 锁在玩家视角前
- lockmodel{mid=ec-dragon_fang_blade;l=true} @self
- modelplayerskin{mid=ec-dragon_fang_blade} @self # 手臂画上玩家自己的皮肤
- renderinit{m=ec-dragon_fang_blade} @self
- aura{auraname=Hold;d=999999;i=1;oT=[
- animatemodel{mid=ec-dragon_fang_blade;p=orbit;position=0,<skill.var.y>,<skill.var.z>;o=true} @self
- pairmodel{hidden=true} @PIR{r=3} # 旁边的人看不到浮在脸前的手臂
]} @self

玩家身上的整个模型 billboard:与 ModelEngine 相同,零件照常骑在玩家身上,整组绕乘客座位转向镜头,所以模型会锁在玩家视角前,移动时不延迟(其他实体身上的 billboard 照旧绕模型原点转)。

animatemodel:参数与 ModelEngine 相同。

  • o=true:开始手动控制这根骨骼,这时它不播动画,姿势 = 骨骼本身的初始姿势 ⊕ 手动值;o=false 交回动画。
  • pos 的单位是格;r=true 时是在目前的值上累加。
  • copy=true(默认):从骨骼目前的姿势开始。与 ModelEngine 相同,模型刚建立的头几 tick 抄到的是初始值。
  • rm:LOCAL / GLOBAL,决定 r=true 时旋转的叠加方式。

limb[type=种类]_ 肢体骨骼:种类与 ModelEngine 相同,每段的大小与相对骨骼枢轴的位置也相同。

种类部位
head头
chest / body身体上 8 格 / 下 4 格
right_arm / left_arm上臂(上 4 格)
right_forearm / left_forearm前臂(下 8 格)
right_leg / left_leg大腿(上 4 格)
right_foreleg / left_foreleg小腿(下 8 格)
  • 细手臂(Alex)自动用宽 3 的手臂;也可以写 slim=true / false 强制。
  • 皮肤不用另外申请服务:云模型直接读玩家的皮肤图,以资源包的逐像素上色画出来,第二层(袖子、裤管)的透明度照原版。
  • 需要 1.21.4 以上的服务器。
  • 离线(盗版)服务器没有皮肤资料时,会用玩家名称向 Mojang 查;也可以写 user=正版名称、uuid= 或 skin=(皮肤的 textures 值)指定。

动画时间轴:Blockbench 动画的时间轴(Effects)关键帧照样执行(1.5.1 起)。

  • 脚本写 mm:技能名称:播到那一格时,由模型所在的实体施放这个 MythicMobs 技能。例如第一人称武器的蓄力射击、表情音效都是写在动画里的。
  • 音效关键帧:在模型位置播放。

第三人称:第一人称模型是骑在玩家身上、整组面向镜头的。服务器无法知道玩家用哪个视角,所以第一人称武器的 model{} 会写很小的可见距离,例如 vr=0.025(约 1.6 格):第一人称镜头贴着模型看得到;按 F5 时镜头离开几格、或其他玩家看你时,客户端就不画这组手(1.5.3 起支持 vr)。

pairmodel:hidden=true 让目标玩家看不到施法者身上的模型;不写 hidden 让目标玩家一定看得到;remove=true 取消。 与 ModelEngine 相同,@PIR 不包含施法者自己,创造 / 旁观模式的玩家也是目标。

缩放(scale)​

写法与 ModelEngine 相同,改变已经套上的模型大小(1.0.15 起):

- scale{s=2} @self
- scale{m=frost_dragon;s=1.5*<caster.var.size>} @self
参数默认说明
m全部模型模型 ID
s1缩放倍数,可用变量与算式
hfalsetrue = 改碰撞箱而不是外观
  • 改完的大小会存进实体,重开服务器后照样保留(与 model{scale=...} 相同)。
  • 云模型没有 ModelEngine 那种模型碰撞箱,h=true 改的是底下实体本身的原版 scale 属性(1.20.5 以上的服务器),实体的碰撞箱、骑乘高度跟着变,模型仍然贴在实体脚下。

与 ModelEngine 共存​

config.yml 的 mythicmobs.meg-aliases 决定谁处理 model{}、state{} 这些名称:

值行为
auto(默认)没装 ModelEngine 时由云模型接手;装了就交给 ModelEngine
true一律由云模型接手
false不接手,只用 c 开头的名称

不管哪种设置,c 开头的名称(cmodel{}、cstate{}、cchangepart{}、cmountmodel{}… 以及 @cModelPart、cModelHasPassengers)永远由云模型处理。 想先拿几只怪试试,保留 ModelEngine,把那几只怪的技能改成 cmodel{} / cstate{} 即可。

只支持 ModelEngine 的插件(例如 MCPets)想改用云模型,见 兼容 ModelEngine 插件。