此 wiki 页面提供了有关如何在模组开发环境中使用 Embeddium 的信息,以及有关如何以尽可能兼容的方式编写任何内置集成的一些指导。

如果你只是在寻找 Maven 坐标(coordinates),可以点目录跳到 Maven 信息。但是,如果你不只是想测试你的模组如何与 Embeddium 配合使用,更是希望修补 Embeddium 或调用其代码,建议仔细阅读以下信息。

如何添加内置集成

大多数模组要达成目的时,倾向于在需要时 mixin(混入)到 Embeddium 中,或仅调用公有(public)方法(不一定被选为 API)来添加内置集成。这是个坏主意,主要原因有两个:

  • 模组内置集成通常做得很烂,并且通常会有更通用的方法,根本不需要模组特意与 Embeddium 集成。

  • 我们不保证内部代码保持稳定。(不存在适当 API 的情况目前也有例外,因为 API 仍处于界定中。)

我们建议模组遵循以下方法之一。如果不确定最好的使用方法是什么,请在 Discord 上与我们联系 - 我们不会咬人。:)

方法 1:使用或添加平台 API

(Neo)Forge/Fabric API 非常广泛,并且允许对渲染进行相当多的控制。一般来说,修改 Embeddium 渲染器的模组,也都需要自行修补原版渲染器才能达成目的。更好的解决方案是针对该功能为你的平台添加一个标准 API,然后使用该 API,而不是自行给原版编写自定义 mixin。然后,Embeddium 可以原生支持该 API、并且这种支持可以被其他模组共享,而不是仅仅根据你的特定模组量身定制。这使得模组生态系统对每个人来说都更好。

NeoForge PR #642 就是一个如此实践的例子。通过此 PR,NeoForge 获得了一种将自定义几何图形附加到区块部分(子区块)身上的标准方法,允许沉浸工程的线缆可以开箱即用,使用 Embeddium 渲染,而无需任何模组编写特定的内置集成代码。

方法 2:使用或添加 Embeddium API

如果你的用例太小众,不适合现有(或新)平台 API,那么下一个最佳解决方案是向 Embeddium 添加 API 以获得所需的功能。这比直接 mixin 更好,因为我们可以确保 API 将无限期地继续工作,即使我们进行其他代码更改也是如此。它在我们的渲染器和其他模组之间提供了明确定义的契约。

我们当前 API 的一些示例可以在此处找到。如果/当有需要时,将添加更多内容。

方法 3:直接打补丁 + 版本锁

这种方法应该被视为最终手段,因为它最有可能引入兼容性问题,并且我们不太可能为其提供支持。

如果确实没有办法使用平台或 Embeddium API 来实现你的用例,最后的选择是直接修补 Embeddium 的渲染器以达成你的目的。这是 Minecraft 1.20.1 及更早版本上许多 Sodium/Rubidium/Embeddium 内置集成的现状。

注意:如果你选择走这条路线,我们会要求你让(在未来的版本中,将在运行时验证)你的模组依赖于特定版本的 Embeddium,并且不允许与任何其他版本一起运行。当你的 mixin 不可避免地因未来的更改而失效时,这可以防止不必要的支持请求。

显然,这有一个主要缺点,即:你的模组需要更新才能继续使用较新版本的 Embeddium。不过,这种方法更像是一种逃生舱口:它对于我们不再支持的 Minecraft 版本应该具有特别的价值。

Maven信息

非常感谢 Jared 在他的 Maven 存储库上托管 Embeddium 构建。可以通过在 Gradle 构建脚本中添加以下内容来访问这些构建。你可以在此处找到所有已发布的 Maven 标识符(identifier)和版本(version)的列表;以下示例适用于 1.20.1 和 1.20.2。

repositories {
    maven {
        url "https://maven.blamejared.com"
    }
}

dependencies {
    // Example for ForgeGradle
    implementation fg.deobf("org.embeddedt:embeddium-1.20.1:0.2.11-git.23aedfb+mc1.20.1")
    // Example for Architectury Loom
    modImplementation("org.embeddedt:embeddium-1.20.1:0.2.11-git.23aedfb+mc1.20.1")
    // Example for NeoGradle 7+
    implementation("org.embeddedt:embeddium-1.20.2:0.2.11-git.9f6321d+mc1.20.2")
}