[Bug] 与 Bad Wither No Cookie 模组同时安装将导致女仆声音频率控制失效
tiehu opened this issue · 4 comments
Minecraft Version
- 1.12.2 (End of support)
- 1.16.5 (End of support)
- 1.18.2 (End of support)
- 1.19.2 (End of support)
- 1.20/1.20.1
- 1.21/1.21.1
What happened?
复现步骤
- 在
Minecraft 1.20.1-Forg_47.4.6环境下,同时安装车万女仆1.3.8-forge+mc1.20.1及 Bad Wither No Cookie - Reloaded(BWNCR)forge-1.20.1-3.17.2版本。 - 将车万女仆配置文件中的
GlobalMaidSoundFrequency改为0,为了方便获得调试信息,可以将BWNCR配置文件中的debugMode设为true - 进入游戏,随便召唤一只女仆,然后在女仆配置界面里将女仆声音频率设为
0% - 稍作等待,可以观察到女仆仍然会播放闲时语音,且频率与100%时无异
- 此时观察游戏控制台,可以看到BWNCR的调试输出:
[Render thread/INFO] [Bad Wither No Cookie Reloaded/]: Intercepted maid.mode.idle
这代表BWNCR拦截了女仆的闲时音频事件
问题分析
粗略地扫了一眼本模组的 MaidSoundFreqEvent 类,看起来播放频率是通过拦截 PlaySoundEvent 事件,然后做随机判断后再将音效设置为 null 来实现的
然而 BWNCR 的 SoundEventHandler 类中是这样实现的:
ProxyPlaySoundEvent proxy = SoundHandler.onPlaySound(new ProxyPlaySoundEvent(event.getName(), event.getOriginalSound()));
event.setSound(proxy.getSound());可以看到,它无条件地将事件音效替换为 proxy.getSound(),覆盖了本模组的取消逻辑,直接导致了频率控制失效
补充说明
其实我感觉这个问题更应该由 BWNCR 来修复,所以如果开发团队认为这个问题不适合在这一侧解决的话,我会尝试去 BWNCR 的仓库再发一个 Issue
只不过那边看起来已经很久没更新过了,感觉希望不大......
无论如何,排查这个问题花了我很多时间,希望这个Issue能帮到其他遇到相同问题的玩家吧
Relevant log output
Contact Details
No response
ATM10 4.5版本里面也有这种情况,无法控制女仆的语音频率,但是没有安装BWNCR,遂怀疑类似功能的ESM,但是卸载ESM后还是无法控制语音频率,只能强行删除数据包中sounds目录
ATM10 4.5版本里面也有这种情况,无法控制女仆的语音频率,但是没有安装BWNCR,遂怀疑类似功能的ESM,但是卸载ESM后还是无法控制语音频率,只能强行删除数据包中sounds目录
应该不是ESM的问题,因为我最开始发现这个问题的包里也有ESM,并且已经确认问题不是由它引起的,但不排除高版本ESM逻辑发生了变动
可以参考一下上面给出的BWNCR代码,理论上用了类似实现方式的模组都可能引发冲突,如果找不到可以尝试通过二分排查法(模组分半测试)的方式来定位引发冲突的mod,但是会比较耗时间