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 中有真实实现的改装。

相关条目