Class ModJarPostProcess

java.lang.Object
net.fabricmc.loom.core.ModJarPostProcess

public final class ModJarPostProcess extends Object
L4 计算核心:重映射后、与项目无关的 mod jar 后处理步骤.

这些步骤原本内联在 ModProcessor.remapJars 的收尾循环里,与若干**依赖项目模型** 的步骤交错:Forge 的 AT 类名重映射、CoreMod 改写、以及把产物写入本地 maven 仓库都需要 Project。把纯步骤抽出来,是为了让「任务化」时能复用同一份实现,而不必连带搬走 那些搬不动的部分。

为什么是四个独立方法而不是一个 apply()

原本的执行顺序里夹着一处扩展钩子 (ModProcessorExtension.finalise,位于 AW 替换与去嵌套之间)。 若把它们合成一次调用,钩子就会被挤到前面或后面,改变既有行为。 拆成独立步骤后,调用方保留原有的交错顺序,抽取本身不引入时序变化。
  • Method Details

    • replaceAccessWideners

      public static void replaceAccessWideners(Path jar, @Nullable List<Pair<byte[],String>> accessWideners) throws IOException
      把重映射后的 class tweaker 文件逐个写回 jar.

      accessWideners 是「已重映射的字节 + jar 内路径」的列表;为空(含 null) 表示该 mod 不含声明。一个 mod 可以声明多个文件(schema v2 的 classTweakers 是映射), 它们各有各的路径,所以必须一个条目写一次——把多条内容合成一份再写回,会让后写的那份盖掉 前一份,jar 里只剩一个规则文件。

      Throws:
      IOException
    • replaceAccessWidener

      public static void replaceAccessWidener(Path jar, @Nullable Pair<byte[],String> accessWidener) throws IOException
      单条声明的便捷形式:语义与 replaceAccessWideners(java.nio.file.Path, java.util.List<net.fabricmc.loom.util.Pair<byte[], java.lang.String>>) 完全相同,为既有调用方保留.
      Throws:
      IOException
    • stripNestedJars

      public static void stripNestedJars(Path jar) throws IOException
      去掉嵌套 jar 的元数据.

      开发环境中这些嵌套 jar 不该由 loader 加载,否则会被当作重复的模组。

      Throws:
      IOException
    • writeMappingNamespace

      public static void writeMappingNamespace(Path jar, String targetNamespace) throws IOException
      在 manifest 中记录本产物所处的映射命名空间.
      Parameters:
      targetNamespace - 产物落位的命名空间
      Throws:
      IOException
    • remapNeoForgeAts

      public static void remapNeoForgeAts(Path jar, net.fabricmc.mappingio.tree.MemoryMappingTree mappings, String productionNamespace, String targetNamespace) throws IOException
      全量重映射 NeoForge 的 access transformer.

      仅 NeoForge 需要:Forge 只在类名层面映射,其余留到运行时按 srg → named 处理。

      Throws:
      IOException