异端法师村民(Heretic Villager)
[!INFO] 注册真源:
Forbidden.java:77-78(init阶段) 实现类:VillagerHereticManager.java:18-99
本模组向 VillagerRegistry 注册一个自定义村庄 profession,并挂接 8 条交易。
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | VillagerHereticManager implements IVillageTradeHandler |
| profession id | Config.hereticID,默认 666 |
| 配置键 | general:Heretic Villager ID(Config.java:52,167) |
| 注册阶段 | FMLInitializationEvent(Forbidden.crescendo,Forbidden.java:73-78) |
VillagerRegistry.instance().registerVillagerId(Config.hereticID);
VillagerRegistry.instance().registerVillageTradeHandler(Config.hereticID, new VillagerHereticManager());
(Forbidden.java:77-78)
交易只在 villager.getProfession() == Config.hereticID 时注入(VillagerHereticManager.java:21),其余村民不受影响。
交易列表
全部 8 条交易的价格与数量均含 random.nextInt() 随机量(VillagerHereticManager.java:46-96)。表中区间为源码中 random.nextInt(n) 产生的范围。
| # | 玩家付出 | 村民给出 | 源码 |
|---|---|---|---|
| 1 | 绿宝石 ×(1~2) | 致命碎片 meta 6 ×(3~4) | :46-49 |
| 2 | 致命碎片 meta 4 ×(2~5) | 绿宝石 ×1 | :50-53,!noLust 才注册 |
| 3 | 致命碎片 meta 0 ×(4~9) | 绿宝石 ×1 | :54-57 |
| 4 | 暴食碎片 ×(4~9) | 绿宝石 ×1 | :58-61 |
| 5 | 绿宝石 ×(1~3) | 骷髅(skull meta 0)×1 |
:62-65 |
| 6 | 绿宝石 ×(4~7) | 恶魂之泪 ×1 | :66-69 |
| 7 | 绿宝石 ×1 | 荧石粉 ×(8~16) | :70-73 |
| 8 | 绿宝石 ×(8~12) + 木棍 ×1 | 亵渎杖杖芯的预充魔杖 | :75-90 |
| 9 | 绿宝石 ×(4~8) + 钻石 ×1 | 火元素聚焦 ×1 | :91-96 |
[!NOTE] 第 2 条(
:50)整段包在if (!Config.noLust)中,与SubCollar物品、LUST元素共用同一开关。
第 8 条:预充魔杖
这是唯一一条双物品的交易(MerchantRecipe 的 3 参构造),产出杖芯为 WAND_ROD_PROFANE、杖套为 Thaumcraft 铁杖套的魔杖(VillagerHereticManager.java:75-88):
ItemStack wand = new ItemStack(ConfigItems.itemWandCasting, 1,
ConfigItems.WAND_CAP_IRON.getCraftCost() * ForbiddenItems.WAND_ROD_PROFANE.getCraftCost());
((ItemWandCasting) wand.getItem()).setCap(wand, ConfigItems.WAND_CAP_IRON);
((ItemWandCasting) wand.getItem()).setRod(wand, ForbiddenItems.WAND_ROD_PROFANE);
((ItemWandCasting) wand.getItem()).storeAllVis(wand,
new AspectList().add(Aspect.FIRE, 5000).add(Aspect.WATER, 5000).add(Aspect.EARTH, 5000)
.add(Aspect.AIR, 5000).add(Aspect.ORDER, 5000).add(Aspect.ENTROPY, 5000));
| 属性 | 值 |
|---|---|
| 杖芯 | WAND_ROD_PROFANE(见暗黑魔杖部件) |
| 杖套 | Thaumcraft WAND_CAP_IRON(原版,非本 mod 杖套) |
| 预充精华 | 6 种各 5000:IGNIS / AQUA / TERRA / AER / ORDO / ENTROPIA |
| 交易权重 | func_82783_a(-6)(:89) |
第 9 条的 fire.func_82783_a(-6)(:95)同理。
[!WARNING] 魔杖的
ItemStackmeta 由ConfigItems.WAND_CAP_IRON.getCraftCost() * ForbiddenItems.WAND_ROD_PROFANE.getCraftCost()计算(:77-78)——meta 取值来自两个 craftCost 的乘积,而实际杖芯/杖套随后又由setRod/setCap覆写。这是原版魔杖 meta 编码的固有写法,非缺陷,但getCraftCost()的具体数值不在本仓库内,meta 的最终数值无法核实。
源码缺陷
- 23 条交易被整段注释掉(
VillagerHereticManager.java:22-45)。这些是原 Thaumcraft 资源/护符/魔力豆/浴盐等物品的兑换,全部保留为注释代码。其中还包含一条重复定义ConfigItems.itemResource的交易(:23与:27),说明注释块本身也不一致。 - profession id 默认为 666,与默认绿宝石交易的语义无关,属纯配置值;但
Config.hereticID可被玩家改成任意值,若与其他 mod 的 profession id 撞车,registerVillagerId的行为由 Forge 决定,本仓库内无从验证。