符文渲染 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),故此路径当前不可达。
相关条目
- Charge Buffer -
WAND_AUGMENTATIONS中让法杖具备hasRunes的那一半 - Celestial Wand Core - 假设中的 TM 自有杖身(未注册)