= 创作分享 =
编程开发
注入Mixin阶段前要如何使用配置文件?
仙勾子

注入Mixin阶段前要如何使用配置文件?

仙勾子 于 2024-1-1 10:59 ( 10月前 ) [复制链接] [只看楼主] [打印]
797 5
众所周知,模组注入Mixin是在所有其他加载操作之前进行的,也就是说注入Mixin的时候,模组由Forge管理的配置文件还没加载,无法读取配置选项从而决定是否注入某个Mixin。

看了一下使用Mixin的模组是怎么做的,发现铷、镭等模组自己实现了一个配置文件加载,可以不用forge的方式,
所以我尝试使用nightconfig在Mixin注入阶段时加载,结果这玩意不好用,很容易在加载配置时崩游戏,
比如我要求一个float配置选项,结果它从配置文件里读取出一个Double或Integer,赋值给float会直接抛出类型转换Exception让游戏崩溃,
如果用try catch块处理,还是会让整个配置加载强行中断,从而无法加载后面的配置选项。

所以有什么nightconfig的替代品,或者能提前加载forge config?
发表于 2024-1-1 10:59:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 5 条回复!
狂想ThePotato
你读出来的Double和Integer当然不能直接跟原始数据类型的float转换,用Double#floatValue或者Integer#floatValue 方法试试?
مكتوب
发表于 2024-1-2 11:32:15 | 只看该作者

回复 | 举报

QQ酱343399
Kasualix 发表于 2024-1-2 11:32
你读出来的Double和Integer当然不能直接跟原始数据类型的float转换,用Double#floatValue或者Integer#float ...

不是,我当然用了floatValue()啊,但一旦配置文件写入了无法转换的值,比如我写了
int cost = ((Number)config.get("cost")).intValue();
如果玩家在配置文件里写的是Number类型,那当然可以转换,但如果他写了个字符串就直接崩,抛出ClassCastException,用try catch包裹处理都没用,会直接强行退出配置文件加载,游戏是没崩溃但因为没有配置整个模组都会加载失败。
如果弄个检查instanceof String也会遇到特殊情况,比如玩家在配置文件里乱写什么cost=habg$(w),直接没办法处理导致加载失败,反正乱七八糟的情况太多,很乱不好写,还得我再包装一层检查一遍。。。
发表于 2024-1-4 19:33:15 | 只看该作者

回复 | 举报

狂想ThePotato
本帖最后由 Kasualix 于 2024-1-4 19:45 编辑
QQ酱343399 发表于 2024-1-4 19:33
不是,我当然用了floatValue()啊,但一旦配置文件写入了无法转换的值,比如我写了
int cost = ((Number)c ...

玩家写string那不是玩家的问题吗?你作为开发者就模组主类里直接检测配置文件是否正常加载然后看情况抛个异常,或者直接强制要求全写string然后手动Double#parseDouble一下不就好了
مكتوب
发表于 2024-1-4 19:43:07 | 只看该作者

回复 | 举报

QQ酱343399
Kasualix 发表于 2024-1-4 19:43
玩家写string那不是玩家的问题吗?你作为开发者就模组主类里直接检测配置文件是否正常加载然后看情况抛个 ...

主要是我想在配置文件出现错误直接重置配置文件 ,或者把出现错误的配置选项重置为默认值
发表于 2024-1-4 19:45:51 | 只看该作者

回复 | 举报

临幸临幸你的mod
你可以使用事件监听设计模式,即在每个mixin方法里触发事件(写触发器),然后让配置文件去决定监听器的逻辑。这样你就不需要非得在mixin加载之前读取配置。
发表于 2024-10-24 11:39:57 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表