allFiveAchievements 奖励
基本信息
| 属性 | 值 |
|---|---|
| 类 | astrotibs.villagenames.handler.AchievementReward |
| 方法 | allFiveAchievements(EntityPlayerMP)(handler/AchievementReward.java:22) |
| 调用点 | 5 个成就各自的触发处 |
| 触发时机 | 每次任一成就被触发时都调用一次(幂等) |
功能
本 mod 的 5 个成就没有各自的专属奖励;取而代之的是集齐全部 5 个后的统一一次性奖励。
源码类注释写明:"This method rewards the player for completing all five achievements. It will be called each time an advancement is triggered."(handler/AchievementReward.java:15-19)
判定逻辑
方法开头检查全部 5 个成就均已解锁(handler/AchievementReward.java:24-30):
if (playerMP.func_147099_x().hasAchievementUnlocked(VillageNames.archaeologist)
&& playerMP.func_147099_x().hasAchievementUnlocked(VillageNames.ghosttown)
&& playerMP.func_147099_x().hasAchievementUnlocked(VillageNames.laputa)
&& playerMP.func_147099_x().hasAchievementUnlocked(VillageNames.maxrep)
&& playerMP.func_147099_x().hasAchievementUnlocked(VillageNames.minrep)) {
未集齐时直接返回,不发任何奖励。
⚠️ 可重复领取:方法内没有"已领取"标记。每次成就触发都会重新检查并重新发放奖励(
dropItemSetItem未做去重),因此玩家可以反复触发最后一个成就来重复刷取奖励物品。
奖励内容
1. 金色祝贺消息(两段)
从两个字符串数组中各随机取一条并拼接(handler/AchievementReward.java:34-43):
| 数组 | 候选项 |
|---|---|
congratsStart |
Nicely done! / Congratulations! / Thanks for using Village Names! / I'm glad you enjoy Village Names! / Great job! |
congratsEnd |
Here's a little something on me. / Here's something as thanks. / Take this as a memento. / Have a keepsake. / Here's a souvenir. |
两个数组中含
Reference.MOD_NAME的项会渲染为Thanks for using Village Names!(:37、:39)。
随后再发一条固定消息(handler/AchievementReward.java:58-61):It's a replica of a sword I used while testing Village Names V3.(署名 --AstroTibs)。
2. 金剑 Un-Instantiator
| 属性 | 值 | 来源 |
|---|---|---|
| 基础物品 | Items.golden_sword |
handler/AchievementReward.java:65 |
| 耐久附魔 | 耐久 III(Enchantment.unbreaking, 3) |
:66 |
| 锋利附魔 | 锋利 V(Enchantment.sharpness, 5) |
:67 |
| 抢夺 III | 未启用(源码注释掉,//uninstantiator.addEnchantment(Enchantment.looting, 3);) |
:68 |
| 显示名 | Un-Instantiator |
:69 |
| 掉落入背包 | 直接入包,delayBeforeCanPickup = 0(无拾取延迟) |
:71-72 |
源码类注释与文件开头的调试说明一致 —— 该剑是作者测试 V3 时用过的剑的复制品。
参考:
VillageNames.java:77-81留有作者对该测试剑的调试指令:give @p golden_sword 1 0 {display:{Name:"Un-Instantiator"}, ench:[{id:16,lvl:1000},{id:34,lvl:99}]} Loot level 3: {id:21,lvl:3}其中
{id:16,lvl:1000}为耐久 1000 级(VillageNames.java:78提到-1000即耐久千),{id:34,lvl:99}为击退 99 级,远超实际发放的 unbreaking 3 / sharpness 5——该命令是作者的调试用极端值,不是奖励的实际属性。
调用点
5 个成就的触发处均调用本方法:
| 成就 | 调用位置 |
|---|---|
| Emerald Standard(maxrep) | handler/EntityMonitorHandler.java:495 |
| You’re A Monster(minrep) | handler/EntityMonitorHandler.java:487;handler/EntityInteractHandler.java:1333 |
| Archaeologist | item/ItemCodex.java:395 |
| Ghost Town | handler/WriteBookHandler.java:236 |
| Fidelity(laputa) | handler/EntityInteractHandler.java:532 |
相关条目
- Emerald Standard - 成就之一
- You’re A Monster - 成就之二
- Archaeologist - 成就之三
- Ghost Town - 成就之四
- Fidelity - 成就之五