WandOverlord(地狱火魔杖触发)
[!INFO] 实现类:
WandOverlord.java:14-44(implements IWandTriggerManager) 注册真源:Forbidden.java:88-90(postInit)
WandOverlord 是本 mod 唯一的魔杖方块触发器。它让玩家在完成 HELLFIRE 研究后,用一根不带聚焦的魔杖右键下界岩或黑曜石顶部,以消耗精华为代价在其上方点燃火焰——替代随身携带打火石。
基本信息
| 属性 | 值 |
|---|---|
| 实现类 | WandOverlord implements IWandTriggerManager |
| 触发方块 | Blocks.obsidian(黑曜石)、Blocks.netherrack(下界岩) |
| 触发了然 | 1(event == 1 && side == 1) |
| 精华消耗 | Aspect.FIRE(IGNIS)2 点 / 次 |
| 前置研究 | HELLFIRE |
| 代价物品 | 火药筒 ×1(仅用于 canPlayerEdit 的物品判定,不消耗) |
wandLord = new WandOverlord();
WandTriggerRegistry.registerWandBlockTrigger(wandLord, 1, Blocks.obsidian, 0);
WandTriggerRegistry.registerWandBlockTrigger(wandLord, 1, Blocks.netherrack, 0);
(Forbidden.java:88-90)
两个方块注册的是同一个 WandOverlord 实例、同一个 WandOverlord.ordinal 值 1。
触发条件
performTrigger(WandOverlord.java:16-21)只在 event == 1 && side == 1 时委派给 hellfire(),否则直接返回 false(即不消耗任何东西)。
hellfire()(:23-43)的 5 个前置条件全部短路,任一不满足即返回 false:
| # | 条件 | 源码 |
|---|---|---|
| 1 | 服务端(world.isRemote 为假) |
:24 |
| 2 | 魔杖非空 | :24 |
| 3 | 魔杖是 ItemWandCasting |
:25 |
| 4 | 魔杖没有装聚焦(getFocusItem(wand) != null 则失败) |
:26 |
| 5 | 玩家已完成 HELLFIRE 研究 |
:27 |
| 6 | player.canPlayerEdit(x, y, z, side, fire_charge) |
:28 |
行为
条件全部满足后(:31-43):
- 检查目标正上方
y + 1是空气(world.isAirBlock) - 调用
consumeVis(wand, player, Aspect.FIRE, 2, false)扣 2 点 IGNIS;返回false(精华不足)时整体失败 - 播放点燃音效
fire.ignite,音量1.0F,音高rand() * 0.4F + 0.8F(:33-39) - 在
x, y+1, z放置Blocks.fire(:40) player.swingItem()挥手动画(:41)- 返回
true
放置的不是火把——是真正的火焰方块,因此会自行熄灭,也会烧毁方块。
[!NOTE] 条件 6 传入的
Items.fire_charge仅用于canPlayerEdit的物品权限判定(决定玩家是否有权在该坐标放置),代码中没有consumeInventoryItem或damageItem,即火药筒不会被扣除。
研究关联
HELLFIRE 研究(ForbiddenResearch.java:179-188):
| 字段 | 值 |
|---|---|
| 分类 | FORBIDDEN |
| 精华需求 | FIRE 3 + NETHER 4 + TRAVEL 2 |
| 图标 | Blocks.fire |
| 页数 | 1 页(forbidden.research_page.HELLFIRE.1) |
| 特性 | .setRound()、.setHidden()、.setAspectTriggers(DarkAspects.NETHER) |
| 前置 | NETHERSHARDS |
.setHidden() 意味着该研究不出现在研究列表中,只能靠扫描 NETHER(下狱)精华发现。研究页正文明确描述了本机制(en_US.lang:374):
“Right click with a focus-less wand in your hand on the top of netherrack or obsidian to light a flame using some Ignis from your wand.”
源码缺陷
canPlayerEdit传的是Items.fire_charge(火药筒)而非火柴:作为放置权限的判定物品语义正确(火药筒能点燃),但与研究页描述的"flint and steel"不是同一物品,属用物品 ID 作权限令牌的近似写法。aspectTriggers是NETHER而非本 mod 自有元素:研究解锁实际靠 Thaumcraft 原生的NETHER(下界)精华,而 mod 自己的infernus元素同名但属不同对象(见暗黑元素)。两者拉丁名都是infernus级别不同,易混淆。- 两个
registerWandBlockTrigger的 ordinal 均为 1(Forbidden.java:89-90):这是 Thaumcraft API 的正常用法(ordinal 标识同一触发器实例),非缺陷。