Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CPM-PV-Compat/gradle.properties
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -18,4 +18,4 @@ maven_name=cpmpvc

neo_version=21.1.131
neo_minecraft_version=1.21
neo_java_version=21
neo_java_version=21
30 changes: 23 additions & 7 deletions CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMAddon.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,30 @@
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;
import su.plo.voice.api.event.EventSubscribe;
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
Expand All @@ -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
Expand All @@ -56,11 +62,21 @@ public boolean isMuted(UUID player) {
if (!connection.isPresent()) return false;

Optional<VoicePlayerInfo> 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;
}
}
2 changes: 0 additions & 2 deletions CPM-PV-Compat/src/shared/java/com/tom/cpmpvc/CPMPVC.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<UUID, Float> voiceLevelsCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.SECONDS).build(CacheLoader.from(() -> 0f));
public static MessageSender mutedSender;

public static float get(UUID uuid) {
try {
Expand Down