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

相关条目