简体中文
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: 节只在启用模型时才需要改; 完整行为说明见实体模型与动画
| 字段 | 类型 | 必填 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|---|
version | string | 否 | 当前版本 (1.0.13) | — | 配置结构的标识, 由插件的版本化合并流程维护, 不建议手动改 |
language | string | 否 | zh_CN | lang/ 下实际存在的文件名 (发货含 zh_CN, en_US) | 语言文件 ID, 对应 lang/<language>.yml; 文件缺失或某个键缺失时, 都会回退到回退语言 zh_CN |
release_default_data | boolean | 否 | true | true / false | 首次启动时是否释放插件内置的示例数据 (mobs/example_zombie.yml, loot_tables/example_zombie.yml, spawn_rules/overworld_elites.yml); 填 false 就不释放, 已经存在的文件不受影响 |
model.api | string | 否 | auto | auto / model_engine / better_model (另接受别名 modelengine / bettermodel) | 选择用哪个模型后端: auto 先试 ModelEngine, 不行再用 BetterModel. 取值非法时预检报 WARN 并回退 auto; 选中的后端没装时模型功能关闭, 并在启动日志里提示 |
model.view_distance | double | 否 | 48.0 | — (格) | 模型视距; 只有 ModelEngine 在 NEAR/MID 档会用到, BetterModel 忽略这一项 |
model.lod.near | double | 否 | 16.0 | 需 ≤ lod.mid | NEAR 档的上界, 单位是格, 按生物到最近玩家的距离判定 |
model.lod.mid | double | 否 | 32.0 | 需 ≥ lod.near, ≤ lod.far | MID 档的上界, 单位是格; 超过这个值就算 FAR, 它是模型真正隐藏的那条界线 |
model.lod.far | double | 否 | 48.0 | 需 ≥ lod.mid | 只用来判断附近有没有玩家, 搜索半径是 (far + 8), 也用于距离太远时的提前退出, 它不是隐藏的界线; 比 lod.mid 还小会让 MID 档有一部分距离永远用不到 |
model.movement_check_interval_ticks | int | 否 | 5 | ≥ 1 | 多久检查一次移动状态 (idle/walk/run) 和 LOD, 单位是 tick (1/20 秒) |
model.death_detach_delay_ticks | int | 否 | 40 | ≥ 0 | 死亡动画开始后, 再等多少 tick 才卸下模型实体 |
model.walk_speed_threshold | double | 否 | 0.12 | — (格/tick) | 水平速度达到这个值就算在行走 |
model.run_speed_threshold | double | 否 | 0.28 | — (格/tick) | 水平速度达到这个值就算在奔跑 |
model.transitions.idle_fade_ticks | int | 否 | 5 | ≥ 0 | idle 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.walk_fade_ticks | int | 否 | 5 | ≥ 0 | walk 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.run_fade_ticks | int | 否 | 5 | ≥ 0 | run 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.death_fade_ticks | int | 否 | 0 | ≥ 0 | death 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.hurt_fade_ticks | int | 否 | 2 | ≥ 0 | hurt 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.attack_fade_ticks | int | 否 | 3 | ≥ 0 | attack 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.skill_fade_ticks | int | 否 | 3 | ≥ 0 | skill 动作切换时的过渡混合时长, 单位是 tick |
model.transitions.interact_fade_ticks | int | 否 | 3 | ≥ 0 | interact 动作切换时的过渡混合时长, 单位是 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典型工作流
- 在
mobs/里新建生物定义文件, 指定 id, 类型和组件 - 在
loot_tables/里新建同名掉落表文件,mob_id与生物 id 对应 - (可选) 在
components里写loot_table键可以设置原版/数据包掉落表; 同名 YAML 掉落表不需要这个键 (文件存在就生效, 见组件参考的"掉落类字段") - 在
spawn_rules/里添加刷新规则, 把生物和刷新条件关联起来 - 执行
/emakimobs reload或重启服务器让配置生效 - 用
/emakimobs spawn <mob_id>在当前位置测试刷出效果
与其他模块的关系
| 模块 | 协作方式 |
|---|---|
| EmakiAttribute | 生物定义里的 ea_attributes 节点经 EA 的贡献提供方写入怪物属性值 |
| EmakiItem | 掉落表条目用 emaki_item 键指定 EmakiItem 物品 ID, 就能掉落自定义物品 |
| EmakiSkills | paper-plugin.yml 里声明为可选依赖 (required: false), 但 actions 的执行只靠 CoreLib 动作管道, 不需要安装 EmakiSkills |
| EmakiCoreLib | 动作行与技能的执行靠 CoreLib 的动作管道, 也依赖它的调度器, 动作注册与生命周期基础设施; 并向 CoreLib 目标选择器注册 type: emakimobs 身份 |
| ModelEngine / BetterModel | 都是可选后端, 由 config.yml 的 model.api 选择; 没安装时模型功能关闭 |