符文渲染 Mixin

基本信息

属性 值
Mixin 枚举项 Mixins.RUNE_RENDERING
目标类 thaumcraft.client.renderers.models.gear.ModelWand
注入器 3 个 @ModifyConstant(全部作用于 render 方法)
阶段 LATE(Mixins 构造器统一 setPhase(Phase.LATE))
配置文件 mixins.ThaumicMachina.late.json
条件 手持物是 ItemWandCasting 且杖身不是 StaffRod
作者 koolkrafter5

三处修正

src/main/java/jcm2606/thaumicmachina/mixins/late/thaumcraft/client/renderers/models/gear/MixinModelWand_Runes.java

注入常量 原值 杖身值 权杖值 目的(源码注释)
doubleValue -0.08 -0.063 -0.08(不变) “Fix runes slightly floating off of the surface of wands and scepters”
doubleValue 0.36 0.135 0.41 “Correctly position runes on the rod of wands and scepters”
intValue 14 8 6 “Draw the correct number of runes on wands and scepters”

判定条件:stack.getItem() instanceof ItemWandCasting wand && !(wand.getRod(stack) instanceof StaffRod)。杖身值再由 wand.isSceptre(stack) 二选一(0.135 vs 0.41;符文数 8 vs 6)。条件不满足时全部返回 original,即 StaffRod 与非法杖栈保持 Thaumcraft 原版表现。

与 WAND_AUGMENTATIONS(MixinItemWandCasting_Augmentations)的关系:后者让任何带 Augmentation 的法杖都被判定为有符文(hasRunes 覆写),本 Mixin 只负责一旦要画,画在哪几个。

数值

数值 值
注入器数 3(@ModifyConstant)
符文 Y 高度 杖 -0.063(原 -0.08)
符文起始位置 杖 0.135 / 权杖 0.41(原 0.36)
符文数量 杖 8 / 权杖 6(原 14)
适用杖身 非 StaffRod
Mixin 阶段 LATE
作者 koolkrafter5

交互

纯客户端渲染修正,无游戏内数值影响。仅当法杖被 hasRunes 判定为需绘制符文时生效。

源码缺陷

  • 0.36 被同时当作两个语义:changeRuneStart 把它解释为「符文起点」并按杖/权杖分流,源码注释也只说 “Correctly position”,未说明 0.36 的原始含义。未调用 setter = 默认值式的猜测风险点:若 Thaumcraft 上游调整该常量,注入会静默失效(@ModifyConstant 匹配不到即不注入,Mixin 静默 no-op)。
  • 符文数量从 14 砍到 8/6 是硬编码常量替换,若上游 ModelWand.render 的符文循环次数依赖其他条件(如塞杖/权杖的 capabilities),本修正会与之冲突。
  • 条件不含 Augmentation 检查:本 Mixin 对所有非 StaffRod 法杖生效,不限于装了改装的法杖 —— 属于对原版行为的全局修正,而 WAND_AUGMENTATIONS 才是改装专属。二者叠加时的效果无法从源码单独归因。
  • 无 StaffRod 之外的排除:WandCoreCelestialUpdate 等 TM 自有杖身(若注册成功)会走「非 StaffRod」分支,但该杖身未注册(见 Celestial Wand Core),故此路径当前不可达。

相关条目