reports: thaumicadditions P2 — F8–F15 sweep, open F-018 (F13 boundary)

- F-018: per-frame text-width re-measure in 9 GUI foreground layers plus
  the HUD TipMessage width loop; boundary with magnitude arithmetic and
  the cache-at-initGui fix path
- exclusion face: F8 guard-in-place (vanilla 64-block TE render cap,
  never overridden), F9/F10/F12/F14 zero form, F11 design body (fixed
  small counts on gameplay events), F15 startup-time icon registration
- F-005 same-shape note (TileRendererCreativeNode), F-016 fix line gains
  its magnitude arithmetic
- hub: HEAD c49b5f0@main, P2 round row, matrix total 18, open 14

[skip ci]
This commit is contained in:
layue13 committed 2026-10-29 16:15:12 +08:00
1 parent c49b5f03fb
commit b168a9c636
4 files changed
+48 -14

No files matched your search

+2 -2
View File
@@ -1,7 +1,7 @@
# F-005
- **状态**:观察·待处理
- **范式**:F1
- **位置**:`src/main/java/com/pengu/thaumcraft/additions/renderer/RendererDarkGen.java:16`、`:22`;同型 `RendererHyperNodeCreator.java:17`、`:23`、`RendererInfuser.java:19`、`:24`、`RendererInfuserActivator.java:19`、`:37`、`RendererSymboller.java:17`、`:23`、`RendererThaumicGenerator.java:17`、`:23`、`RendererThaumicRestorer.java:16`、`:22`、`RendererSeal.java:41-48`、`RendererTankBasic.java:20`、`:32`
- **位置**:`src/main/java/com/pengu/thaumcraft/additions/renderer/RendererDarkGen.java:16`、`:22`;同型 `RendererHyperNodeCreator.java:17`、`:23`、`RendererInfuser.java:19`、`:24`、`RendererInfuserActivator.java:19`、`:37`、`RendererSymboller.java:17`、`:23`、`RendererThaumicGenerator.java:17`、`:23`、`RendererThaumicRestorer.java:16`、`:22`、`RendererSeal.java:41-48`、`RendererTankBasic.java:20`、`:32`、`TileRendererCreativeNode.java:22`、`:23`、`:34`(后者每帧 `new Random`/`Calendar.getInstance()`/RL 字符串拼接)
- **证据**:
```java
ResourceLocation textures = new ResourceLocation("thaumicadditions", "textures/models/DarkGen.png");
@@ -16,4 +16,4 @@
- **修法**:提 `private static final ResourceLocation`;Model 提实例字段复用(需确认无跨 TE 可变状态串扰,故本档观察)。
- **风险 · 置信度**:RL 提常量无;Model 复用需隔离论证 · 高(形态)
- **移交**:无
- **来源**:P1 2026-10-26 2f7b9c9;同族 F-006/F-016
- **来源**:P1 2026-10-26 2f7b9c9;P2 2026-10-29 c49b5f0 同型补记 `TileRendererCreativeNode.java:22`、`:23`、`:34`(计数不变);同族 F-006/F-016
+1 -1
View File
@@ -9,7 +9,7 @@
(GUIInfuser.java:24;其余 9 处同句式换路径)
- **机制**:十个容器 GUI 背景层每帧 new ResourceLocation;可提 static final。
- **频率**:每帧(GUI 打开期间)。
- **修法**:记录不修:形态命中量级微(仅开 GUI);维护者可按 TESR 同法提常量。
- **修法**:记录不修——量级算式:开窗期每帧 1 个 `ResourceLocation`(对象+两段字符串小写,约 0.2–0.5 µs)⇒ ≤0.003% 帧预算;若要收:提 `private static final ResourceLocation`,逐字节不变。
- **风险 · 置信度**:无 · 高
- **移交**:无
- **来源**:P1 2026-10-26 2f7b9c9;同族 F-005
+19
View File
@@ -0,0 +1,19 @@
# F-018
- **状态**:边界·待处理
- **范式**:F13
- **位置**:`src/main/java/com/pengu/thaumcraft/additions/gui/GUIDarkGenerator.java:35`、`:36`;同型 `GUICondensator.java:39`、`GUIDarkInfuser.java:44`、`GUIHyperNodeCreator.java:31`、`:32`、`GUIInfuser.java:35`、`GUISealGlobe.java:76`、`GUIThaumicCrystallizer.java:34`、`GUIThaumicGenerator.java:32`、`GUIThaumicRestorer.java:33`;`src/main/java/com/pengu/thaumcraft/additions/utils/hud/TipMessage.java:35`(宽度环 `:69-81`,入口同包 `HUD.java:111`)
- **证据**:
```java
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 3, 4210752);
```
(GUIDarkGenerator.java:35;`:36` 对 `Lang.localiseRaw("container.inventory")` 取两次翻译再做同式居中)
```java
float decrease = this.getStringWidth(this.tipText) / 2.0F;
```
(TipMessage.java:35;`tipText` 为 final 字段 `:9`,宽度环 `:69-81` 逐字符 `loadGlyphTexture` → `renderEngine.bindTexture`)
- **机制**:9 个 `drawGuiContainerForegroundLayer` 与 HUD 提示每帧对不变串重测宽度、随即 `drawString` 内部再测一遍,偏移只用于居中。串与字体在开窗/提示存活期内不变(`GUISealGlobe.java:67`/`:70` 同帧重取 TE 与组合描述属另一面,本块不计)。
- **频率**:每帧(GUI 开启期)/每帧(提示存活期)。
- **修法**:记录不修——量级算式:GUI 侧 10–20 字符测宽约 100–300 ns,`GUIDarkGenerator:35-36` 另加两次 `localiseRaw`,`GUISealGlobe:76` 含每行翻译与测宽合计 ≤3 µs/帧(16.6 ms 的 ≤0.02%);HUD 侧 10–40 字符 × 每次 `bindTexture` 0.2–1 µs ⇒ 2–40 µs/帧(16.6 ms 的 ≤0.25%)且仅提示存活期间。若要收:开窗期把标题串与宽度缓存在 `initGui`/构造器,`TipMessage` 在构造器算好 `decrease`;宽度为定值,偏移逐像素不变。
- **风险 · 置信度**:无 · 高(形态)
- **移交**:无
- **来源**:P2 2026-10-29 c49b5f0
+26 -11
View File
@@ -23,8 +23,9 @@
| [F-015](F-015.md) | 边界·待处理 | `F-015.md` |
| [F-016](F-016.md) | 边界·待处理 | `F-016.md` |
| [F-017](F-017.md) | 观察·待处理 | `F-017.md` |
| [F-018](F-018.md) | 边界·待处理 | `F-018.md` |
未关闭项(不含已修复/已延后):**13**(F-005, F-006, F-007, F-008, F-009, F-010, F-011, F-012, F-013, F-014, F-015, F-016, F-017)
未关闭项(不含已修复/已延后):**14**(F-005, F-006, F-007, F-008, F-009, F-010, F-011, F-012, F-013, F-014, F-015, F-016, F-017, F-018)
## 迁移备注
@@ -34,25 +35,27 @@
| 项 | 值 |
|---|---|
| 仓库 | TDLM/thaumicadditions(建档源:`D:\tmp\missing-mod-archive\repos\thaumicadditions`,无 `.git` 的 zip 反编译树) |
| 分支 · HEAD | (源树无 git)· `2f7b9c9696ee6cceb11d93c54592fed30ca218de`(`SCAN_HEAD_SHA.txt`) |
| 最近更新 | 2026-10-26(P1 建档) |
| 形态 | Forge 1.7.10 TC4 附属内容 mod(反编译重托管,jar `Thaumic Additions - 0.41`);java 307(src/main,无 kt/scala/Mixin);updateEntity 20、canUpdate 覆写 0;TESR 16;@SubscribeEvent 含 PlayerTick/ClientTick/HUD;SimpleNetworkWrapper 通道 `thaumicadditions-playnet`;实体 4;IFMLLoadingPlugin 类在树内但本提取无 META-INF 清单 |
| 工具 | 人工形态画像+候选式 grep+命中点全文回读;范式 B1/D1 全仓必扫;周期/渲染/包/空间面按形态选 T1/T4/T15/F1/S1/N1;未跑目标仓构建 |
| 仓库 | TDLM/thaumicadditions(git 仓,`src/` 直源) |
| 分支 · HEAD | `main` · `c49b5f03fb07907632830659ff83da18ab824c8c`(P2 扫描时 HEAD) |
| 最近更新 | 2026-10-29(P2) |
| 形态 | Forge 1.7.10 TC4 附属内容 mod(`Thaumic Additions - 0.41`,P2 起按实仓):java 307 / 32,017 行(src/main,无 kt/scala/Mixin);updateEntity 20、TESR 16(`ClientProxy.java:63-78`);`@SubscribeEvent` 含 PlayerTick/ClientTick/HUD;SimpleNetworkWrapper 通道 `thaumicadditions-playnet`;实体 4;构建走 Stratum 组织插件(`.github/workflows/build.yml`) |
| 工具 | 人工形态画像+候选式 grep+命中点全文回读;P2 覆 F8–F15 与 J5/J6 |
**计数矩阵**(处置 × 状态;合计 17)
**计数矩阵**(处置 × 状态;合计 18)
| 处置\状态 | 待处理 | 待裁决 | 已延后 | 已驳回 | 已修复 |
|---|---|---|---|---|---|
| 修 | 0 | 0 | 0 | 0 | 4 |
| 观察 | 10 | 0 | 0 | 0 | 0 |
| 边界 | 3 | 0 | 0 | 0 | 0 |
| 边界 | 4 | 0 | 0 | 0 | 0 |
| **合计** | **14** | 0 | 0 | 0 | **4** |
**扫描轮次**
| 轮次 | 日期 | SHA | 范围 | 净增(修/观/边) |
|---|---|---|---|---|
| P1 | 2026-10-26 | 2f7b9c9 | 建档:B1+D1 必扫+TE/TESR/包/封印/奇点热入口 | 4/10/3 |
| P2 | 2026-10-29 | c49b5f0 | F8–F15+J5/J6 过堂;F-005 同型补记(计数不变) | 0/0/1 |
## 四、命中(已记)
@@ -60,12 +63,13 @@
|---|---|---|
| B1 | F-001、F-002 | concurrency;maven content |
| T4 | F-003、F-004 | 空转 TE |
| F1 | F-005、F-006、F-016 | TESR/创造节点/GUI |
| F1 | F-005、F-006、F-016 | TESR/创造节点/GUI(P2 同型补记 `TileRendererCreativeNode`) |
| S1 | F-007、F-008 | 奇点;收集印 |
| T1 | F-009–F-013 | 配方/重复 getTE/封印/管 |
| D1 | F-017 | 包路径 INFO |
| N1 | F-014 | 安全相邻 |
| T15 | F-015 | 储罐抽样 |
| F13 | F-018 | GUI 前景与 HUD 提示每帧重测文本宽度(边界) |
## 五、排除面
@@ -88,6 +92,13 @@
| F4 | E-形态全零 | 同帧同参重复昂贵求值未独立确认(重复 getTE 归 T1) |
| F5 | E-形态全零 | TESR 无每帧射线/无节流世界反查主形态 |
| F6 | E-产品形态 | 无自研网格面剔除;渲染走 Model/原版通道 |
| F8 | E-守卫在位 | 16 个 TESR 于 `ClientProxy.java:63-78` 绑定,全仓 0 处覆写 `getMaxRenderDistanceSquared` ⇒ 走原版默认 4096(64 格)封顶;模型为 1 格级小几何,64 格处 1 格≈12 px(1080p、垂直 FOV 70°:1080/(2·tan35°·64)),再裁即可辨 ⇒ 无可裁点;每帧 `new Model`/RL 归 F-005 |
| F9 | E-形态全零 | `glFinish`/`glReadPixels`/`glGetInteger`/`glGetFloat`/`glGetBoolean`/`glGetError`/`glGetUniformLocation*`/`glGetAttribLocation` 全仓 0 命中;无同步点与回读面 |
| F10 | E-形态全零 | `glNewList`/`glCallList`/`compileDisplayList`/`glGenLists` 0;23 处 `setRotationAngles` 全在 `ModelBase` 子类 `render()` 内按原版约定调用或仅 `super` 转发(`ModelSeal.java:60`、`:94`),非输入未变仍全价重建 |
| F11 | E-设计本体 | 11 处发射全为玩法事件/封印工作态上的固定小数目:封印 reddust 每次 1 枚(`SealEventDestroySoil.java:37`、`SealEventTillSoil.java:37`)、熔炼结果 20 枚一次性(`SealEventItemSmelt.java:68`,栈耗尽即 `setDead`)、修复 1 枚(`SealEventItemRepairer.java:36`)、`randomDisplayTick` ≤10 枚(`BlockReturner.java:54`)、API 单枚(`APIProvide.java:40`、`AbstractParticle.java:34`);无每实例每帧无上限倾倒与拖尾无界追加 |
| F12 | E-形态全零 | `glBufferData`/`glBufferSubData`/`glGenBuffers`/`BufferManagement` 0;几何只经 Tessellator 立即模式提交 |
| F14 | E-形态全零 | `glUseProgram`/`glUniform*`/`ARBShaderObjects` 0,无自建着色器程序与逐元素 uniform 设定 |
| F15 | E-启动期 | 图集申请全在注册沿:`registerBlockIcons`(`BlockDarkGen.java:59` 等)、`registerIcons`(`FocusProjectile.java:34`)、`setTextureName`(`init/MF.java:34` 等);运行期无重复申请 |
| S2 | E-设计本体 | 周期 `getBlock`/`getTileEntity` 均为已加载邻域作业读取,非「结果可弃的试读加载」 |
| N2 | E-产品形态 | SimpleNetworkWrapper 1.7.10 主线程投递标准形态;无裸 Netty 业务线程改世界 |
| N3 | E-形态全零 | 未见无 shutdown 线程池或静态滞留 World/TE 注册表只增 |
@@ -101,8 +112,8 @@
| J2 | E-形态全零 | 热路径无定幂 `Math.pow`/仅比较用开方等未廉价化算式立案 |
| J3 | E-形态全零 | `parkNanos`/`yield`/`onSpinWait` 0 |
| J4 | E-形态全零 | 无基本类型数组同构手写循环可换批量原语的热面 |
| J5 | E-形态全零 | 粒子/TESR 非「同纹理逐元素 startDrawing…draw 成对未合并」主形态 |
| J6 | E-形态全零 | 未见同一拍同源多谓词可融合的独立遍历立案 |
| J5 | E-形态全零 | 粒子/TESR 非「同纹理逐元素 startDrawing…draw 成对未合并」主形态;P2 复核全仓 3 处 `startDrawingQuads` 各为单 quad 批(`RendererInfuser.java:69`、`TileRendererCreativeNode.java:48`、`HUD.java:191`) |
| J6 | E-形态全零 | 未见同一拍同源多谓词可融合的独立遍历立案;P2 复核封印路径为单趟扫事件表(`TileSeal.java:57-62`,频次已记 F-012) |
## 六、规则反馈
@@ -112,9 +123,13 @@
| T1 | `Loader.isModLoaded` + `new` 桥接对象出现在 updateEntity 六向环,易被只扫配方表的规则漏掉 | F-011 TileThaumicGenerator.java:71 |
| S1 | 「盒有界但循环内重复查询同一盒」应明示计入频率乘子,勿因 radius 字面量有界直接排除 | F-007 EntitySingularity.java:70 |
| T4 | 1.7.10 默认 `canUpdate()==true`;无覆写 + 空/继承空 updateEntity 即命中,勿写「默认 false」 | F-003/F-004 |
| F8 | 1.7.10 `TileEntity.getMaxRenderDistanceSquared()` 默认 4096(64 格)即原版门;未覆写应记为门在位正例,勿把「没写 if(distance)」当缺门 | `ClientProxy.java:63-78` |
| F11 | 拟补判定款:固定小数目(1/≤10/一次性 20)且挂在玩法事件或工作态上的点光源发射,不算「无预算倾倒」;不认这条会把封印类与 `randomDisplayTick` 形态全拖进复核面 | `SealEventDestroySoil.java:37`、`BlockReturner.java:54` |
| F13 | 证据强度仍标「来源数 0」;本仓 9 个 GUI 前景+HUD 逐帧 `getStringWidth`(含 HUD 逐字符 `bindTexture`)可回填来源数,并明示「测宽=排版面、`drawString` 内部重测仍算一次」 | `GUIThaumicGenerator.java:32`、`TipMessage.java:35` |
## 七、修订史
| 日期 | 轮次 | 变更 |
|---|---|---|
| 2026-10-26 | P1 | 建档:修 4 / 观 10 / 边 3;源树 HEAD `2f7b9c9696ee6cceb11d93c54592fed30ca218de` |
| 2026-10-29 | P2 | F8–F15+J5/J6 过堂(SHA `c49b5f0`):F13 立 F-018(边界,GUI 前景 9 处+`TipMessage` 逐帧测宽);F8/F9/F10/F11/F12/F14/F15 入排除面;F-005 同型补记 `TileRendererCreativeNode`(计数不变);F-016 修法补量级算式(处置/状态不变);概况改按 git 实仓(HEAD `c49b5f0`@`main`),矩阵补合计行 → 边 3→4、合计 17→18、未关闭 13→14 |