魔力透镜

基本信息

属性 值
注册名 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 条目。原因是它使用独立的 meta STORM = 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 对应的配方行,不做推断。

相关条目