Skip to content

共享玩法事件 ID

EmakiCoreLib 会把部分 Bukkit / MythicMobs 玩法事件统一归一成共享玩法事件,再分发给 EmakiLevel 和 EmakiCodex 使用。

这页用于回答两个常见配置问题:

  • EmakiLevel 的 sources.*.trigger 可以填写哪些触发器 ID。
  • EmakiCodex 的 triggers.entries[].event 可以填写哪些事件 ID。

这些 ID 是配置用的规范字符串,不是 Bukkit 事件类名。请直接填写表格中的小写 ID,例如 entity_killcraft_item

使用位置

插件配置位置字段用途
EmakiLevelplugins/EmakiLevel/sources/*.ymlsources.<source_id>.trigger触发经验来源规则。
EmakiCodexplugins/EmakiCodex/advancements/*.ymladvancements.<node_id>.triggers.entries[].event触发成就节点自动授予。

可填写的事件 ID

事件 ID原始来源EmakiLevelEmakiCodex变量
entity_kill玩家击杀实体;优先使用 Bukkit killer,必要时使用最近伤害玩家归属可用于经验来源可用于成就触发器%entity_type%
mythic_mob_killentity_kill 同次死亡中识别到 MythicMobs 活动怪物可用于经验来源可用于成就触发器%mythic_id%%mythic_level%
block_break玩家破坏方块可用于经验来源可用于成就触发器%block_type%
crop_harvestblock_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 名称,例如 ZOMBIEWOLFENDER_DRAGON
%mythic_id%MythicMobs 内部怪物 ID。
%mythic_level%MythicMobs 怪物等级;无法取得时使用默认等级。
%block_type%Bukkit Material 名称,例如 STONEWHEATOAK_LOG
%result_type%合成或冶炼结果的 Bukkit Material 名称。
%result_amount%合成或冶炼结果数量。合成结果至少为 1;冶炼使用本次取出数量。
%fish_state%PlayerFishEvent.State 名称,例如 CAUGHT_FISHCAUGHT_ENTITYFISHING
%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
默认值说明
enabledtrue总开关。关闭后 CoreLib 不再发布玩法事件,依赖它的插件收不到事件。
last_damager_expire_ticks200entity_kill 的「最后攻击者」归因窗口。Bukkit 未直接记录击杀者时(弓箭、延迟死亡等),在此窗口内仍归因给最后一次攻击的玩家。这是粗粒度上限,订阅方可再收紧。
brew_attribution_expire_ticks6000brew_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 成就触发器使用。