Taint Capping
基本信息
| 属性 | 值 |
|---|---|
| NBT ID | taint_capping(主键) |
| 别名 ID | Taint Capping |
| 研究页 | WAND_AUGMENTATION_TAINT_CAPPING |
| 注魔配方名 | TM_WA_TAINT_CAPPING |
| 注魔不稳定性 | 12 |
| 前置改装 | Tainted Core(唯一有前置的改装) |
| 杖身兼容 | 全部(isCompatibleWith(WandRod) 恒 true) |
| 实际效果 | 已实现 —— 把周围 Flux 沾污物转为法杖 Vis |
效果
PlayerEventHandler.onUseItem(PlayerUseItemEvent.Tick)(core/event/PlayerEventHandler.java:82-120)。持法杖右键每 tick,若法杖带本改装且射线命中方块,则扫描命中点周围 5×5×5,把其中的 BlockFluxGas / BlockFluxGoo 转化为随机要素的 Vis 并可能删除该方块:
if (!WandHelper.hasAugmentation(stack, AugmentationTaintCapping.INSTANCE) || mop == null
|| mop.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) return;
for (int i = -2; i < 2; ++i) for (int j = -2; j < 2; ++j) for (int k = -2; k < 2; ++k) {
Block block = player.worldObj.getBlock(x, y, z);
if (!(block instanceof BlockFluxGas) && !(block instanceof BlockFluxGoo)) continue;
Aspect aspect = random primal aspect;
if (rand.nextInt(100) <= 20) aspect = Aspect.ENTROPY; // 20% 强制 Entropy
if (wand.getAspectsWithRoom(stack).getAmount(aspect) >= wand.getMaxVis(stack)
|| rand.nextInt(100) <= 10) continue; // 10% 无效
wand.addRealVis(stack, aspect, 50 + rand.nextInt(50) - rand.nextInt(50), true);
if (rand.nextInt(50) > 0) continue; // 2% 概率直接清除方块
player.worldObj.setBlock(x, y, z, Blocks.air);
}
这是 5 种改装中唯一不依赖 mixin 的一条(通过 Forge 事件总线 MinecraftForge.EVENT_BUS.register(new PlayerEventHandler()) 注册,见 core/proxy/ProxyCommon.java:56)。
数值
| 数值 | 值 |
|---|---|
| 扫描体积 | 5×5×5 = 125 格(i/j/k ∈ [-2, 2]) |
| 注入 Vis 范围 | 50 + rand(0…49) − rand(0…49),即 0–99(期望 ~50) |
| 强制 Entropy 概率 | rand.nextInt(100) <= 20(约 21/100) |
| 注入失败(已满或保底) | rand.nextInt(100) <= 10(约 11/100) |
| 清除 Flux 方块概率 | rand.nextInt(50) > 0 时 continue → 约 2/50 |
| 触发事件 | PlayerUseItemEvent.Tick(core/event/PlayerEventHandler.java:82) |
| 触发条件 | 射线命中 MovingObjectType.BLOCK |
| 注魔不稳定性 | 12 |
| 要素需求 | TOOL 16 / MAGIC 24 / ENTROPY 32 / TAINT 48 / WATER 32 / AURA 16 |
| 材料 | itemResource meta 11 × 1 + meta 15 × 1 + itemNugget meta 5 × 1 |
| 前置改装 | Tainted Core |
源码缺陷
- 前置改装 Tainted Core 无任何功能。
getPrerequisiteAugmentations()硬依赖一个不生效的改装(见 Tainted Core),玩家必须先注入一个纯 NBT 标记才能用本条。这是内容设计缺陷。 addRealVis第 5 参恒为true(core/event/PlayerEventHandler.java:116),即每次都标记isReal。- Vis 上限判定用单要素比较:
getAspectsWithRoom(stack).getAmount(aspect) >= wand.getMaxVis(stack)逐要素检查,源实现清晰,非缺陷。 - 清除概率极低且有双重随机门:先要通过
rand.nextInt(100) > 10才注入,注入后再要rand.nextInt(50) == 0才清方块 —— 复合概率约 0.2%/格/tick。源码未做概率说明,容易被误读为「随机清除」。 handleAugmentation空实现(wand/augmentation/AugmentationTaintCapping.java:71),但本条是唯一在PlayerEventHandler中有真实实现的改装。
相关条目
- Tainted Core - 强制前置,无功能
- Charge Buffer - 升 Vis 容量,与本条互补
- Vis Channel - 降 Vis 消耗,与本条互补
- Flux Wand Trigger - 同一批 Flux 相关的另一套逻辑