成就
基本信息
| 属性 | 值 |
|---|---|
| 管理类 | 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与 stringIdfieryEssence拼写不一致(ESSSENCE多一个 S)。已核对AchievementManager.java字段声明与 stringId 字面量。仓库无测试、无注释、无 commit 提及该拼写,故仅记录事实,不断言为缺陷。stringId 直接进入 lang keyachievement.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) |