Record Class BundleMetadata

java.lang.Object
java.lang.Record
net.fabricmc.loom.configuration.providers.BundleMetadata

public record BundleMetadata(List<BundleMetadata.Entry> libraries, List<BundleMetadata.Entry> versions, String mainClass) extends Record
  • Constructor Details

    • BundleMetadata

      public BundleMetadata(List<BundleMetadata.Entry> libraries, List<BundleMetadata.Entry> versions, String mainClass)
      Creates an instance of a BundleMetadata record class.
      Parameters:
      libraries - the value for the libraries record component
      versions - the value for the versions record component
      mainClass - the value for the mainClass record component
  • Method Details

    • fromJar

      public static @Nullable BundleMetadata fromJar(Path jar) throws IOException
      Throws:
      IOException
    • fromJarCached

      public static @Nullable BundleMetadata fromJarCached(SpecStore store, Path jar, @Nullable String artifactSha1) throws IOException
      读取服务端制品的 bundle 元数据,结果按制品的 sha1 落盘复用.

      本方法存在的理由是一个配置期约束:服务端库的注入( MinecraftLibraryProvider.provideServerLibraries)依赖这里读出的库列表, 而库注入只能在配置期做,因此配置期**必须**拿到 bundle 元数据。

      但元数据本身是「下载 url + sha1」的纯函数——这两个值来自 version json, 不需要碰磁盘。于是把结果按 sha1 缓存后,后续构建可以完全跳过「打开服务端 jar 读内部清单」这一步,配置期也就不再观察该 jar。这是把服务端下载搬到执行期的**先决条件**。

      首次构建仍须真实读取(此时无缓存),并因此付出一次配置期文件观察; 之后稳定命中。

      Parameters:
      store - L2 规格存储
      jar - 服务端 jar
      artifactSha1 - 该制品在 version json 中声明的 sha1,作为缓存身份
      Returns:
      bundle 元数据;非 bundler 的旧版服务端 jar 返回空
      Throws:
      IOException
    • isCached

      public static boolean isCached(SpecStore store, @Nullable String artifactSha1)
      Returns 该制品是否已有 bundle 元数据缓存..

      命中判定只看缓存条目是否存在:条目里的空内容表示「上次已判定为旧版 jar(无 bundle)」, 那是**结论**而不是缺失,同样算命中。本方法不打开 jar,因此可以安全地在配置期用于判定 「元数据是否已可无 jar 读取地拿到」——这正是 MinecraftProvider 决定能否把下载搬到 执行期任务的判据(见 fromJarCached(net.fabricmc.loom.spec.SpecStore, java.nio.file.Path, java.lang.String))。

      Parameters:
      store - L2 规格存储
      artifactSha1 - 该制品在 version json 中声明的 sha1,作为缓存身份;为空时必然未命中
      Returns:
      该制品是否已有 bundle 元数据缓存
    • unpackEntry

      public static void unpackEntry(Path jar, Path dest, String path, String sha1, boolean refreshDeps) throws IOException
      从 bootstrap jar 中抽取一个内嵌条目到目标位置.

      抽取规则(原子发布 + 目标文件上的 LoomHash 标记)由这里唯一持有:配置期路径 (BundleMetadata.Entry.unpackEntry(Path, Path, Project))与执行期任务 (ExtractMinecraftServerJarTask)都走本方法,避免出现第二套抽取逻辑—— 两套逻辑产出的 jar 只要差一点,「任务产物」与「配置期产物」就会在同一个共享目录里互相判为不可复用。

      Parameters:
      jar - 内嵌条目所在的 bootstrap jar
      dest - 抽取目标
      path - 条目在 jar 中的路径
      sha1 - 条目声明的 sha1,作为「已抽取」标记写入目标文件
      refreshDeps - 为真时忽略既有目标、强制重新抽取
      Throws:
      IOException
    • toString

      public final String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with Objects::equals(Object,Object).
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • libraries

      public List<BundleMetadata.Entry> libraries()
      Returns the value of the libraries record component.
      Returns:
      the value of the libraries record component
    • versions

      public List<BundleMetadata.Entry> versions()
      Returns the value of the versions record component.
      Returns:
      the value of the versions record component
    • mainClass

      public String mainClass()
      Returns the value of the mainClass record component.
      Returns:
      the value of the mainClass record component