Class PatchLegacyMinecraftJarsTask

java.lang.Object
org.gradle.api.internal.AbstractTask
org.gradle.api.DefaultTask
net.fabricmc.loom.pipeline.PatchLegacyMinecraftJarsTask
All Implemented Interfaces:
Comparable<org.gradle.api.Task>, org.gradle.api.internal.DynamicObjectAware, org.gradle.api.internal.TaskInternal, org.gradle.api.Named, org.gradle.api.plugins.ExtensionAware, org.gradle.api.Task, org.gradle.util.Configurable<org.gradle.api.Task>

@CacheableTask public abstract class PatchLegacyMinecraftJarsTask extends org.gradle.api.DefaultTask
为 legacy Forge(FG2 形态的 userdev,MC 1.7-1.12.2)打一个 vanilla jar 的二进制补丁.

它取代 MinecraftLegacyPatchedProvider.patchJars() 里的单件生产:binpatcher 打补丁, 再把补丁未触及的非 class 文件补齐,最后用 ParameterAnnotationsFixer 修正 Forge 补丁产物 里违反 JVM 规范的参数注解(详见该类的说明)。

为什么一个类型服务两个产物

client / server 用的是同一条流程,只差输入 jar 与补丁文件。用同一个任务类型 + 两个实例 (不同任务名、不同输入输出)比写两个类更不容易出现「只改了一边」的不一致; 也与配置期 patchJars() 里那两次对称的 publishAtomically 一一对应。

产物一致性

调用的是与配置期完全相同的 runBinpatcher、copyMissingClasses、 walkFileSystems 与 modifyClasses,调用顺序也一致,因此产物逐字节相同。
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.gradle.api.Named

    org.gradle.api.Named.Namer
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    任务名:client 侧.
    static final String
    任务名:server 侧.

    Fields inherited from interface org.gradle.api.Task

    TASK_ACTION, TASK_CONSTRUCTOR_ARGS, TASK_DEPENDS_ON, TASK_DESCRIPTION, TASK_GROUP, TASK_NAME, TASK_OVERWRITE, TASK_TYPE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    abstract org.gradle.api.provider.Property<ForgeExternalToolService.Options>
    binpatcher 工具的声明式选项(配置期解析成纯值,执行期只发进程).
    abstract org.gradle.api.file.RegularFileProperty
    输入:未打补丁的 vanilla jar(binpatcher 的 {clean},也是补齐非 class 文件的来源).
    abstract org.gradle.api.file.RegularFileProperty
    产物:打完补丁的 jar(与配置期同一条路径).
    abstract org.gradle.api.file.RegularFileProperty
    输入:补丁 jar(binpatcher 的 {patch}).

    Methods inherited from class org.gradle.api.DefaultTask

    compareTo, configure, dependsOn, doFirst, doFirst, doFirst, doLast, doLast, doLast, finalizedBy, getActions, getAnt, getDependsOn, getDescription, getDestroyables, getDidWork, getEnabled, getExtensions, getFinalizedBy, getGroup, getInputs, getLocalState, getLogger, getLogging, getMustRunAfter, getName, getOutputs, getPath, getProject, getShouldRunAfter, getState, getTaskDependencies, getTemporaryDir, getTimeout, hasProperty, mustRunAfter, onlyIf, onlyIf, onlyIf, property, setActions, setDependsOn, setDescription, setDidWork, setEnabled, setFinalizedBy, setGroup, setMustRunAfter, setOnlyIf, setOnlyIf, setOnlyIf, setProperty, setShouldRunAfter, shouldRunAfter, usesService

    Methods inherited from class org.gradle.api.internal.AbstractTask

    acceptServiceReferences, appendParallelSafeAction, doNotTrackState, doNotTrackStateIf, getAsDynamicObject, getIdentityPath, getImpliesSubProjects, getLifecycleDependencies, getOnlyIf, getReasonNotToTrackState, getReasonsNotToTrackState, getReasonTaskIsIncompatibleWithConfigurationCache, getRequiredServices, getServices, getSharedResources, getStandardOutputCapture, getTaskActions, getTaskIdentity, getTemporaryDirFactory, hasTaskActions, injectIntoNewInstance, isCompatibleWithConfigurationCache, isEnabled, isHasCustomActions, notCompatibleWithConfigurationCache, prependParallelSafeAction, restoreOnlyIf, restoreTaskActions, setImpliesSubProjects

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.gradle.api.Task

    doNotTrackState, notCompatibleWithConfigurationCache
  • Field Details

  • Constructor Details

    • PatchLegacyMinecraftJarsTask

      public PatchLegacyMinecraftJarsTask()
  • Method Details

    • getCleanJar

      @InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getCleanJar()
      输入:未打补丁的 vanilla jar(binpatcher 的 {clean},也是补齐非 class 文件的来源).
    • getPatches

      @InputFile @PathSensitive(NONE) public abstract org.gradle.api.file.RegularFileProperty getPatches()
      输入:补丁 jar(binpatcher 的 {patch}).
    • getBinpatcherTool

      public abstract org.gradle.api.provider.Property<ForgeExternalToolService.Options> getBinpatcherTool()
      binpatcher 工具的声明式选项(配置期解析成纯值,执行期只发进程).
    • getOutputJar

      @OutputFile public abstract org.gradle.api.file.RegularFileProperty getOutputJar()
      产物:打完补丁的 jar(与配置期同一条路径).
    • generate

      public void generate() throws Exception
      Throws:
      Exception