Class ForgeMigratedMappingConfiguration

java.lang.Object
net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration
dev.architectury.loom.forge.ForgeMigratedMappingConfiguration

public final class ForgeMigratedMappingConfiguration extends MappingConfiguration
  • Constructor Details

    • ForgeMigratedMappingConfiguration

      public ForgeMigratedMappingConfiguration(String mappingsIdentifier, Path mappingsWorkingDir)
  • Method Details

    • mappingsMigrationProjectionBlocker

      public static @Nullable String mappingsMigrationProjectionBlocker(LoomGradleExtension extension)
      Returns 不能把 mappings 迁移投影成执行期任务的原因;可以投影时为 null..

      与 MinecraftPatchedProvider.provideProjectionBlocker() 同一风格:每一条都是一个 「配置期有确定的读者会真读迁移产物」的形态,命中即整段退回配置期路径(那条路径与改造前逐字一致), 并留下 lifecycle 留痕。

      判据必须是 LoomGradleExtension 的纯函数:同一个判据还要在 MinecraftProvider.projectionBlocker() 里使用,而后者执行得比 mappings 阶段早得多 (那时 MappingConfiguration 还不存在)。两处一旦不一致,就会出现「vanilla jar 投影了、 迁移却留在配置期」这类组合——配置期读者随后会按路径读到执行期才落位的文件。

      • legacy mixin AP:AnnotationProcessorInvoker.passMixinArguments 在配置期调用 MappingConfiguration.getReplacedTarget,它按内容判据校验平台映射文件 (Forge 下即 mappings-srg-migrated.tiny)并读它派生出 mappings-mixin-<ns>.tiny ——那个文件在配置期就要交给注解处理器的编译参数。投影后平台映射文件只在执行期落位, 该读者会直接以 IllegalStateException 中断构建(本仓库实测:forge/simpleMixinAp 的 mappings-mixin-srg.tiny 正是配置期写出来的)。
      Returns:
      不能把 mappings 迁移投影成执行期任务的原因;可以投影时为 null
    • getManipulateMappingsTaskPath

      public @Nullable String getManipulateMappingsTaskPath()
      Returns 迁移产物的产出任务路径;未投影时为 null..

      供消费方把「我的输入就是你的产出」表达成任务依赖。返回任务**路径**而不是任务实例: 产出方可能由另一份 Loom classloader 配置(约定插件/included build 各自带一份 Loom), 把对方的任务实例交过来会在使用处抛 ClassCastException。

      Returns:
      迁移产物的产出任务路径;未投影时为 null
    • mappingsProducerTaskPath

      public @Nullable String mappingsProducerTaskPath()
      Returns 迁移产物的产出任务路径;未投影时为 null..

      三个映射选项(DEFAULT / WITH_SRG / WITH_MOJANG)在本配置下都指向 迁移产物,故它们共用同一个产出任务。

      Overrides:
      mappingsProducerTaskPath in class MappingConfiguration
      Returns:
      迁移产物的产出任务路径;未投影时为 null
    • isTaskProducedMappings

      protected boolean isTaskProducedMappings(MappingOption mappingOption)
      Returns 该映射选项指向的迁移产物是否由执行期任务产出..

      未投影时(legacy Forge 与 legacy mixin AP)产物在配置期已落位, MappingConfiguration.getMappingsPath(dev.architectury.loom.mappings.MappingOption) 的存在性校验照旧生效。

      Overrides:
      isTaskProducedMappings in class MappingConfiguration
      Returns:
      该映射选项指向的迁移产物是否由执行期任务产出
    • manipulateMappings

      protected void manipulateMappings(org.gradle.api.Project project, Path mappingsJar) throws IOException
      Overrides:
      manipulateMappings in class MappingConfiguration
      Throws:
      IOException
    • manipulate

      public static void manipulate(MappingsMigrator.Inputs inputs, Path rawTinyMappings, Path tinyMappings, Path tinyMappingsWithNs, Path hashPath, String platformId, Consumer<String> info) throws IOException
      执行期任务的入口:跑迁移器准备中间数据,再产出迁移后的 mappings.

      与配置期路径的差别只有「谁触发、谁保证并发」:这里由 Gradle 的任务图保证顺序、 由 up-to-date 判定与构建缓存保证就绪,故不再取跨进程锁、也不再看就绪标记。 产物的字节与配置期路径逐字一致(同一份 produceMigratedMappings(java.util.List<dev.architectury.loom.forge.MappingsMigrator>, java.nio.file.Path, java.nio.file.Path, java.nio.file.Path, java.nio.file.Path, java.nio.file.Path, long, java.lang.String, java.util.function.Consumer<java.lang.String>) 实现)。

      迁移器的中间缓存仍落在共享的 forge 缓存目录:它们只是「由输入决定的中间数据」的记忆化, 不参与本任务的 up-to-date 判定(判定只看真实输入与输出),因此无需声明成任务输出。

      Throws:
      IOException