Class MappingConfiguration

java.lang.Object
net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration
Direct Known Subclasses:
ForgeMigratedMappingConfiguration

public class MappingConfiguration extends Object
  • Field Details

    • mappingsIdentifier

      public final String mappingsIdentifier
    • tinyMappings

      public Path tinyMappings
    • tinyMappingsJar

      public final Path tinyMappingsJar
    • tinyMappingsWithMojang

      public Path tinyMappingsWithMojang
    • tinyMappingsWithSrg

      public Path tinyMappingsWithSrg
    • mixinTinyMappings

      public final Map<String,Path> mixinTinyMappings
    • srgToNamedSrg

      public final Path srgToNamedSrg
  • Constructor Details

    • MappingConfiguration

      protected MappingConfiguration(String mappingsIdentifier, Path mappingsWorkingDir)
  • Method Details

    • create

      public static MappingConfiguration create(org.gradle.api.Project project, ServiceFactory serviceFactory, DependencyInfo dependency, MinecraftProvider minecraftProvider)
    • getMappingsPath

      public Path getMappingsPath(MappingOption mappingOption)
    • getMappingsServiceOptions

      public org.gradle.api.provider.Provider<TinyMappingsService.Options> getMappingsServiceOptions(org.gradle.api.Project project)
    • getMappingsServiceOptions

      public org.gradle.api.provider.Provider<TinyMappingsService.Options> getMappingsServiceOptions(org.gradle.api.Project project, MappingOption mappingOption)
    • getMappingsService

      public TinyMappingsService getMappingsService(org.gradle.api.Project project, ServiceFactory serviceFactory)
    • getMappingsService

      public TinyMappingsService getMappingsService(org.gradle.api.Project project, ServiceFactory serviceFactory, MappingOption mappingOption)
    • setupPost

      public void setupPost(org.gradle.api.Project project) throws IOException
      Throws:
      IOException
    • applyToProject

      public void applyToProject(org.gradle.api.Project project, DependencyInfo dependency) throws IOException
      Throws:
      IOException
    • getRawSrgFile

      public static Path getRawSrgFile(org.gradle.api.Project project) throws IOException
      Throws:
      IOException
    • getMojmapSrgFileIfPossible

      public static Path getMojmapSrgFileIfPossible(org.gradle.api.Project project)
    • manipulateMappings

      protected void manipulateMappings(org.gradle.api.Project project, Path mappingsJar) throws IOException
      Throws:
      IOException
    • extractMappings

      public static void extractMappings(Path jar, Path extractTo) throws IOException
      Throws:
      IOException
    • extractMappings

      public static void extractMappings(FileSystem jar, Path extractTo) throws IOException
      Throws:
      IOException
    • isReusableMappingsText

      public static boolean isReusableMappingsText(Path mappingsFile)
      Returns 该映射文本产物是否可作为输入复用..

      本类的多件共享产物——intermediary-v2.tiny、mappings-mojang.tiny、 mappings-srg.tiny、mappings-srg-named.srg 与 mixin 映射——都是纯文本映射,不是 jar, 故一律不适用 JarReusability.isReusable(Path) 的 zip 口径: 拿文本去开 zipfs 必然失败,会把正常产物永久判为不可用。它们的内容判据等价地取「存在且非空」:

      • 正常产物恒非空——.tiny 至少含映射头,.srg 由 MappingWriter 经 java.io.Writer 逐行写出(SRG 与 tiny 同为文本格式,不是 zip 也不是压缩流), 二者都必然写出内容,故这条不会把正常产物拖进「每次构建都重建」;
      • 能拦下「先删后写」被中断、或旧版本 loom 就地重建时留下的 0 字节残骸。这类残骸正是本仓库 实测过的形态,而被复用后会一路传到最终产物:下游 MappingReader 读到空映射, 或 getReplacedTarget(net.fabricmc.loom.LoomGradleExtension, java.lang.String) 在改写首行时对空行表取下标而抛异常。

      刻意不做逐行解析、首尾行或末尾换行等更严的校验:该判定位于每次构建的无锁快路径上, 全量解析一份 stitch 产物是秒级开销,收益却只覆盖「截断到非 0 长度」这一小类残骸。

      Parameters:
      mappingsFile - 待判定的映射文本产物路径
      Returns:
      该映射文本产物是否可作为输入复用
    • mappingsWorkingDir

      public Path mappingsWorkingDir()
    • createMappingsIdentifier

      protected static String createMappingsIdentifier(String mappingsName, String version, String classifier, String minecraftVersion)
    • createForgeMappingsIdentifier

      protected static String createForgeMappingsIdentifier(LoomGradleExtension extension, String mappingsName, String version, String classifier, String minecraftVersion)
    • mappingsIdentifier

      public String mappingsIdentifier()
    • getUnpickDefinitionsFile

      public File getUnpickDefinitionsFile()
    • hasUnpickDefinitions

      public boolean hasUnpickDefinitions()
    • getAnnotationsData

      public List<AnnotationsData> getAnnotationsData()
    • getUnpickMetadata

      public UnpickMetadata getUnpickMetadata()
    • getSignatureFixes

      public @Nullable Map<String,String> getSignatureFixes()
    • getReplacedTarget

      public Path getReplacedTarget(LoomGradleExtension loom, String namespace)
      取得 Mixin refmap 重映射所需的映射文件.

      intermediary 命名空间直接返回平台映射文件(见 getPlatformMappingFile(net.fabricmc.loom.LoomGradleExtension)), 其余命名空间返回一份由它派生的、改写过首行的 mappings-mixin-*.tiny(见 writeReplacedTarget(net.fabricmc.loom.LoomGradleExtension, java.lang.String, java.nio.file.Path))。 两条路都以平台映射文件为输入,故这里先按共享产物的文本判据(见 isReusableMappingsText(Path)) 确认它可用:

      • 直接返回的分支原先没有任何就绪判定,0 字节残骸会被原样交给 Mixin AP, 让 refmap 静默地按空映射生成(直到运行时才以「找不到映射」的形式炸开);
      • 派生分支读取该文件后立刻取首行(lines.get(0)),空行表会抛出无从诊断的 IndexOutOfBoundsException。

      这里只做「不可用即报错」,不尝试就地重建:平台映射文件由 mappings 阶段 (setup / setupPost)产出,本方法既拿不到 Project 也拿不到 ServiceFactory, 无法重跑那条流水线;而唯一的调用方(Mixin AP 的参数装配)必然在 mappings 阶段之后执行, 正常构建里该文件恒非空,故这条判定不会误报,只会在确有残骸时把静默错误换成可诊断的失败。

      Parameters:
      loom - 当前项目的 loom 扩展
      namespace - refmap 的目标命名空间
    • getPlatformMappingFile

      public Path getPlatformMappingFile(LoomGradleExtension extension)
      The mapping file that is specific to the platform settings. It contains SRG (Forge/common) or Mojang mappings (NeoForge) as needed.
      Returns:
      the platform mapping file path