
NeoBackports
将各种Neoforge / 1.21.1的功能向后移植到1.20.1,以便在不同版本之间更容易维护
一个用于在 Forge 1.20.1 上使用 Neoforge 1.21.1 特性和方法的库。
此模组旨在作为其他模组的库文件使用。目前,唯一独立的特性是 1.21 风格的模糊化 GUI 背景。手动安装比打包版本更新的版本仅用于修复漏洞。
当前特性包括:
- 数据映射
- 数据组件
- 数据附加
- 流编解码器
- 模糊化 GUI 背景(通过内置资源包启用)
- DeferredHolders(及其子类型)
- 1.21.1 风格网络功能
- 使用编解码器的配方序列化器
- 方块的 useItemOn 和 useWithoutItem 方法
……以及大量便捷接口扩展
问答
- 为什么要反向移植到 1.20.1?帮助开发者向上移植而不是向下移植不是更有意义吗?
- 制作一个用于向前移植的库从根本上来说是毫无意义的,因为它会带来技术债务,并且每个新版本都需要移植该库。开发者永远无法适应新特性,即使这些特性客观上更好,并且会导致模组更卡顿、更多漏洞。采用这种方式意味着我们既能满足 1.20 版本用户的需求,又能推动他们向新版本迁移。
- 这听起来像是一种 Synitra 连接器类型的模组,它能这样工作吗?
- 理论上,如果我投入大量精力,可能能让非常小的 1.21.1 模组在 1.20.1 上运行,但支持会极其有限,因此不值得花时间。简而言之:不能
安装说明
由于此库使用接口注入,因此需要从 ForgeGradle 切换到 ModDevGradle Legacy gradle 插件。相关文档在此,可用的 MDK 在此
在 build.gradle 中:
repositories {
// 你可能有的其他仓库...
maven {
url = 'https://nikdo53.github.io/NeoBackports'
}
}
dependencies {
// 你可能有的其他依赖项...
jarJar(modImplementation("net.nikdo53:NeoBackports:${neobackports_version}"))
interfaceInjectionData("net.nikdo53:NeoBackports:${neobackports_version}")
}
在 gradle.properties 中:
# 将其设置为最新版本
neobackports_version=1.2.2
技术差异
功能并非完全一对一移植(由于版本间底层差异),但应足够相似,使得大多数模组无需重大差异即可直接运行。
类名
为了区分原始 Forge/原版类与移植类,移植类会添加 "neo" 后缀,例如:
- SmithingRecipe -> SmithingRecipeNeo
- PacketDistributor -> PacketDistributorNeo
- DeferredRegister -> DeferredRegisterTyped(这个不同因为我忘了)
数据组件/附加
与 1.21.1 不同,这些只是对现有功能(分别为物品 NBT 和功能能力)的巧妙封装,意味着未使用此 API 的其他模组应能像往常一样访问它们。
数据映射
这些(经许可)直接从 Neoforge 代码移植而来,差异极小。请注意,用于握手已知数据映射的登录包已被移除,非强制性的数据映射通常不受支持。我未来可能会重新考虑这个问题,但由于此模组需要在客户端和服务器上都安装,所以可能不是很有用(而且 1.20.1 的登录包很奇怪)。
流编解码器
ByteBuf 泛型已被移除,因为所有内容都使用 FriendlyByteBuf:
StreamCodec<RegistryFriendlyByteBuf, SomeClass> -> StreamCodec
图标是一只藏狐,它看起来很生气,因为被迫使用 Forge
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。