此 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 内置集成的现状。
注意(1.21+):如果选择走这条路线,你需要让你的模组依赖于特定版本的 Embeddium,并且不允许与任何其他版本一起运行。(不过,你可以使用“可选依赖项”,而不是“必需依赖项/前置”。)当你的 mixin 不可避免地因未来的更改而失效时,这可以防止不必要的支持请求。1.21 以下的 Embeddium 可能会显示警告,但不会强制执行此限制。
显然,这有一个主要缺点,即:你的模组需要更新才能继续使用较新版本的 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")
}