Skip to content

EmakiMobs ​

下面依次说明 EmakiMobs 能做什么, 配置放在哪些目录, 以及和别的模块怎么配合

EmakiMobs 是自定义生物模块, 让你用 YAML 文件配置自定义生物的属性, 刷新规则 (这种生物在什么条件下会出现), 掉落表 (打死它掉什么) 和技能行为, 并与 EmakiAttribute, EmakiSkills, EmakiItem 深度集成

基本信息 ​

项目值
模块版本1.0.13
构建产物EmakiMobs-1.0.13.jar
Maven 坐标 (API)emaki.jiuwu.craft:emaki-mobs-api:1.0.9 (仅 provided, 不放入 plugins/)
主命令/emakimobs (别名 /emobs)
硬依赖EmakiCoreLib (required: true)
软依赖EmakiAttribute, EmakiSkills, EmakiItem, PlaceholderAPI, ModelEngine, BetterModel (均为 required: false, 缺失时对应功能降级)
权限节点emakimobs.use, emakimobs.spawn, emakimobs.reload, emakimobs.list, emakimobs.info, emakimobs.count, emakimobs.debug, emakimobs.admin

功能页面 ​

页面内容
命令与权限生物刷出, 查询, 管理与重载配置的命令
生物定义mobs/*.yml 的所有字段, 包括组件, 属性, 技能, 威胁表和 Boss 血条
组件参考ComponentMapper 支持的所有组件字段速查表
刷新规则spawn_rules/*.yml 的完整字段, 含 natural 与 autonomous 两种类型
掉落表loot_tables/*.yml 池, 条目和函数的配置方法
技能触发器生物触发器列表, 以及每条动作能拿到的上下文变量
实体模型与动画ModelEngine / BetterModel 模型挂载, 标准动作, K帧与 LOD 配置
API 与集成emaki-mobs-api 门面, 公开事件与第三方扩展入口

核心能力 ​

能力说明
自定义生物定义用 YAML 配置生物的类型, 属性, 外观和行为, 加载后立刻生效
类型覆写id 与原版 EntityType 同名时, 自动对所有该类型生物套用这份配置
两种刷新规则natural 会截住原版刷新事件后再替换, autonomous 由插件自己的调度器驱动 (interval / player_follow / day_interval / cron 四种 trigger)
掉落表系统支持多个池, 每个池里放多个条目, 条目可设权重, 概率过滤, 计数函数和掠夺附魔加成
EmakiItem 集成掉落表条目用 emaki_item 键就能直接掉落 EmakiItem 物品
EmakiAttribute 集成生物定义里的 ea_attributes 节点经 EA 贡献提供方写入怪物属性; health/mana 一类 RESOURCE 属性对怪物无效
技能触发器11 类触发器 (含 5 档血量阈值) 触发 CoreLib 动作管道
目标选择器生物定义用 target_selector 引用 target_selectors.yml, 按条件过滤与打分挑选目标; 同时向 CoreLib 目标选择器注册 type: emakimobs 身份, 供 select 源段识别自制生物
威胁仇恨表多玩家交战时按威胁值排序目标, 支持权重和衰减配置
Boss 血条在范围内玩家的界面顶部显示生物血量, 支持颜色和风格配置

默认配置目录 ​

text
plugins/EmakiMobs/
├── config.yml
├── target_selectors.yml    ← 目标选择器与打分快照 (静态文件, 仅在缺失时释放)
├── mobs/                   ← 生物定义文件
├── loot_tables/            ← 掉落表文件
├── spawn_rules/            ← 刷新规则文件
└── lang/

mobs/ 定义生物, loot_tables/ 定义掉落表, spawn_rules/ 定义刷新规则. 这三个目录里的文件只要按对应目录存好 (后缀 .yml), 执行 /emakimobs reload 后就生效

target_selectors.yml 由生物定义的 target_selector 字段引用; 它是静态文件 (不会随版本升级被合并覆盖), 只在文件缺失时从插件内释放一次. 字段说明见生物定义的"目标选择器"一节

主配置 ​

config.yml 的 model: 节只在启用模型时才需要改; 完整行为说明见实体模型与动画

字段类型必填默认值取值范围说明
versionstring否当前版本 (1.0.13)—配置结构的标识, 由插件的版本化合并流程维护, 不建议手动改
languagestring否zh_CNlang/ 下实际存在的文件名 (发货含 zh_CN, en_US)语言文件 ID, 对应 lang/<language>.yml; 文件缺失或某个键缺失时, 都会回退到回退语言 zh_CN
release_default_databoolean否truetrue / false首次启动时是否释放插件内置的示例数据 (mobs/example_zombie.yml, loot_tables/example_zombie.yml, spawn_rules/overworld_elites.yml); 填 false 就不释放, 已经存在的文件不受影响
model.apistring否autoauto / model_engine / better_model (另接受别名 modelengine / bettermodel)选择用哪个模型后端: auto 先试 ModelEngine, 不行再用 BetterModel. 取值非法时预检报 WARN 并回退 auto; 选中的后端没装时模型功能关闭, 并在启动日志里提示
model.view_distancedouble否48.0— (格)模型视距; 只有 ModelEngine 在 NEAR/MID 档会用到, BetterModel 忽略这一项
model.lod.neardouble否16.0需 ≤ lod.midNEAR 档的上界, 单位是格, 按生物到最近玩家的距离判定
model.lod.middouble否32.0需 ≥ lod.near, ≤ lod.farMID 档的上界, 单位是格; 超过这个值就算 FAR, 它是模型真正隐藏的那条界线
model.lod.fardouble否48.0需 ≥ lod.mid只用来判断附近有没有玩家, 搜索半径是 (far + 8), 也用于距离太远时的提前退出, 它不是隐藏的界线; 比 lod.mid 还小会让 MID 档有一部分距离永远用不到
model.movement_check_interval_ticksint否5≥ 1多久检查一次移动状态 (idle/walk/run) 和 LOD, 单位是 tick (1/20 秒)
model.death_detach_delay_ticksint否40≥ 0死亡动画开始后, 再等多少 tick 才卸下模型实体
model.walk_speed_thresholddouble否0.12— (格/tick)水平速度达到这个值就算在行走
model.run_speed_thresholddouble否0.28— (格/tick)水平速度达到这个值就算在奔跑
model.transitions.idle_fade_ticksint否5≥ 0idle 动作切换时的过渡混合时长, 单位是 tick
model.transitions.walk_fade_ticksint否5≥ 0walk 动作切换时的过渡混合时长, 单位是 tick
model.transitions.run_fade_ticksint否5≥ 0run 动作切换时的过渡混合时长, 单位是 tick
model.transitions.death_fade_ticksint否0≥ 0death 动作切换时的过渡混合时长, 单位是 tick
model.transitions.hurt_fade_ticksint否2≥ 0hurt 动作切换时的过渡混合时长, 单位是 tick
model.transitions.attack_fade_ticksint否3≥ 0attack 动作切换时的过渡混合时长, 单位是 tick
model.transitions.skill_fade_ticksint否3≥ 0skill 动作切换时的过渡混合时长, 单位是 tick
model.transitions.interact_fade_ticksint否3≥ 0interact 动作切换时的过渡混合时长, 单位是 tick

随包默认值 (EmakiMobs/src/main/resources/config.yml, 节选):

yaml
version: "1.0.13"
language: "zh_CN"
release_default_data: true

model:
  api: "auto"
  view_distance: 48.0
  lod:
    near: 16.0
    mid: 32.0
    far: 48.0
  movement_check_interval_ticks: 5
  death_detach_delay_ticks: 40
  walk_speed_threshold: 0.12
  run_speed_threshold: 0.28
  transitions:
    idle_fade_ticks: 5
    walk_fade_ticks: 5
    run_fade_ticks: 5
    death_fade_ticks: 0
    hurt_fade_ticks: 2
    attack_fade_ticks: 3
    skill_fade_ticks: 3
    interact_fade_ticks: 3

下面的示例把后端强制设为 BetterModel, 并把中距档收紧到 24 格:

yaml
language: "en_US"

model:
  api: "better_model"
  lod:
    near: 12.0
    mid: 24.0
    far: 48.0

典型工作流 ​

  1. 在 mobs/ 里新建生物定义文件, 指定 id, 类型和组件
  2. 在 loot_tables/ 里新建同名掉落表文件, mob_id 与生物 id 对应
  3. (可选) 在 components 里写 loot_table 键可以设置原版/数据包掉落表; 同名 YAML 掉落表不需要这个键 (文件存在就生效, 见组件参考的"掉落类字段")
  4. 在 spawn_rules/ 里添加刷新规则, 把生物和刷新条件关联起来
  5. 执行 /emakimobs reload 或重启服务器让配置生效
  6. 用 /emakimobs spawn <mob_id> 在当前位置测试刷出效果

与其他模块的关系 ​

模块协作方式
EmakiAttribute生物定义里的 ea_attributes 节点经 EA 的贡献提供方写入怪物属性值
EmakiItem掉落表条目用 emaki_item 键指定 EmakiItem 物品 ID, 就能掉落自定义物品
EmakiSkillspaper-plugin.yml 里声明为可选依赖 (required: false), 但 actions 的执行只靠 CoreLib 动作管道, 不需要安装 EmakiSkills
EmakiCoreLib动作行与技能的执行靠 CoreLib 的动作管道, 也依赖它的调度器, 动作注册与生命周期基础设施; 并向 CoreLib 目标选择器注册 type: emakimobs 身份
ModelEngine / BetterModel都是可选后端, 由 config.yml 的 model.api 选择; 没安装时模型功能关闭