Class ForgeSourcesService


public final class ForgeSourcesService extends Service<ForgeSourcesService.Options>
  • Field Details

  • Constructor Details

  • Method Details

    • createOptions

      public static org.gradle.api.provider.Provider<ForgeSourcesService.Options> createOptions(org.gradle.api.Project project)
    • addForgeSourcesDuringProjectConfiguration

      public static void addForgeSourcesDuringProjectConfiguration(org.gradle.api.Project project, ServiceFactory serviceFactory) throws IOException
      Throws:
      IOException
    • getSourcesCacheKey

      public String getSourcesCacheKey()
      Returns 注入输入(Forge 源码包、预解压目录与源码重映射用的映射文件)的指纹,供反编译缓存键覆盖注入.

      注入发生在缓存条目写出之前,也就是说缓存条目里存的是**注入后**的源码; 缓存键因此必须覆盖注入的输入。否则「换了 Forge 源码、而类字节没变」时缓存会全命中: 任务因输入变化确实重跑了,产物却与改动前逐字节相同,新源码被静默忽略。

      三类输入都要计入:执行期优先读 ForgeSourcesService.Options.getForgeSourceDirectories()(声明式解压的产物), 目录不存在或为空时才回退到 ForgeSourcesService.Options.getForgeSourceJars();两者都可能单独变化, 只记一个就会让另一个的变更失效。第三类是 ForgeSourcesService.Options.getSourceRemapperService() 用的映射 (生产命名空间 → named,Forge 下即 srg → named):注入的是**重映射之后**的源码文本, 同一份 Forge 源文件在这份映射变化后就是另一段文本。

      映射同样只按**内容**入键(见 remapMappingsFingerprint()),路径与文件名都不进键。

      Returns:
      注入输入(Forge 源码包、预解压目录与源码重映射用的映射文件)的指纹,供反编译缓存键覆盖注入
    • addForgeSources

      public void addForgeSources(@Nullable Path minecraftJar, Path sourcesJar) throws IOException
      把 Forge 源码写入目标源码包,允许消费预解压目录.
      Parameters:
      minecraftJar - 用作类过滤依据的 Minecraft jar;为 null 时跳过「源码是否存在于输入 jar」的检查
      sourcesJar - 目标源码包
      Throws:
      IOException - 读写源码包失败
    • addForgeSources

      public void addForgeSources(@Nullable Path minecraftJar, Path sourcesJar, boolean usePreExtractedSources) throws IOException
      把 Forge 源码写入目标源码包.
      Parameters:
      minecraftJar - 用作类过滤依据的 Minecraft jar;为 null 时跳过「源码是否存在于输入 jar」的检查
      sourcesJar - 目标源码包
      usePreExtractedSources - 是否允许消费 ForgeSourcesService.Options.getForgeSourceDirectories() 预解压目录。 只有同一次构建里已经声明并执行了生产者任务(extractForgeSources)的调用方才能传 true;配置期调用必须传 false,否则会读到上一次构建遗留的、属于旧 Forge 版本的源码。
      Throws:
      IOException - 读写源码包失败