访问变换器
基本信息
| 属性 | 值 |
|---|---|
| 文件 | spark-forge1710/src/main/resources/META-INF/spark_at.cfg |
| 挂载方式 | spark-forge1710/build.gradle —— jar { manifest { attributes 'FMLAT': 'spark_at.cfg' } } |
| 规则数 | 1 |
| 适用侧 | 仅客户端 |
spark 在 1.7.10 上附带一条 Forge 访问变换器规则。
规则内容
文件全文只有一行:
public net.minecraft.client.Minecraft field_152352_aC # mcThread
| 字段 | 值 |
|---|---|
| 可见性 | public |
| 目标类 | net.minecraft.client.Minecraft |
| MCP 字段名 | field_152352_aC |
| 映射名 | mcThread |
| 规则数 | 1 |
field_152352_aC 是 MCP 混淆名,mcThread 是 Forge 开发环境(MCP stable_12,对应 spark-forge1710/build.gradle 的 mappings = 'stable_12')中的映射名。
为什么需要它
Minecraft.mcThread 在 1.7.10 中是 protected 字段,spark 需要读它来定位客户端主线程。全部引用点只有一处:
this.gameThreadDumper = new ThreadDumper.Specific(minecraft.mcThread);
—— Forge1710ClientSparkPlugin.java:56
该字段被用于构造客户端的默认 ThreadDumper,也就是 线程分组与导出 中 1.7.10 客户端默认采样的那个线程。ThreadDumper.Specific 需要一个确定的主线程才能把采样数据归因到「客户端主线程」这一行。
全仓穷举 field_152352_aC 与 mcThread 在 spark-forge1710 + spark-common 下的命中:
spark-forge1710/.../Forge1710ClientSparkPlugin.java:56: this.gameThreadDumper = new ThreadDumper.Specific(minecraft.mcThread);
仅此一处。
服务端不需要
Forge1710ServerSparkPlugin 不需要访问变换器:它在 FMLServerStartingEvent 期间构造,直接用 ThreadDumper.GameThread 捕获 Thread.currentThread()(Forge1710ServerSparkPlugin.java:83-84),不触碰任何混淆字段。
这条规则随 jar 内所有环境加载(服务端亦然),但在服务端不产生作用。
与依赖访问变换器的区分
不要与 Forge 依赖的 FMLAT 混淆。spark-forge1710/build.gradle 只声明了本模块自己的这一条;依赖(Guava、okhttp、adventure 等)随 shadow 打包但不携带各自的访问变换器。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 规则数 | 1 | META-INF/spark_at.cfg 全文 |
| 目标字段 | net.minecraft.client.Minecraft.field_152352_aC |
同上 |
| 引用点数量 | 1 | grep -rn 'mcThread' spark-forge1710 spark-common |
相关条目
- 配置目录文件 - 另一类配置:
config.json与运行期产物 - 线程分组与导出 - 该字段的实际用途
- config.json 配置项 - 运行时可改的用户配置