魔力透镜
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | Botania:lens(ModItems.java:131 声明,:281 赋值 new ItemLens()) |
| 物品类 | vazkii.botania.common.item.lens.ItemLens |
| 透镜效果类 | lens/ 目录下 22 个 Lens*.java(Lens 基类 + 21 个效果实现) |
| 子类型总数 | SUBTYPES = 22(ItemLens.java:47) |
| 隐藏透镜 | STORM = 5000(ItemLens.java:72) |
| 注册机制 | ItemMod 构造器内 GameRegistry.registerItem(this, name),ItemMod.java:32 |
功能
魔力透镜(Mana Lens)安装在魔杖的左键位置,改变魔杖左键发射的法力爆裂的行为。一个透镜对应一个物品 meta(0–21),因此全部透镜共用一个物品 ID。
ItemLens 用两张平行数组管理透镜(ItemLens.java:82-83):
private static final int[] props = new int[SUBTYPES]; // 每种透镜的属性位
private static final Lens[] lenses = new Lens[SUBTYPES]; // 每种透镜的效果实现
静态初始化块(ItemLens.java:87-109)为每个 meta 调用 setProps(...) 指定属性位,再由 setLens(...)(:111-132)绑定具体实现类。
数值
属性位
ItemLens.java:74-78 定义 4 个属性标志:
| 常量 | 值 | 含义 |
|---|---|---|
PROP_NONE |
0 | 无特殊属性 |
PROP_POWER |
1 | 影响爆裂威力 |
PROP_ORIENTATION |
1 << 1 | 可改变爆裂方向 |
PROP_TOUCH |
— | 透镜本身有接触判定(setProps 中的 PROP_TOUCH) |
PROP_INTERACTION / PROP_DAMAGE / PROP_CONTROL |
— | 交互 / 伤害 / 控制类属性 |
全部 22 种透镜
| meta | 常量 | 显示名 | 属性位 | 实现类 |
|---|---|---|---|---|
| 0 | NORMAL |
Mana Lens | PROP_NONE |
Lens(fallbackLens) |
| 1 | SPEED |
Mana Lens: Velocity | PROP_NONE |
LensSpeed |
| 2 | POWER |
Mana Lens: Potency | PROP_POWER |
LensPower |
| 3 | TIME |
Mana Lens: Resistance | PROP_NONE |
LensTime |
| 4 | EFFICIENCY |
Mana Lens: Efficiency | PROP_NONE |
LensEfficiency |
| 5 | BOUNCE |
Mana Lens: Bounce | PROP_TOUCH |
LensBounce |
| 6 | GRAVITY |
Mana Lens: Gravity | PROP_ORIENTATION |
LensGravity |
| 7 | MINE |
Mana Lens: Bore | PROP_TOUCH | PROP_INTERACTION |
LensMine |
| 8 | DAMAGE |
Mana Lens: Damaging | PROP_DAMAGE |
LensDamage |
| 9 | PHANTOM |
Mana Lens: Phantom | PROP_TOUCH |
LensPhantom |
| 10 | MAGNET |
Mana Lens: Magnetizing | PROP_ORIENTATION |
LensMagnet |
| 11 | EXPLOSIVE |
Mana Lens: Entropic | PROP_DAMAGE | PROP_TOUCH | PROP_INTERACTION |
LensExplosive |
| 12 | INFLUENCE |
Mana Lens: Influence | PROP_NONE |
LensInfluence |
| 13 | WEIGHT |
Mana Lens: Weight | PROP_TOUCH | PROP_INTERACTION |
LensWeight |
| 14 | PAINT |
Mana Lens: Paintslinger | PROP_TOUCH | PROP_INTERACTION |
LensPaint |
| 15 | FIRE |
Mana Lens: Kindle | PROP_DAMAGE | PROP_TOUCH | PROP_INTERACTION |
LensFire |
| 16 | PISTON |
Mana Lens: Force | PROP_TOUCH | PROP_INTERACTION |
LensPiston |
| 17 | LIGHT |
Mana Lens: Flash | PROP_TOUCH | PROP_INTERACTION |
LensLight |
| 18 | WARP |
Mana Lens: Warp | PROP_NONE |
LensWarp |
| 19 | REDIRECT |
Mana Lens: Redirective | PROP_TOUCH | PROP_INTERACTION |
LensRedirect |
| 20 | FIREWORK |
Mana Lens: Celebratory | PROP_TOUCH |
LensFirework |
| 21 | FLARE |
Mana Lens: Flare | PROP_CONTROL |
LensFlare |
| 5000 | STORM |
无本地化条目 | — | LensStorm(stormLens,ItemLens.java:85) |
meta 常量来源 ItemLens.java:49-72;属性位来源 ItemLens.java:87-109;实现类来源 ItemLens.java:111-132;显示名来源 en_US.lang 的 item.botania:lens*.name。
交叉验证与一处不一致
SUBTYPES = 22,en_US.lang中item.botania:lens*.name恰好 22 条,完全吻合。- 但
LensStorm没有对应的 lang 条目。原因是它使用独立的 metaSTORM = 5000,不落在 0–21 的常规子类型范围内:getLens在index == STORM时返回stormLens(ItemLens.java:298-299),canBePlacedInItem对它的判断为stack.getItemDamage() != STORM(ItemLens.java:339)—— 即风暴透镜不能被安装。它是一个不可装备的隐藏透镜。
交互
| 触发 | 行为 |
|---|---|
| 渲染 | getIconFromItemStack 在 renderPass == 1 时返回 ringIcons[...],否则返回 iconGlass(ItemLens.java:176) |
| 名称 | getUnlocalizedName 返回 "item." + LibItemNames.LENS_NAMES[min(SUBTYPES-1, damage)](ItemLens.java:191) |
| 合成透镜 | 存在"复合透镜"物品 item.botania:compositeLens.name = Composite Mana Lens: %s %s(两个透镜效果合并) |
| 装备 | getLens(index) 在 STORM 时返回 stormLens,其余索引返回 lenses[] 数组对应项 |
采集等级受配置控制
ItemLens 装在魔杖上时,透镜的采集等级可由配置调整(ConfigHandler.java:278-282):
| 配置键 | 默认 | 说明 |
|---|---|---|
harvestLevel.weightLens |
2 | 重力透镜(Weight,meta 13);3 = 钻石级,2 = 铁级 |
harvestLevel.boreLens |
3 | 破甲透镜(Bore,meta 7) |
合成配方
无法核实 —— 本次核查未读取 ModCraftingRecipes / ModManaInfusionRecipes 中 lens 对应的配方行,不做推断。
相关条目
- 森林魔杖 - 透镜的安装载体
- 配置文件 - 透镜采集等级的两个开关
- Lexica Botania - 透镜说明位于"魔力"分类