[Feature] Settings GUI
ZekerZhayard opened this issue · 2 comments
由来
目前大多数存在设置需求的 Mod 都拥有游戏内图形化的设置界面,但是 CustomSkinLoader 由于兼容性原因不提供相关的界面,无疑增加了新手修改配置的门槛。尽管现在已经有 @g-plane 制作的图形化设置网站 https://mc-csl.netlify.app/ ,但是仍然存在需要手动导入并导出配置文件、修改后需要重启游戏等缺陷,并且可能由于宣传问题,不少人不知道有这个地址。因此制作一个游戏内的设置界面迫在眉睫。
想法
- 由于 CustomSkinLoader 本体需要维持相当恐怖的兼容性,因此直接把设置界面实现在本体中有极大困难,因此需要重新设计一套接口,本体提供一个默认实现,功能特性基本不变,另外再新写一个只兼容单个 Minecraft 版本的 Mod 实现这套接口以支持设置界面。
- 这套接口有一个可参考的例子
IFMLPlatform
,此接口设计时 1.7.10 在国内仍然拥有一定热度,但是由于 1.8 之后支持双层皮肤,而且 Forge 1.8 的 FML 部分包名全部改变,所以 CustomSkinLoader 本体不大可能再次兼容 1.7.10,因此将本体调用 FML 的部分抽象出来形成一个接口,再由本体提供 Forge 1.8~1.12.2 的实现,然后由 CompatibilityLayerForCustomSkinLoader 提供 Forge 1.7.10 的实现,以达到 CustomSkinLoader 兼容 1.7.10 的目的。 - 此配置接口与
IFMLPlatform
有些许不同,IFMLPlatform
不允许同时存在两个或以上的有效实现(通过IFMLPlatform#init
控制,存在的理由是显然的),而配置接口不同,当本体更新且新增配置项时,如果配套 Mod 不及时更新,或玩家使用了旧版的配套 Mod ,可能会出现AbstractMethodError
之类的,因此想法是给所有实现类进行优先级排序,当更高级的配置接口不存在方法实现时,能调用低级的实现方法。 - 根据 cpw 对 Forge 使用率的统计,目前 Forge 1.12.x 和 1.16.x 的使用量占到了 68%,因此这个扩展 Mod 目前仅打算基于 Forge-1.12.2,Forge-1.16.5,Fabric-1.16.5 实现(未来可能会实现基于 Forge-1.7.10 和 Forge-1.8.9 的版本)。
- 由于 CustomSkinLoader 使用 Json 作为配置文件格式,Forge 本体提供的配置文件工具类不能很好地适配,并且 Fabric API 没有提供配置文件相关的 API,因此 Forge/Fabric-1.16.5 可能会基于 Cloth Config API 实现,Forge-1.12.2 可能会基于 Configuration 实现。