Package dev.architectury.loom.forge
Class ForgeSourcesService
java.lang.Object
net.fabricmc.loom.util.service.Service<ForgeSourcesService.Options>
dev.architectury.loom.forge.ForgeSourcesService
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final String「配置期 Forge 源码注入因 named MC jar 未就位而整批跳过」的日志前缀. -
Constructor Summary
ConstructorsConstructorDescriptionForgeSourcesService(ForgeSourcesService.Options options, ServiceFactory serviceFactory) -
Method Summary
Modifier and TypeMethodDescriptionvoidaddForgeSources(@Nullable Path minecraftJar, Path sourcesJar) 把 Forge 源码写入目标源码包,允许消费预解压目录.voidaddForgeSources(@Nullable Path minecraftJar, Path sourcesJar, boolean usePreExtractedSources) 把 Forge 源码写入目标源码包.static voidaddForgeSourcesDuringProjectConfiguration(org.gradle.api.Project project, ServiceFactory serviceFactory) static org.gradle.api.provider.Provider<ForgeSourcesService.Options> createOptions(org.gradle.api.Project project) Returns 注入输入(Forge 源码包、预解压目录与源码重映射用的映射文件)的指纹,供反编译缓存键覆盖注入.Methods inherited from class net.fabricmc.loom.util.service.Service
getOptions, getServiceFactory
-
Field Details
-
TYPE
-
SKIPPED_LOG_MARKER
「配置期 Forge 源码注入因 named MC jar 未就位而整批跳过」的日志前缀.公开是为了让测试按同一份字面量断言:跳过是「输入尚未产出」时的**预期行为** (见
addForgeSourcesDuringProjectConfiguration(Project, ServiceFactory)), 但它是静默损坏的反面——必须能从构建日志里确认它确实发生了。- See Also:
-
-
Constructor Details
-
ForgeSourcesService
-
-
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
Returns 注入输入(Forge 源码包、预解压目录与源码重映射用的映射文件)的指纹,供反编译缓存键覆盖注入.注入发生在缓存条目写出之前,也就是说缓存条目里存的是**注入后**的源码; 缓存键因此必须覆盖注入的输入。否则「换了 Forge 源码、而类字节没变」时缓存会全命中: 任务因输入变化确实重跑了,产物却与改动前逐字节相同,新源码被静默忽略。
三类输入都要计入:执行期优先读
ForgeSourcesService.Options.getForgeSourceDirectories()(声明式解压的产物), 目录不存在或为空时才回退到ForgeSourcesService.Options.getForgeSourceJars();两者都可能单独变化, 只记一个就会让另一个的变更失效。第三类是ForgeSourcesService.Options.getSourceRemapperService()用的映射 (生产命名空间 → named,Forge 下即 srg → named):注入的是**重映射之后**的源码文本, 同一份 Forge 源文件在这份映射变化后就是另一段文本。映射同样只按**内容**入键(见
remapMappingsFingerprint()),路径与文件名都不进键。- Returns:
- 注入输入(Forge 源码包、预解压目录与源码重映射用的映射文件)的指纹,供反编译缓存键覆盖注入
-
addForgeSources
把 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- 读写源码包失败
-