1
1
package dynamic_fps .impl .mixin ;
2
2
3
3
import java .util .Map ;
4
+ import java .util .concurrent .ConcurrentHashMap ;
4
5
5
6
import dynamic_fps .impl .feature .volume .SmoothVolumeHandler ;
6
7
import net .minecraft .client .Minecraft ;
7
8
import org .jetbrains .annotations .Nullable ;
8
- import org .spongepowered .asm .mixin .Final ;
9
- import org .spongepowered .asm .mixin .Mixin ;
10
- import org .spongepowered .asm .mixin .Shadow ;
11
- import org .spongepowered .asm .mixin .Unique ;
9
+ import org .spongepowered .asm .mixin .*;
12
10
import org .spongepowered .asm .mixin .injection .At ;
13
11
import org .spongepowered .asm .mixin .injection .Inject ;
14
12
import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
@@ -39,6 +37,7 @@ public class SoundEngineMixin implements DuckSoundEngine {
39
37
40
38
@ Shadow
41
39
@ Final
40
+ @ Mutable
42
41
private Map <SoundInstance , ChannelAccess .ChannelHandle > instanceToChannel ;
43
42
44
43
@ Shadow
@@ -49,6 +48,13 @@ private float calculateVolume(SoundInstance instance) {
49
48
@ Unique
50
49
private static final Minecraft dynamic_fps$minecraft = Minecraft .getInstance ();
51
50
51
+ @ Inject (method = "<init>" , at = @ At ("TAIL" ))
52
+ private void init (CallbackInfo callbackInfo ) {
53
+ // Fix crash from another unknown mod mutating this
54
+ // While we're iterating over it in the `dynamic_fps$updateVolume` method
55
+ this .instanceToChannel = new ConcurrentHashMap <>(this .instanceToChannel );
56
+ }
57
+
52
58
@ Override
53
59
public void dynamic_fps$updateVolume (SoundSource source ) {
54
60
if (!this .loaded ) {
0 commit comments