Touhou Little Maid

Touhou Little Maid

3M Downloads

[Bug] 与 Bad Wither No Cookie 模组同时安装将导致女仆声音频率控制失效

tiehu opened this issue · 4 comments

commented

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?

复现步骤

  1. Minecraft 1.20.1-Forg_47.4.6 环境下,同时安装车万女仆 1.3.8-forge+mc1.20.1Bad Wither No Cookie - Reloaded(BWNCR) forge-1.20.1-3.17.2 版本。
  2. 将车万女仆配置文件中的 GlobalMaidSoundFrequency 改为 0,为了方便获得调试信息,可以将BWNCR配置文件中的 debugMode 设为 true
  3. 进入游戏,随便召唤一只女仆,然后在女仆配置界面里将女仆声音频率设为 0%
  4. 稍作等待,可以观察到女仆仍然会播放闲时语音,且频率与100%时无异
  5. 此时观察游戏控制台,可以看到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

commented

非常感谢,我这边看看有什么办法不

之前收到过很多次这种反馈,但是因为一直没找到出问题的模组,从而搁置了

commented

ATM10 4.5版本里面也有这种情况,无法控制女仆的语音频率,但是没有安装BWNCR,遂怀疑类似功能的ESM,但是卸载ESM后还是无法控制语音频率,只能强行删除数据包中sounds目录

commented

ATM10 4.5版本里面也有这种情况,无法控制女仆的语音频率,但是没有安装BWNCR,遂怀疑类似功能的ESM,但是卸载ESM后还是无法控制语音频率,只能强行删除数据包中sounds目录

应该不是ESM的问题,因为我最开始发现这个问题的包里也有ESM,并且已经确认问题不是由它引起的,但不排除高版本ESM逻辑发生了变动
可以参考一下上面给出的BWNCR代码,理论上用了类似实现方式的模组都可能引发冲突,如果找不到可以尝试通过二分排查法(模组分半测试)的方式来定位引发冲突的mod,但是会比较耗时间