MC百科社群

标题: 一个相当疯狂的想法:多版本polyfill [打印本页]

作者: QQ酱802950    时间: 2024-2-21 20:51
标题: 一个相当疯狂的想法:多版本polyfill
迁移某些mod的时候发现主要就是改名。这个类改了个包名,那个方法改了个名,于是mod就得跟着改。
在java中这种更改太细,难以拆分出来,就导致一些mod自身的版本只能被MC版本拉着走,低MC版本事实上是能兼容高mod版本的功能的,但是没人有时间移植。
然而,Kotlin中有“类型别名”和“扩展方法”,依赖这两个语言特性,就能将这些“改名”剥离出来,让功能代码无需改变即可适配不同版本。
当然,这种方法和“抽象层”还是有区别的:“抽象层”是要保证对所有MC版本都有完全相同的接口可用,polyfill则是秉持一个“能用就行”,MC没改就不用fill。
而且polyfill能达到的仅是“源码兼容”,因为“类型别名”和“扩展方法”都是Kotlin的编译器特性。实现的并不是“一个jar通吃所有版本”,而是“一套核心代码对一系列MC版本可以编译”。具体来说是核心代码单放一个文件夹,然后符号链接到各个版本的文件夹中。

用了个简单mod试验了一下,感觉还行:https://github.com/TsXor/Better-Durability/tree/allver







欢迎光临 MC百科社群 (https://bbs.mcmod.cn/) MC百科|最大的MineCraft中文模组百科