diff --git a/CPM-PV-Compat/gradle.properties b/CPM-PV-Compat/gradle.properties index 7616952a..684cb2f3 100644 --- a/CPM-PV-Compat/gradle.properties +++ b/CPM-PV-Compat/gradle.properties @@ -1,7 +1,7 @@ org.gradle.jvmargs=-Xmx4G org.gradle.daemon=false -mod_version=1.1.1 +mod_version=1.1.2 # CPM versions cpm_api_version=0.6.26 @@ -18,4 +18,4 @@ maven_name=cpmpvc neo_version=21.1.131 neo_minecraft_version=1.21 -neo_java_version=21 \ No newline at end of file +neo_java_version=21 diff --git a/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMAddon.java b/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMAddon.java index ff6d3562..57e3e703 100644 --- a/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMAddon.java +++ b/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMAddon.java @@ -3,15 +3,15 @@ import java.util.Optional; import java.util.UUID; -import com.google.inject.Inject; - import com.tom.cpm.shared.MinecraftClientAccess; import su.plo.voice.api.addon.AddonInitializer; import su.plo.voice.api.addon.AddonLoaderScope; import su.plo.voice.api.addon.ClientAddonsLoader; +import su.plo.voice.api.addon.InjectPlasmoVoice; import su.plo.voice.api.addon.annotation.Addon; import su.plo.voice.api.client.PlasmoVoiceClient; +import su.plo.voice.api.client.audio.capture.ClientActivation; import su.plo.voice.api.client.connection.ServerConnection; import su.plo.voice.api.client.event.audio.capture.AudioCaptureProcessedEvent; import su.plo.voice.api.client.event.audio.source.AudioSourceWriteEvent; @@ -19,14 +19,14 @@ import su.plo.voice.client.audio.source.ClientPlayerSource; import su.plo.voice.proto.data.player.VoicePlayerInfo; -@Addon(id = CPMPVC.MOD_ID, scope = AddonLoaderScope.CLIENT, version = "2.1.1", authors = "tom5454") +@Addon(id = CPMPVC.MOD_ID, scope = AddonLoaderScope.CLIENT, version = "2.1.2", authors = "tom5454") public class CPMAddon implements AddonInitializer { public static final CPMAddon INSTANCE = new CPMAddon(); private CPMAddon() { } - @Inject + @InjectPlasmoVoice private PlasmoVoiceClient voiceClient; @Override @@ -40,7 +40,13 @@ public static void init() { @EventSubscribe public void onCaptureProcessed(AudioCaptureProcessedEvent event) { - CPMPVC.handle(event.getProcessed().getMono()); + // AudioCaptureProcessedEvent triggers even when audio is not actually sent to the server + // so we have to check if any activation is active right now to see if player is speaking + boolean isSpeaking = voiceClient.getActivationManager() + .getActivations() + .stream().anyMatch(ClientActivation::isActive); + + CPMPVC.handle(isSpeaking ? event.getProcessed().getMono() : null); } @EventSubscribe @@ -56,11 +62,21 @@ public boolean isMuted(UUID player) { if (!connection.isPresent()) return false; Optional playerInfo = connection.get().getPlayerById(player); - if (!playerInfo.isPresent())return false; - if (playerInfo.get().isMuted() || playerInfo.get().isMicrophoneMuted())return true; + if (!playerInfo.isPresent()) return false; + + boolean isMutedOnServer = playerInfo.get().isMuted(); + boolean inMutedOnClient = voiceClient.getConfig() + .getVoice() + .getVolumes() + .getMute("source_" + player) + .value(); + + if (isMutedOnServer || inMutedOnClient) return true; + if (MinecraftClientAccess.get().getCurrentClientPlayer().getUUID().equals(player)) { return voiceClient.getConfig().getVoice().getMicrophoneDisabled().value(); } + return false; } } diff --git a/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMPVC.java b/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMPVC.java index 863eaa6b..2cd10c86 100644 --- a/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMPVC.java +++ b/CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMPVC.java @@ -10,14 +10,12 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.tom.cpm.api.IClientAPI.MessageSender; import com.tom.cpm.shared.MinecraftClientAccess; public class CPMPVC { public static final String MOD_ID = "cpmpvc"; public static final Logger LOGGER = LogManager.getLogger("CPM-PV Compat"); private static final LoadingCache voiceLevelsCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.SECONDS).build(CacheLoader.from(() -> 0f)); - public static MessageSender mutedSender; public static float get(UUID uuid) { try {