Class AccessWidenerUtils
java.lang.Object
net.fabricmc.loom.configuration.mods.AccessWidenerUtils
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final record单个 class tweaker 声明. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionreadAccessWideners(Path inputJar, ModPlatform platform) 读取一个 mod jar 里声明的**全部** class tweaker(access widener).readClassTweakers(FabricModJson fabricModJson) 把元数据里的classTweakers声明逐条展开成「路径 + 环境 + 头 + 内容」.static byte[]remapAccessWidener(byte[] input, org.objectweb.asm.commons.Remapper remapper, String fromNamespace, String toNamespace) Remap a mods access widener from intermediary to named, so that loader can apply it in our dev-env.
-
Constructor Details
-
AccessWidenerUtils
public AccessWidenerUtils()
-
-
Method Details
-
remapAccessWidener
public static byte[] remapAccessWidener(byte[] input, org.objectweb.asm.commons.Remapper remapper, String fromNamespace, String toNamespace) Remap a mods access widener from intermediary to named, so that loader can apply it in our dev-env. -
readAccessWideners
public static List<AccessWidenerUtils.AccessWidenerData> readAccessWideners(Path inputJar, ModPlatform platform) throws IOException 读取一个 mod jar 里声明的**全部** class tweaker(access widener).返回空列表表示「这个 jar 不需要处理」——不是 mod jar、Forge 系上不是 mods.toml 形态, 或压根没有声明。调用方因此不必再区分 null 与空集合,只需判断是否为空。
为什么是列表而不是单条:schema v2 的
classTweakers本来就是 「jar 内路径 → 生效环境」的映射,一个 mod 声明多条是合法的(见FabricModJsonV2#getClassTweakers)。把多条压成一条只有两种下场:要么丢掉后面的 文件(它们的声音直接被忽略),要么把内容拼成一份(环境随之丢失,只在客户端生效的规则 会跑到服务端去)。所以这里逐条返回,环境随条目一起带出。- Parameters:
inputJar- 待读取的 mod jarplatform- 平台;决定「什么算 mod jar」以及是否接受 fabric.mod.json- Returns:
- 各条声明;有序(按 jar 内路径),无声明时为空列表
- Throws:
IOException
-
readClassTweakers
public static List<AccessWidenerUtils.AccessWidenerData> readClassTweakers(FabricModJson fabricModJson) throws IOException 把元数据里的classTweakers声明逐条展开成「路径 + 环境 + 头 + 内容」.结果按 jar 内路径排序:schema v2 的声明表是
HashMap(见FabricModJsonV2#getConditionalConfigs),按迭代顺序处理会让同一份元数据在不同 JVM 上得到不同顺序——写回 jar 的结果虽然等价,但任何按顺序展示或比较的输出都会抖动。刻意保持 public:读取逻辑是本次改动的主体,单元测试要能在不落地真实 mod jar 的 前提下直接覆盖它(与
RemapModsTask#collectRemapClasspath同一种做法)。- Parameters:
fabricModJson- 已解析的元数据- Returns:
- 各条声明;有序(按 jar 内路径),无声明时为空列表
- Throws:
IOException
-