Achievement Condition

基本信息

属性 值
handler ID achievement
所属类 glowredman.amazingtrophies.condition.AchievementConditionHandler
事件订阅 Forge MinecraftForge.EVENT_BUS(net.minecraftforge.event.entity.player.AchievementEvent)
触发对象 EntityPlayerMP
优先级 LOWEST

配置

字段 类型 必填 含义
id 字符串 否(缺省回退为当前条目 ID) 监听哪个原版/自定义成就触发;键是 achievement 的 statId,值是当前条目 id

该 handler 内部维护一个 Multimap<String, String>,键为成就 statId,值为条目 ID——同一个 achievement 可同时触发多个奖杯/成就条目。

触发流程

  1. 玩家触发 AchievementEvent。
  2. handler 检查该玩家尚未解锁该成就(StatFile.hasAchievementUnlocked),已解锁则直接返回。
  3. 遍历该成就 statId 对应的所有条目 ID,逐个调用 listener(成就侧 → player.triggerAchievement;奖杯侧 → AmazingTrophiesAPI::awardTrophy)。

JSON 示例

{
  "id": "first_trophy",
  "x": 0,
  "y": 0,
  "icon": { "registryName": "minecraft:dirt" },
  "condition": {
    "type": "achievement",
    "id": "achievement.openInventory"
  }
}

相关条目

源码

src/main/java/glowredman/amazingtrophies/condition/AchievementConditionHandler.java