Class MinecraftLegacyPatchedProvider
-
Nested Class Summary
Nested classes/interfaces inherited from class dev.architectury.loom.forge.minecraft.MinecraftPatchedProvider
MinecraftPatchedProvider.ProductionOptions, MinecraftPatchedProvider.ThrowingProducer, MinecraftPatchedProvider.Type -
Field Summary
Fields inherited from class dev.architectury.loom.forge.minecraft.MinecraftPatchedProvider
dirty, logger, minecraftProvider, project, type -
Constructor Summary
ConstructorsConstructorDescriptionMinecraftLegacyPatchedProvider(org.gradle.api.Project project, MinecraftProvider minecraftProvider, MinecraftPatchedProvider.Type type) -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean锁内二次确认:判定现有产物能否复用,并返回本次是否需要整链重建.protected Path[]Returns 本配置下必须可复用的共享产物列表,供MinecraftPatchedProvider.needsWork()判定.Returns 已重映射到 named 的 Forge jar.protected void对给定 jar 执行 Forge 的 binary patch.protected voidvoidprovide()voidremapJar(ServiceFactory serviceFactory) Methods inherited from class dev.architectury.loom.forge.minecraft.MinecraftPatchedProvider
accessTransform, accessTransformForge, copyMissingClasses, createAccessTransformerOptions, createBinpatcherTool, createMcpExecutor, createNeoForgeInstallerTools, createPrePatchJarMcpOptions, createPrePatchJarMcpOptions, get, getMappingTree, getMinecraftPatchedIntermediateAtJar, getOrProduceMinecraftPatchedIntermediateJar, getPrePatchJarProducerTaskPath, isDirty, isPatchedJarUpToDate, isReusableJar, produceFinalJarsForTask, produceFinalJarsInto, producePatchedIntermediateForTask, productionOptions, provideProjectionBlocker, publishAtomically, remapJarProjectionBlocker, runAccessTransformer, runBinpatcher, runMcpExecutor, runProduction, withLock, withPatchedLock
-
Constructor Details
-
MinecraftLegacyPatchedProvider
public MinecraftLegacyPatchedProvider(org.gradle.api.Project project, MinecraftProvider minecraftProvider, MinecraftPatchedProvider.Type type)
-
-
Method Details
-
provide
- Overrides:
providein classMinecraftPatchedProvider- Throws:
Exception
-
checkCache
锁内二次确认:判定现有产物能否复用,并返回本次是否需要整链重建.与父类一致,本方法不再删除共享产物:删除会让锁外只做存在性判定的读方拿到缺失文件, 也会让其它工作树互相触发重建。legacy 链没有单一版本标记产物,任一件缺失即无法确认 其余产物与当前算法同代,因此按整链重建处理(各件仍以「临时文件 + 原子落位」重新生成)。
- Overrides:
checkCachein classMinecraftPatchedProvider- Returns:
- 是否需要整链重建
- Throws:
IOException
-
getGlobalCaches
Description copied from class:MinecraftPatchedProviderReturns 本配置下必须可复用的共享产物列表,供MinecraftPatchedProvider.needsWork()判定..列表只包含当前 jar 配置确实会生成的产物:server-only 不提供 client jar,
client-extra.jar既不生成也不进 classpath、不注册进 FORGE_EXTRA(见MinecraftPatchedProvider.providesClientJar()), 把它计入判定会让MinecraftPatchedProvider.needsWork()恒为真、每次构建都白取一次跨进程锁。- Overrides:
getGlobalCachesin classMinecraftPatchedProvider- Returns:
- 本配置下必须可复用的共享产物列表,供
MinecraftPatchedProvider.needsWork()判定
-
produceIntermediateJarIfMissing
Description copied from class:MinecraftPatchedProvider确保MinecraftPatchedProvider.getMinecraftPatchedIntermediateJar()指向的产物已存在.默认实现调用
MinecraftPatchedProvider.provide();legacy 链的产物在MinecraftPatchedProvider.remapJar(ServiceFactory)阶段生成(provide()只做判定),由子类覆盖补齐。任务路径下不能走
provide():那条路径只做接线、不写产物。本方法只被**配置期读者**调用 (getOrProduceMinecraftPatchedIntermediateJar的调用方:mappings 迁移的配置期回退路径), 而那个读者与MinecraftPatchedProvider.provideProjectionBlocker()用的是同一个判据——走到这里时任务路径本不该生效。 真走到这里(产物在判定之后被其它工作树删掉或写坏)时,provide()只做接线, 随后getOrProduceMinecraftPatchedIntermediateJar的可复用性复检会以明确异常报出, 而不是把不存在的路径交给迁移器去读。- Overrides:
produceIntermediateJarIfMissingin classMinecraftPatchedProvider- Throws:
Exception
-
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:
getNamedForgeJarin classMinecraftPatchedProvider- Returns:
- 已重映射到 named 的 Forge jar
-
remapJar
- Overrides:
remapJarin classMinecraftPatchedProvider- Throws:
Exception
-
patchJars
Description copied from class:MinecraftPatchedProvider对给定 jar 执行 Forge 的 binary patch.工具的 classpath、主类与参数模板都由
ForgeExternalToolService.Options声明: classpath 是惰性的(配置期只接线,取值推迟到真正执行时),发起调用也只依赖ServiceFactory。 因此本方法既能在配置期路径里调用,也能在把它连同调用点搬进任务之后于执行期调用—— 那条路径上不再有任何需要Project的同步求值。- Overrides:
patchJarsin classMinecraftPatchedProvider- Throws:
Exception
-
getMinecraftIntermediateJar
- Overrides:
getMinecraftIntermediateJarin classMinecraftPatchedProvider
-
getMinecraftPatchedIntermediateJar
- Overrides:
getMinecraftPatchedIntermediateJarin classMinecraftPatchedProvider
-
getMinecraftPatchedJar
- Overrides:
getMinecraftPatchedJarin classMinecraftPatchedProvider
-