共享玩法事件 ID
EmakiCoreLib 会把部分 Bukkit / MythicMobs 玩法事件统一归一成共享玩法事件,再分发给 EmakiLevel 和 EmakiCodex 使用。
这页用于回答两个常见配置问题:
- EmakiLevel 的
sources.*.trigger可以填写哪些触发器 ID。 - EmakiCodex 的
triggers.entries[].event可以填写哪些事件 ID。
这些 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 控制:
yaml
gameplay_events:
enabled: true
last_damager_expire_ticks: 200
brew_attribution_expire_ticks: 6000| 键 | 默认值 | 说明 |
|---|---|---|
enabled | true | 总开关。关闭后 CoreLib 不再发布玩法事件,依赖它的插件收不到事件。 |
last_damager_expire_ticks | 200 | entity_kill 的「最后攻击者」归因窗口。Bukkit 未直接记录击杀者时(弓箭、延迟死亡等),在此窗口内仍归因给最后一次攻击的玩家。这是粗粒度上限,订阅方可再收紧。 |
brew_attribution_expire_ticks | 6000 | brew_complete 的酿造归因保留窗口,约 5 分钟。这是宽松上限,只用于防止归因记录无限保留;真正的业务窗口由订阅方自行收紧(例如 EmakiLevel 各来源的 attribution.expire_ticks,默认 1200)。该值需大于所有订阅方可能配置的业务窗口,否则会在订阅方判断前被提前截断。 |
注意事项
crop_harvest不是独立 Bukkit 事件,而是 CoreLib 在block_break基础上判断成熟作物后派生出来的配置 ID。mythic_mob_kill会与同一次entity_kill分开发出;如果同时配置两个触发器,两条规则都可能被处理。brew_complete需要先把炼药台事件归属到最近操作过该炼药台的玩家;Codex 使用较短归属窗口,Level 可在来源规则里配置自己的attribution.expire_ticks。block_place当前主要供 EmakiLevel 记录玩家放置过的方块,用来避免玩家放置后再破坏刷经验;不要把它当成普通经验来源或 Codex 成就触发器使用。