Class SplitMinecraftProvider

java.lang.Object
net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider
net.fabricmc.loom.configuration.providers.minecraft.SplitMinecraftProvider

public final class SplitMinecraftProvider extends MinecraftProvider
  • Constructor Details

  • Method Details

    • initFiles

      protected void initFiles()
      Overrides:
      initFiles in class MinecraftProvider
    • getMinecraftJars

      public List<Path> getMinecraftJars()
      Specified by:
      getMinecraftJars in class MinecraftProvider
    • getOfficialNamespace

      public MappingsNamespace getOfficialNamespace()
      Specified by:
      getOfficialNamespace in class MinecraftProvider
    • produceOwnJars

      protected void produceOwnJars() throws Exception
      Description copied from class: MinecraftProvider
      子类在此生产自己的产物(合并/拆分/env-only 透传).

      由 MinecraftProvider.provide() 与 MinecraftProvider.provideMinecraftJars() 在基类产物之后调用,因此 「我的输入就是基类产物」这条关系由调用点保证。投影时不会调用本方法:那时产物由 MinecraftProvider.registerProviderTasks(java.util.Map<java.nio.file.Path, net.fabricmc.loom.pipeline.RemapMinecraftTaskRegistry.Producer>) 登记的执行期任务承担(子类在那里决定自己怎么接线)。

      Overrides:
      produceOwnJars in class MinecraftProvider
      Throws:
      Exception
    • cacheKey

      protected String cacheKey()
      Overrides:
      cacheKey in class MinecraftProvider
    • registerProviderTasks

      protected void registerProviderTasks(Map<Path,RemapMinecraftTaskRegistry.Producer> producers)
      注册拆分任务:产物生产交给执行期任务,产物路径与配置期一致.

      「是否可以拆分」的判据与配置期逐字一致(同一份 L2 元数据),且仍在配置期给出**明确的失败**, 而不是把错误推迟到执行期:这类「版本不支持所选 jar 形态」是配置错误,越早失败越好, 判据也只依赖不打开 jar 的元数据,因此不需要先有产物。

      两个产物由同一个任务产出:配置期也是「一次拆分、两半一起落位」,任何一半不可复用都要重跑整次拆分。

      Overrides:
      registerProviderTasks in class MinecraftProvider
      Parameters:
      producers - 本次已登记的产物(可写):键是产物的绝对规范化路径
    • splitJars

      public static void splitJars(Path clientJar, Path serverJar, Path clientOnlyJar, Path commonJar) throws Exception
      把 client 与 server jar 拆成 client-only 与 common 两个产物.

      配置期路径与执行期任务(SplitMinecraftJarsTask)共用本方法:共享条目清单、 「两个产物分别原子落位」「失败时清理临时文件」都在这里唯一持有。若任务另写一套, 两套拆分只要差一点,产物就会在同一个共享目录里互相判为不可复用。

      Parameters:
      clientJar - 待拆分的 client jar
      serverJar - 待拆分的 server jar(抽取产物)
      clientOnlyJar - 客户端侧产物的目标位置
      commonJar - 两侧共享产物的目标位置
      Throws:
      Exception
    • getMinecraftClientOnlyJar

      public Path getMinecraftClientOnlyJar()
    • getMinecraftCommonJar

      public Path getMinecraftCommonJar()