成就

基本信息

属性 值
管理类 AchievementManager(system/achievements/AchievementManager.java,219 行)
成就数 24 个(addAchievement 字段初始化)
挑战数 3 个(addChallenge 字段初始化)
成就 ID 公式 achievement.hee.<achievementStartId + 40 + id>(:198)
挑战 ID 公式 achievement.hee.<achievementStartId + 120 + id>(:210)
事件类 AchievementEvents(189 行)+ HeeAchievement(32 行)+ HeeChallenge(48 行)

功能

AchievementManager 在 preInit 由 HardcoreEnderExpansion.java:143 之前的静态初始化完成注册。成就图是一棵树:多数成就的 parentAchievement 指向更早解锁的前置成就,GUI 按 (x, y) 坐标排布。

24 个成就

ID 字段名 stringId 图标物品 父成就 位置
0 GO_INTO_THE_END newAdventures Blocks.dragon_egg 无 :39
1 DRAGON_ESSENCE dragonEssence ItemList.essence GO_INTO_THE_END :41
2 END_POWDER endPowder ItemList.end_powder GO_INTO_THE_END :51-52(.setSpecial())
4 ENDER_EYE_KILL enderEyeKill ItemList.special_effects DRAGON_ESSENCE :60 之后
7 STARDUST stardust ItemList.stardust DRAGON_ESSENCE —
8 ENDER_COMPENDIUM enderCompendium ItemList.special_effects + ItemSpecialEffects.achievementCompendiumIcon 无 :32-39
9 ENDIUM_INGOT endiumIngot ItemList.endium_ingot STARDUST —
10 VOID_CHEST voidChest BlockList.void_chest STARDUST —
11 ENHANCED_BREWING_STAND enhancedBrewingStand ItemList.enhanced_brewing_stand DRAGON_ESSENCE :42-48
12 ENHANCED_ENDER_PEARL enhancedEnderPearl Items.ender_pearl END_POWDER :53-59
13 BIOME_COMPASS biomeCompass ItemList.biome_compass GO_INTO_THE_END —
14 TRANSPORT_BEACON transportBeacon BlockList.transport_beacon ENDIUM_INGOT —
15 BIOME_INFESTED_FOREST biomeInfestedForest ItemList.special_effects BIOME_COMPASS —
16 BIOME_BURNING_MOUNTAINS biomeBurningMountains ItemList.special_effects BIOME_COMPASS —
17 BIOME_ENCHANTED_ISLAND biomeEnchantedIsland ItemList.special_effects BIOME_COMPASS —
18 CURSE curse ItemList.curse DRAGON_ESSENCE —
19 CHARM_POUCH charmPouch ItemList.charm_pouch DRAGON_ESSENCE —
20 FIERY_ESSSENCE fieryEssence ItemList.essence DRAGON_ESSENCE —
21 SCORCHING_PICKAXE scorchingPickaxe ItemList.scorching_pickaxe FIERY_ESSSENCE —
22 TRANSFERENCE_GEM transferenceGem ItemList.transference_gem ENHANCED_ENDER_PEARL —
23 ENERGY_WAND energyWand ItemList.energy_wand ENDIUM_INGOT —
24 TEMPLE_CALLER templeCaller ItemList.temple_caller DRAGON_ESSENCE :49
51 ENHANCED_ENDER_PEARL_FULL enhancedEnderPearlFull Items.ender_pearl ENHANCED_ENDER_PEARL :60 之后
52 TP_NEAR_VOID tpNearVoid ItemList.special_effects GO_INTO_THE_END —

计数核对(两种表述):① re.findall(r'([A-Z_0-9]+)\s*=\s*addAchievement\(', …) → 24;② addAchievement( 出现 33 次 − 5 个 private static … addAchievement( 重载声明 − 4 个重载内的 return addAchievement(…) 转发 = 24。

⚠️ 字段名 FIERY_ESSSENCE 与 stringId fieryEssence 拼写不一致(ESSSENCE 多一个 S)。已核对 AchievementManager.java 字段声明与 stringId 字面量。仓库无测试、无注释、无 commit 提及该拼写,故仅记录事实,不断言为缺陷。stringId 直接进入 lang key achievement.hee.achievement.fieryEssence(ID 拼接见 :198),因此语言文件侧不受影响。

3 个挑战

ID 字段名 stringId 难度等级 位置
0 CHALLENGE_HARD0DEATHS hard0Deaths hard AchievementManager.java:154 附近
1 CHALLENGE_BEDEXPLODE bedExplode mediumorhard AchievementManager.java 末行前
2 CHALLENGE_NOENDERMAN noEnderman mediumorhard AchievementManager.java 末行

挑战的 GUI 坐标是算出来的而非手写:x = -1 + (id % 2 == 0 ? 0 : 1)、y = -2 + id(:212-213),图标固定为 Items.diamond_sword(:214),难度字符串存进 challengeStrings(:216)。

数值

项 值 位置
成就 ID 偏移 +40 AchievementManager.java:198
挑战 ID 偏移 +120 AchievementManager.java:210
默认 achievementStartId 3500 system/ConfigHandler.java:176-180
成就 ID 实际范围(默认配置) achievement.hee.3540 – achievement.hee.3592 由 id 集合 {0,1,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,51,52} 决定
挑战 ID 实际范围(默认配置) achievement.hee.3620 – achievement.hee.3622 由 id 集合 {0,1,2} 决定
未使用的成就 index 3、5、6、25–50 缺号 源码中无这些 index
special_effects 作为图标的成就 4 个:ENDER_EYE_KILL、ENDER_COMPENDIUM、BIOME_*(3 个)、TP_NEAR_VOID AchievementManager.java 各对应行
.setSpecial() 的成就 1 个:END_POWDER AchievementManager.java:52

交互

触发 行为
玩家达成条件 AchievementEvents(189 行,@SubscribeEvent 监听玩家/方块/物品事件)触发 AchievementManager.achievements.get(n).triggerStat(player)
打开知识书 达成成就会解锁知识书条目(C03KnowledgeNotification / C19CompendiumData,见网络包)
修改 achievementStartId 配置项 achievementStartId(.setShowInGui(false),默认 3500),专门用于避开与其他 mod 的 ID 冲突
重复注册 addAchievement 内部 new HeeAchievement(…).registerStat() 直接注册到 net.minecraft.stats.AchievementList(:197-203)

相关条目