Class MinecraftLegacyPatchedProvider

java.lang.Object
dev.architectury.loom.forge.minecraft.MinecraftPatchedProvider
dev.architectury.loom.forge.minecraft.MinecraftLegacyPatchedProvider

public class MinecraftLegacyPatchedProvider extends MinecraftPatchedProvider
  • Constructor Details

  • Method Details

    • provide

      public void provide() throws Exception
      Overrides:
      provide in class MinecraftPatchedProvider
      Throws:
      Exception
    • checkCache

      protected boolean checkCache() throws IOException
      锁内二次确认:判定现有产物能否复用,并返回本次是否需要整链重建.

      与父类一致,本方法不再删除共享产物:删除会让锁外只做存在性判定的读方拿到缺失文件, 也会让其它工作树互相触发重建。legacy 链没有单一版本标记产物,任一件缺失即无法确认 其余产物与当前算法同代,因此按整链重建处理(各件仍以「临时文件 + 原子落位」重新生成)。

      Overrides:
      checkCache in class MinecraftPatchedProvider
      Returns:
      是否需要整链重建
      Throws:
      IOException
    • getGlobalCaches

      protected Path[] getGlobalCaches()
      Description copied from class: MinecraftPatchedProvider
      Returns 本配置下必须可复用的共享产物列表,供 MinecraftPatchedProvider.needsWork() 判定..

      列表只包含当前 jar 配置确实会生成的产物:server-only 不提供 client jar, client-extra.jar 既不生成也不进 classpath、不注册进 FORGE_EXTRA(见 MinecraftPatchedProvider.providesClientJar()), 把它计入判定会让 MinecraftPatchedProvider.needsWork() 恒为真、每次构建都白取一次跨进程锁。

      Overrides:
      getGlobalCaches in class MinecraftPatchedProvider
      Returns:
      本配置下必须可复用的共享产物列表,供 MinecraftPatchedProvider.needsWork() 判定
    • produceIntermediateJarIfMissing

      protected void produceIntermediateJarIfMissing() throws Exception
      Description copied from class: MinecraftPatchedProvider
      确保 MinecraftPatchedProvider.getMinecraftPatchedIntermediateJar() 指向的产物已存在.

      默认实现调用 MinecraftPatchedProvider.provide();legacy 链的产物在 MinecraftPatchedProvider.remapJar(ServiceFactory) 阶段生成(provide() 只做判定),由子类覆盖补齐。

      任务路径下不能走 provide():那条路径只做接线、不写产物。本方法只被**配置期读者**调用 (getOrProduceMinecraftPatchedIntermediateJar 的调用方:mappings 迁移的配置期回退路径), 而那个读者与 MinecraftPatchedProvider.provideProjectionBlocker() 用的是同一个判据——走到这里时任务路径本不该生效。 真走到这里(产物在判定之后被其它工作树删掉或写坏)时,provide() 只做接线, 随后 getOrProduceMinecraftPatchedIntermediateJar 的可复用性复检会以明确异常报出, 而不是把不存在的路径交给迁移器去读。

      Overrides:
      produceIntermediateJarIfMissing in class MinecraftPatchedProvider
      Throws:
      Exception
    • getNamedForgeJar

      public Path getNamedForgeJar()
      Returns 已重映射到 named 的 Forge jar. 仅 legacy Forge 具备该产物.

      legacy 的 Forge universal jar 按 srg 名发布,patchForge 会把它重映射成 named, 落位在 Forge 缓存工作目录的 forge.jar。该产物是 ForgeMemberNameFixer 建立「srg 名 → named 名」映射的 对照来源之一;现代 Forge 的 universal jar 本身就在 named 空间,没有这份产物。

      这里按路径定位而非依赖实例类型:MergedForgeMinecraftProvider.getPatchedProvider() 在部分时序下返回的是本基类而非 MinecraftLegacyPatchedProvider(实测 1.12.2 即如此), 若只靠子类覆写会拿到 null。产物不存在时返回 null,调用方据此跳过。

      legacy 的 named forge jar 由 patchForge 内的 srg→named 重映射产出, 位置固定为 forgeWorkingDir/forge.jar,在 provide() 阶段就已写入字段 (与重映射是否已执行无关)。因此本方法只负责给路径,**是否真的产出**由调用方用 Files.isRegularFile 自行判断——基类的按路径推导版本也是同样的契约。

      Overrides:
      getNamedForgeJar in class MinecraftPatchedProvider
      Returns:
      已重映射到 named 的 Forge jar
    • remapJar

      public void remapJar(ServiceFactory serviceFactory) throws Exception
      Overrides:
      remapJar in class MinecraftPatchedProvider
      Throws:
      Exception
    • patchJars

      protected void patchJars(Path clean, Path output, Path patches) throws Exception
      Description copied from class: MinecraftPatchedProvider
      对给定 jar 执行 Forge 的 binary patch.

      工具的 classpath、主类与参数模板都由 ForgeExternalToolService.Options 声明: classpath 是惰性的(配置期只接线,取值推迟到真正执行时),发起调用也只依赖 ServiceFactory。 因此本方法既能在配置期路径里调用,也能在把它连同调用点搬进任务之后于执行期调用—— 那条路径上不再有任何需要 Project 的同步求值。

      Overrides:
      patchJars in class MinecraftPatchedProvider
      Throws:
      Exception
    • getMinecraftIntermediateJar

      public Path getMinecraftIntermediateJar()
      Overrides:
      getMinecraftIntermediateJar in class MinecraftPatchedProvider
    • getMinecraftPatchedIntermediateJar

      public Path getMinecraftPatchedIntermediateJar()
      Overrides:
      getMinecraftPatchedIntermediateJar in class MinecraftPatchedProvider
    • getMinecraftPatchedJar

      public Path getMinecraftPatchedJar()
      Overrides:
      getMinecraftPatchedJar in class MinecraftPatchedProvider