• 注册
  • MOD模组 MOD模组 关注:44 内容:16399

    静态数据 (Static Data)

  • 查看作者
  • 打赏作者
  • 当前位置: SodaMC > MOD模组 > 正文
  • 潮涌核心
    反派

    静态数据 (Static Data)


    该模组允许从您自己的模组初始化程序中直接访问集成数据!


    ---

    该模组的功能是什么?

    静态数据创建了第三类资源:“静态数据”,让模组可以通过一种简单、有结构的方式互相搜索彼此和他们的环境,寻找兼容性和互操作信息。

    例如,一个模组可能会注册一个基于一组基本方块的斜坡形状方块,但也可以基于模组方块注册新的斜坡。标签在这种情况下并不早可用!静态数据却可以。

    模组互操作数据的责任并非锁定在一个特定的位置。与模组A相关的静态数据,由模组A、模组B、第三方模组甚至是一个静态数据包提供。来自这些来源的数据可以混合和叠加使用。

    为什么我们需要静态数据?

    静态数据是固定的

    数据包和资源包的重新加载不会影响静态数据和静态数据包。在您的模组的整个生命周期内,可以访问相同的数据,并且可以通过数据的来源模组(如果有)进行识别。您永远不必为这些数据调用任何入口点,也不必关心模组从哪个加载器加载的,数据已经存在。您永远不必担心连接到服务器是否已更改数据,因为静态数据不会更改,这样您可以有信心一次性地初始化数据。

    静态数据早已准备就绪

    只要加载器中的第一个入口点运行 - 无论该入口点是quilt-loader、qsl、qfapi还是模组集成入口点,如果您的模组被要求初始化某些内容,静态数据已经准备好。

    您可以使用它来触发注册

    由于普通数据包随时间而变化,使用它们改变静态注册非常麻烦。由于静态数据不会更改,并且在注册表被冻结之前已经可用,您可以使用从静态数据中获取的信息来注册方块和实体。这是其存在的主要原因 - 允许模组以消失的方式相互传达功能信息,但不依赖于这些模组使用相同的模组加载器。

    我如何提供静态数据?

    模组提供静态数据就像提供其他类型数据一样

    静态数据位于`assets`和 `data` 目录旁边的 `staticdata` 目录中,并且项目在静态数据文件夹内进行分组。因此,如果模组“architecture_extensions”正在搜索“blockgroups”路径下的文件,并且您提供了一个名为“obsidian.json”的集成,那么此文件的完整路径将是

    src/main/resources/staticdata/architecture_extensions/blockgroups/obsidian.json

    请注意,您根本不使用自己的命名空间 - 通过将数据放在您的模组内部,您的模组ID已经提供。

    玩家和包制作者可以提供静态数据包

    根目录名为“staticdata”的zip文件是有效的静态数据包。这与资源包完全相同,除了静态数据。要提供与上一节相同的文件,zip文件内的路径如下:

    /staticdata/architecture_extensions/blockgroups/obsidian.json

    在根目录内放置`pack.mcmeta`和`pack.png`是可选的,并且当前会被忽略。

    静态数据包 zip 文件可以从两个地方加载:
    - 从 mod 内部,在根 `src/main/resources/staticdata/` 文件夹中
    - 从根目录中的 `.minecraft/staticdata/` 文件夹加载,如果没有,则在任何模组请求静态数据时将创建它

    放置在子目录中的静态数据包将无法访问。

    原始文件可以放在 staticdata 文件夹中

    这些文件仍然需要进行命名空间处理,但再次使用上面的示例:

    .minecraft/staticdata/architecture_extensions/blockgroups/obsidian.json

    只要文件放置在正确的命名空间文件夹中,它们将对数据搜索产生影响。

    ---

    如何在我的模组中使用静态数据?

    首先,依赖静态数据。这需要一个 gradle `modImplementation` 条目和一个 quilt.mod.json `depends` 条目。有关当前版本和 maven/gradle 详细信息,请参阅源代码储存库。

    其次,建议向您的 gradle 添加一个 `include`,以便该库内置在您的 jar 中。由于某种原因,这似乎并不意味着 `modImplementation`,所以您可能需要同时使用这两行。

    第三,在您的 `modInitializer` 中,您可以这样做:

    java
    //您可以在这里使用 quilt-json5或jankson
    Gson gson = new GsonBuilder().create();

    //获取此文件夹及其子文件夹中的所有静态数据
    List dataItems = StaticData.getDataInDirectory(
    new Identifier(MODID, "bees"), //Search for mymod:bees
    true // 是,通过子文件夹进行递归搜索
    );

    for(StaticDataItem dataItem : dataItems) {
    // MyDataObject 是表示您想要的数据的类
    MyDataObject dataObject = gson.fromJson(item.getAsString(), MyDataObject.class);

    // 这仅仅是建议 - 静态数据最有用,如果您有条件地加载数据!
    String requiredMod = dataObject.only_if_present;
    if (requiredMod != null && !requiredMod.isBlank()) {
    // 当指定的模组存在时应该才加载
    if (!QuiltLoader.isModLoaded(requiredMod)) continue;
    }

    //现在您准备好使用数据了!
    doSomethingWithTheData(dataObject);
    }

    假设 `MyDataObject` 类看起来像这样
    java
    public class MyDataObject {
    public String only_if_present;
    //其他数据在公共字段中进入
    }

    如何在我的模组包中使用这个模组?

    这是一个jar中的模组,通常嵌入到其他模组中,而且这种模组的性质使得无需进行配置即可进行模组互操作。因此,只需下载并一起玩这些利用了它的模组,您就可以获得静态数据的基本好处。

    但是,如果您想深入了解,请考虑制作一个静态数据包,并将其与您的模组包一起发行!每个模组对互操作的处理方式都不同,因此请查阅该模组的文档以获取更多信息。

    来自Modrinth

    Static Data 1.1.3+1.21.1

    StaticData-1.1.3+1.21.1.jar下载1.1.3+1.21.1#Release
    展开
    版本: 1.1.3+1.21.1
    支持游戏: 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5
    类型: Fabric
    Release
    下载次数: 42

    Static Data 1.1.1+1.21.1

    StaticData-1.1.1+1.21.1.jar下载1.1.1+1.21.1#Release
    展开
    版本: 1.1.1+1.21.1
    支持游戏: 1.21.1, 1.21.2, 1.21.3, 1.21.4
    类型: Fabric
    Release
    下载次数: 86

    Static Data 1.1.0+1.20.4

    StaticData-1.1.0+1.20.4.jar下载1.1.0+1.20.4#Release
    展开
    版本: 1.1.0+1.20.4
    支持游戏: 1.20.4
    类型: Fabric
    Release
    下载次数: 194

  • 收录

  • 请登录之后再进行评论

    登录
  • Soda任务 图片
  • 偏好设置
  • 主题
  • 帖子间隔 侧栏位置: