简体中文
共享玩法事件 ID
共享玩法事件能填的 ID, 以及每个事件会带哪些变量, 汇总如下. EmakiCoreLib 会把一部分 Bukkit 和 MythicMobs 玩法事件统一整理成共享玩法事件, 再分发给 EmakiLevel 和 EmakiCodex 使用
它能直接回答你两个常见的配置问题:
- EmakiLevel 的
sources.*.trigger可以填写哪些触发器 ID - EmakiCodex 的
triggers.entries[].event可以填写哪些事件 ID
NOTE
这些 ID 是配置用的规范字符串, 不是 Bukkit 事件类名. 照表格直接填小写 ID 就行, 例如 entity_kill, craft_item
使用位置
| 插件 | 配置位置 | 字段 | 用途 |
|---|---|---|---|
| EmakiLevel | plugins/EmakiLevel/sources/*.yml | sources.<source_id>.trigger | 触发经验来源规则 |
| EmakiCodex | plugins/EmakiCodex/advancements/*.yml | advancements.<node_id>.triggers.entries[].event | 触发成就节点自动授予 |
可填写的事件 ID
| 事件 ID | 原始来源 | EmakiLevel | EmakiCodex | 变量 |
|---|---|---|---|---|
entity_kill | 玩家击杀实体; 优先使用 Bukkit killer, 必要时使用最近伤害玩家归属 | 可用于经验来源 | 可用于成就触发器 | %entity_type% |
mythic_mob_kill | entity_kill 同次死亡中识别到 MythicMobs 活动怪物 | 可用于经验来源 | 可用于成就触发器 | %mythic_id%, %mythic_level% |
block_break | 玩家破坏方块 | 可用于经验来源 | 可用于成就触发器 | %block_type% |
crop_harvest | block_break 的派生触发; 被破坏方块是已成熟 Ageable 作物 | 可用于经验来源 | 可用于成就触发器 | %block_type% |
craft_item | 玩家通过合成配方合成物品 | 可用于经验来源 | 可用于成就触发器 | %result_type%, %result_amount% |
furnace_extract | 玩家从熔炉取出冶炼产物 | 可用于经验来源 | 可用于成就触发器 | %result_type%, %result_amount% |
player_fish | 玩家钓鱼事件 | 可用于经验来源 | 可用于成就触发器 | %fish_state% |
brew_complete | 炼药完成, 并归属到最近操作该炼药台的玩家 | 可用于经验来源 | 可用于成就触发器 | %potion_type% |
entity_tame | 玩家驯服实体 | 可用于经验来源 | 可用于成就触发器 | %entity_type% |
block_place | 玩家放置方块 | 仅用于 Level 防刷记录, 不作为经验来源规则触发器 | Codex 当前未订阅 | %block_type% |
变量说明
| 变量 | 说明 |
|---|---|
%entity_type% | Bukkit EntityType 名称, 例如 ZOMBIE, WOLF, ENDER_DRAGON |
%mythic_id% | MythicMobs 内部怪物 ID |
%mythic_level% | MythicMobs 怪物等级; 无法取得时使用默认等级 |
%block_type% | Bukkit Material 名称, 例如 STONE, WHEAT, OAK_LOG |
%result_type% | 合成或冶炼结果的 Bukkit Material 名称 |
%result_amount% | 合成或冶炼结果数量. 合成结果至少为 1; 冶炼使用本次取出数量 |
%fish_state% | PlayerFishEvent.State 名称, 例如 CAUGHT_FISH, CAUGHT_ENTITY, FISHING |
%potion_type% | 炼药台产物中第一个可识别药水的基础类型; 无法识别时为 UNKNOWN |
EmakiCodex 还会为所有已转发的触发器额外补充:
| 变量 | 说明 |
|---|---|
%player% | 玩家名 |
%world% | 玩家所在世界名 |
Level 示例
yaml
sources:
main_entity_kill_bonus:
enabled: true
type: "main"
trigger: "entity_kill"
include_players: false
rules:
- entity_types: ["ZOMBIE", "SKELETON"]
exp_formula: "10"成熟作物收获:
yaml
sources:
farming:
enabled: true
type: "farming"
trigger: "crop_harvest"
rules:
- blocks: ["WHEAT", "CARROTS", "POTATOES"]
exp_formula: "4"Codex 示例
yaml
advancements:
craft_table:
icon: "minecraft-crafting_table"
title: "<green>开始合成</green>"
description: "<gray>合成一个工作台。</gray>"
triggers:
entries:
- event: "craft_item"
condition:
type: "all_of"
entries:
- '%result_type% == "CRAFTING_TABLE"'击杀指定 MythicMobs:
yaml
advancements:
ancient_guardian:
icon: "minecraft-nether_star"
title: "<gold>古代守卫</gold>"
description: "<gray>击败指定 MythicMobs。</gray>"
triggers:
entries:
- event: "mythic_mob_kill"
condition:
type: "all_of"
entries:
- '%mythic_id% == "ancient_guardian"'
- '%mythic_level% >= 10'CoreLib 侧配置
事件发布由 CoreLib 自己的 plugins/EmakiCoreLib/config.yml 控制, 几个关键字段:
| 字段 | 类型 | 必填 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|---|
gameplay_events.enabled | boolean | 否 | true | true / false | 总开关. 关闭后 CoreLib 不再发布玩法事件, 依赖它的插件收不到事件 |
gameplay_events.last_damager_expire_ticks | integer | 否 | 200 | ≥ 0 | entity_kill 的"最后攻击者"归属窗口, 也就是判断这笔击杀算谁的时候往前看多久, 单位是 1/20 秒 (一个游戏刻). Bukkit 没有直接记下击杀者时 (弓箭, 延迟死亡等情况), 在这个窗口内仍然算最后一名攻击过的玩家. 这是粗一点的上限, 订阅方可以再收紧; 小于 0 时按 0 处理 |
gameplay_events.brew_attribution_expire_ticks | integer | 否 | 6000 | ≥ 0 | brew_complete 的酿造归属保留窗口, 单位是 1/20 秒 (一个游戏刻), 6000 刻大约是 5 分钟. 这是宽松的上限, 只用来防止归属记录一直留着; 真正的业务窗口由订阅方自己收紧 (例如 EmakiLevel 各来源的 attribution.expire_ticks, 默认 1200). 这个值要大于所有订阅方可能配的业务窗口, 否则会在订阅方判断之前就被提前截断; 小于 0 时按 0 处理 |
插件自带的默认值长这样:
yaml
gameplay_events:
enabled: true
last_damager_expire_ticks: 200
brew_attribution_expire_ticks: 6000也可以这样配, 把"最后攻击者"的归属窗口拉长, 让远距离弓箭击杀也能正常触发 entity_kill:
yaml
gameplay_events:
enabled: true
last_damager_expire_ticks: 400
brew_attribution_expire_ticks: 6000注意事项
crop_harvest不是独立 Bukkit 事件, 而是 CoreLib 在block_break基础上判断成熟作物后派生出来的配置 IDmythic_mob_kill会与同一次entity_kill分开发出; 如果你同时配置两个触发器, 两条规则都可能被处理brew_complete需要先把炼药台事件归属到最近操作过该炼药台的玩家; Codex 使用较短归属窗口, Level 可在来源规则里配置自己的attribution.expire_ticksblock_place当前主要供 EmakiLevel 记录玩家放置过的方块, 用来避免玩家放置后再破坏刷经验; 别把它当成普通经验来源或 Codex 成就触发器使用