|
33 | 33 | public class AudioReceiveHandler { |
34 | 34 | public static final int PLAY_RATE10 = 2; |
35 | 35 | @SuppressWarnings("MapOrSetKeyShouldOverrideHashCodeEquals") |
36 | | - public static final Set<SpeakerBlockEntity> CHANNELED_BLOCK_CACHE_C = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); |
| 36 | + private static final Set<SpeakerBlockEntity> CHANNELED_BLOCK_CACHE_C = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); |
37 | 37 |
|
38 | 38 | @SubscribeEvent |
39 | 39 | public static void removeRemovedBlock(ClientTickEvent.Pre event) { |
40 | | - CHANNELED_BLOCK_CACHE_C.removeIf(BlockEntity::isRemoved); |
| 40 | + synchronized (CHANNELED_BLOCK_CACHE_C) { |
| 41 | + CHANNELED_BLOCK_CACHE_C.removeIf(BlockEntity::isRemoved); |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + public static void add(SpeakerBlockEntity blockEntity){ |
| 46 | + synchronized (CHANNELED_BLOCK_CACHE_C) { |
| 47 | + //noinspection MapOrSetKeyShouldOverrideHashCodeEquals |
| 48 | + AudioReceiveHandler.CHANNELED_BLOCK_CACHE_C.add(blockEntity); |
| 49 | + } |
41 | 50 | } |
42 | 51 |
|
43 | 52 | public static void handle(AudioPacket2C packet) { |
@@ -92,16 +101,18 @@ private static void handleInternal(AudioPacket2C packet, Level level) throws Exc |
92 | 101 | return; |
93 | 102 | } |
94 | 103 | var channels = IntArraySet.of(packet.channels); |
95 | | - for (var speaker : CHANNELED_BLOCK_CACHE_C) { |
96 | | - if (!channels.contains(speaker.getChannel())) { |
97 | | - continue; |
98 | | - } |
99 | | - var pos = speaker.getBlockPos(); |
100 | | - if (earPos.distanceToSqr(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5) > 64 * 64) { |
101 | | - return; |
| 104 | + synchronized (CHANNELED_BLOCK_CACHE_C) { |
| 105 | + for (var speaker : CHANNELED_BLOCK_CACHE_C) { |
| 106 | + if (!channels.contains(speaker.getChannel())) { |
| 107 | + continue; |
| 108 | + } |
| 109 | + var pos = speaker.getBlockPos(); |
| 110 | + if (earPos.distanceToSqr(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5) > 64 * 64) { |
| 111 | + continue; |
| 112 | + } |
| 113 | + var audio = getSpeakerAudioAndCheckSampleRate(speaker, 48000); |
| 114 | + audio.push(packet.from, decoded); |
102 | 115 | } |
103 | | - var audio = getSpeakerAudioAndCheckSampleRate(speaker, 48000); |
104 | | - audio.push(packet.from, decoded); |
105 | 116 | } |
106 | 117 | } |
107 | 118 |
|
|
0 commit comments