
新回归移植
将各种Neoforge / 1.21.1特性反向移植到1.20.1,以便于在版本间进行维护。
一个用于在 Forge 1.20.1 上使用 NeoForge 1.21.1 特性与方法的库
本模组旨在作为库被其他模组一同包含使用。目前,唯一的独立功能是模糊的 1.21 风格 GUI 背景。手动安装比打包版本更新的版本仅对修复 bug 有用
当前功能包括:
- 数据映射(Datamaps)
- 数据组件(Data components)
- 数据附加(Data attachments)
- 流编解码器(Stream codecs)
- 模糊 GUI 背景(通过内置资源包启用)
- DeferredHolders(及其子类型)
- 1.21.1 风格网络
- 带编解码器的配方序列化器
- 方块的 useItemOn 和 useWithoutItem 方法
……以及大量便捷的接口扩展
问答
- 为什么要向后移植到 1.20.1?帮助开发者向上移植而不是向下移植不是更合理吗?
- 为前向移植做一个库根本毫无意义,因为它会带来技术债务,并且每出一个新版本都需要把库向上移植。开发者永远不会习惯新特性,即使它们客观上更好,还会做出更卡顿、更多 bug 的模组。这样做的方式让我们既能满足 1.20 用户群,同时又能推动他们走向更新的版本
- 这听起来像 Sinytra Connector 类型的模组,它能那样工作吗?
- 理论上,如果我投入大量工作,它可以让非常小的 1.21.1 模组在 1.20.1 上运行,但支持会极其有限,所以不值得花时间。TLDR:不行
安装说明
由于本库使用了接口注入,因此必须从 ForgeGradle 切换到 ModDevGradle Legacy Gradle 插件。文档见此处,可用的 MDK 见此处
在 build.gradle 中:
repositories {
// Some other repositories you might have...maven {
url = '<a href="" target="_blank" rel="nofollow">https://nikdo53.github.io'</a>
}
}
dependencies {
// Some other dependencies you might have...
jarJar(modImplementation("net.nikdo53:NeoBackports:${neobackports_version}"))
interfaceInjectionData("net.nikdo53:NeoBackports:${neobackports_version}")
}
在 gradle.properties 中:
# Set to whatever is latest
neobackports_version=1.4.1
技术差异
特性并非 1 比 1 向后移植(由于版本之间的后端差异),但应该足够相似,使大多数模组无需重大改动即可正常工作
类名
为了区分原始 Forge/原版类和向后移植的类,向后移植的类会加上“neo”后缀,例如:
- SmithingRecipe -> SmithingRecipeNeo
- PacketDistributor -> PacketDistributorNeo
- DeferredRegister -> DeferredRegisterTyped(这个不一样,因为我忘了)
数据组件/附加
与 1.21.1 不同,这些只是对现有特性(分别为物品 NBT 和能力)的巧妙包装,这意味着不使用此 API 的其他模组应该能够像平常一样访问它们。
数据映射(Datamaps)
这些已经(经许可)直接从 NeoForge 的代码移植过来,差异极小。请注意,用于握手已知数据映射的登录数据包已被移除,并且通常不支持非强制性数据映射。我将来可能会重新处理这个问题,但由于本模组在客户端和服务端都必需,它可能不太有用(而且 1.20.1 的登录数据包很奇怪)
流编解码器
ByteBuf 泛型已被移除,因为所有内容都使用 FriendlyByteBuf:
StreamCodec<RegistryFriendlyByteBuf, SomeClass> -> StreamCodec<SomeClass>
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。