成就列表
基本信息
Draconic Evolution 实际注册 38 个成就,归属一个独立成就页。语言文件中存在 39 个成就键,其中 1 个(sundial)对应的注册代码已被注释,属孤立键。
| 属性 | 值 | 来源 |
|---|---|---|
| 成就页本地化键 | draconicevolution.achievementPage.name(英文值 Draconic Evolution) |
Achievements.java:443 |
| 成就 id 前缀 | achievement.draconicevolution.* |
zh_CN.lang / en_US.lang |
| 成就数量(实际注册) | 38 | Achievements.java addModAchievements() 中 38 次生效的 addAchievement(...) 调用 |
| 注册方式 | AchievementPage.registerAchievementPage(achievementsPage) |
Achievements.java:445 |
统计口径
三个独立来源相互印证:
| 来源 | 计数 | 说明 |
|---|---|---|
addModAchievements() 中未注释的 addAchievement(...) 调用 |
38 | 实际生效 |
addModAchievements() 中被注释的 addAchievement(...) 调用 |
1 | sundial,见下方「已知缺陷」 |
zh_CN.lang 中 achievement.draconicevolution.* 键 |
39 | 含 1 个孤立键 |
en_US.lang 中同前缀键 |
39 | 含 1 个孤立键 |
代码与语言文件的差值为 1,差异项是 sundial——它有本地化键但没有生效的注册。
实现机制
common/achievements/Achievements.java 使用 HashMap 维护两张表(Achievements.java:25-26):
| 字段 | 类型 | 用途 |
|---|---|---|
achievementsList |
HashMap<String, Achievement> |
id → 成就对象 |
achievementItems |
HashMap<String, AchievementCondition> |
物品未本地化名 → 触发条件 |
注册辅助方法 addAchievement(String name, Achievement achievement, ItemStack stack, String triggerCondition)(Achievements.java:28-32)有一处静默失败:
if (stack == null || stack.getItem() == null) return;
若传入的 ItemStack 为 null,该成就会被无声跳过——不报错、不打印。已核查 Achievements.java 引用的全部 ModBlocks.* / ModItems.* 字段(见下),没有任何一个引用配置受控的 ModBlocks.earthBlock,因此在 Disable Earth block 打开时不会少成就。
触发表中的 ModBlocks / ModItems 引用共 8 个方块字段、31 个物品字段,均为无条件注册项(ModBlocks.resurrectionStone、ModItems.wyvernFluxCapacitor、ModItems.draconicFluxCapacitor 实为 ItemStack 别名)。
成就列表
| 成就 id | 中文名 |
|---|---|
dust |
开始做大事! |
ingot |
比钻石更好! |
core |
从这儿开始 |
core2 |
不够好! |
core3 |
钱与权 |
heart |
龙之心 |
soul |
收割者 ! ! ! ! ! |
dislocator |
末影人一穷二白 |
dislocator2 |
末影规则! |
chest |
没有足够的存储空间! |
dChest |
像鹰一样翱翔天蓝色! |
ecore |
它继续走啊,走啊,走啊 |
particles |
噢,火花! |
weather |
谁需要大自然母亲 |
dissenchanter |
只是我想要的! |
flux |
1.21 jiggawatts! |
flux2 |
无可披靡的宇宙力量啊!细碎的生活空间! |
dpick |
我即是权威! |
dshovel |
移动山脉 |
daxe |
科学地砍树! |
dhoe |
把它踢上去! |
dsword |
像蜜蜂一样刺! |
dbow |
你在和力量共舞! |
dhelm |
像鱼一样遨游海洋! |
dleggs |
像一只蝴蝶翩翩起舞 |
dboots |
越来越高! |
dstaff |
与你的力量结合起来! |
wpick |
没有什么像钻石 |
wshovel |
专业挖掘机! |
wsword |
更好的武器装备 |
wbow |
狙击手已准备! |
whelm |
自由呼吸! |
wchest |
高抗性 |
wleggs |
风一样奔跑 |
wboots |
羽落术 |
awakenedblock |
这全是仪式! |
resurrection |
满是激情! |
manual |
智慧已经满了! |
id 大小写:龙之胸甲的成就 id 在代码与两份语言文件中一致写作
dChest(大写 C),是全部 38 个 id 中唯一含大写字母的一个。表中按原文照录。
已知缺陷:日晷成就是死代码
Achievements.java:423-424 的整段注册被注释掉:
// if (ConfigHandler.disableSunDial == 0)addAchievement("draconicevolution.sundial", new
// Achievement("draconicevolution.sundial", "draconicevolution.sundial", 4+x, -4, ModBlocks.sunDial,
// getAchievement("draconicevolution.core3")).setSpecial(), "craft");
这行代码还引用了 ConfigHandler.disableSunDial——而该字段本身就是一个已被注释的配置项(见 配置项总览 的「已知缺陷」第 2 节)。也就是说:即使取消这行注释,代码也无法编译。
后果:
sundial成就永远不会触发。zh_CN.lang/en_US.lang中的achievement.draconicevolution.sundial键成为孤立键(有文本、无注册)。- 该成就原本以
core3(混沌核心)为前置,是唯一一条带前置链的成就。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 实际注册成就数 | 38 | Achievements.java:423-424 的 sundial 被注释 |
| 语言文件中的成就键数 | 39 | zh_CN.lang / en_US.lang,其中 1 个为孤立键 |
| 独立成就页数量 | 1 | Achievements.java:441-445 |
| 成就页本地化键 | draconicevolution.achievementPage.name |
Achievements.java:443 |
交互
| 触发 | 行为 |
|---|---|
| 拾取特定物品 | EntityItemPickupEvent 订阅触发(Achievements.java:449-450) |
| 制作特定物品 | 按 achievementItems 中的触发条件匹配 |
| 打开成就页 | 在成就界面找到「Draconic Evolution」页 |
Disable Earth block 打开 |
不影响成就数量(无成就引用 earthBlock) |
相关条目
- 核心与材料 -
core/core2/core3三级核心成就 - 材料与消耗品 -
dust/ingot/heart/soul成就 - 多方块结构方块 -
ecore能量核心成就 - TileEntity 一览 - 成就引用的方块清单