Achievements

基本信息

属性 值
成就数 3
成就页数 1(页名 Wireless Crafting Term)
源码类 AchievementHandler(handlers/AchievementHandler.java)
注册时机 init 阶段(WirelessCraftingTerminal.java:78)

3 个成就

lang 键 标题 描述 展示物品 页内位置
achievement.wctAchievement Digital Crafting Over WiFi Craft a Wireless Crafting Terminal 无线终端 根节点((0, 0))
achievement.boosterAchievement Interdimensional Crafting Sack Aquire an Infinity Booster Card 增强卡 (2, 0)
achievement.magnetAchievement Digital Hoover (lang 未提供 desc) 磁力卡 (2, 0)

⚠️ 描述中的 “Aquire” 是源码拼写错误(应为 “Acquire”),见 en_US.lang 的 achievement.boosterAchievement.desc。这是游戏内实际显示的文本,不是本文档的转述错误。

成就页结构

private static final AchievementPage achPage = new AchievementPage(
        "Wireless Crafting Term",   // 页名
        wctAch,                      // 根:无线终端
        boosterAch,                  // 子:(2, 0)
        magnetAch);                  // 子:(2, 0)

boosterAch 与 magnetAch 都以 (2, 0) 定位,且都以 wctAch 为父——即两个子成就在同一格并列。

注册逻辑

registerAchievements()(:44-50)有一处不完整的去重:

if (!AchievementList.achievementList.contains(wctAch)) {
    wctAch.initIndependentStat().registerStat();
    boosterAch.initIndependentStat().registerStat().setSpecial();
    magnetAch.initIndependentStat().registerStat();
}

去重判断只检查 wctAch。若 wctAch 已注册而另两个未注册(例如其它模组已注册同名成就的边界情形),boosterAch / magnetAch 将被跳过且永远不注册。这是真实的条件覆盖缺陷。

boosterAch 额外调用 .setSpecial(),故它在成就书中显示为特殊成就样式(金边框)。

registerPage()(:52-55)用 AchievementPage.getAchievementPage("Wireless Crafting Term") == null 做页级去重——这一处判断是完整的。

触发方式

成就不由 Forge 成就系统自动触发,而是在事件处理器中手动触发:

成就 触发点
boosterAchievement CommonProxy.pickupEvent —— 玩家捡起增强卡时触发(:203-206),且要求 !WCT_EASYMODE_ENABLED
magnetAchievement 由磁力卡相关逻辑触发
wctAchievement 合成无线终端时触发

注意增强卡成就的触发条件含 !Reference.WCT_EASYMODE_ENABLED——简单模式下即使捡到增强卡也不触发成就。

相关条目