-
-
Notifications
You must be signed in to change notification settings - Fork 86
Expand file tree
/
Copy pathSimpleVoiceChatCompat.java
More file actions
113 lines (99 loc) · 5.01 KB
/
Copy pathSimpleVoiceChatCompat.java
File metadata and controls
113 lines (99 loc) · 5.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//? if simple_voice_chat {
package dev.isxander.controlify.compatibility.simplevoicechat;
import de.maxhenkel.voicechat.voice.client.ClientManager;
import de.maxhenkel.voicechat.voice.client.KeyEvents;
import dev.isxander.controlify.api.event.ControlifyEvents;
import dev.isxander.controlify.api.bind.ControlifyBindApi;
import dev.isxander.controlify.api.bind.InputBindingSupplier;
import dev.isxander.controlify.compatibility.simplevoicechat.mixins.KeyEventsAccessor;
import dev.isxander.controlify.controller.ControllerEntity;
import dev.isxander.controlify.utils.MinecraftUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderPipelines;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.Identifier;
public class SimpleVoiceChatCompat {
private static InputBindingSupplier pttHoldSupplier, pttToggleSupplier;
private static InputBindingSupplier whisperHoldSupplier, whisperToggleSupplier;
private static boolean pttDown, whisperDown;
public static void init() {
Identifier muteIcon = registerIcon16x(Identifier.fromNamespaceAndPath("voicechat", "textures/icons/microphone_off.png"));
Identifier pttIcon = registerIcon16x(Identifier.fromNamespaceAndPath("voicechat", "textures/icons/microphone.png"));
Identifier whisperIcon = registerIcon16x(Identifier.fromNamespaceAndPath("voicechat", "textures/icons/microphone_whisper.png"));
Component category = Component.translatable("key.categories.voicechat");
pttHoldSupplier = ControlifyBindApi.get().registerBinding(builder -> builder
.id("voicechat", "ptt_hold")
.category(category)
.addKeyCorrelation(KeyEvents.KEY_PTT));
pttToggleSupplier = ControlifyBindApi.get().registerBinding(builder -> builder
.id("voicechat", "ptt_toggle")
.category(category)
.radialCandidate(pttIcon)
.addKeyCorrelation(KeyEvents.KEY_PTT));
whisperHoldSupplier = ControlifyBindApi.get().registerBinding(builder -> builder
.name(Component.translatable("key.whisper").append(CommonComponents.SPACE).append(Component.translatable("controlify.compat.svc.hold")))
.id("voicechat", "whisper_hold")
.category(category)
.addKeyCorrelation(KeyEvents.KEY_WHISPER));
whisperToggleSupplier = ControlifyBindApi.get().registerBinding(builder -> builder
.name(Component.translatable("key.whisper").append(CommonComponents.SPACE).append(Component.translatable("controlify.compat.svc.toggle")))
.id("voicechat", "whisper_toggle")
.category(category)
.radialCandidate(whisperIcon)
.addKeyCorrelation(KeyEvents.KEY_WHISPER));
ControlifyBindApi.get().registerBinding(builder -> builder
.id("voicechat", "mute_microphone")
.category(category)
.radialCandidate(muteIcon)
.keyEmulation(KeyEvents.KEY_MUTE));
ControlifyEvents.ACTIVE_CONTROLLER_TICKED.register(event -> {
ControllerEntity controller = event.controller();
var pttHold = pttHoldSupplier.on(controller);
var pttToggle = pttToggleSupplier.on(controller);
var whisperHold = whisperHoldSupplier.on(controller);
var whisperToggle = whisperToggleSupplier.on(controller);
if (pttToggle.justPressed()) {
pttDown = !pttDown;
checkConnected();
}
if (whisperToggle.justPressed()) {
whisperDown = !whisperDown;
checkConnected();
}
if (pttHold.justPressed() || whisperHold.justPressed()) {
checkConnected();
}
if (pttHold.digitalNow()) {
pttDown = true;
} else if (pttHold.justReleased()) {
pttDown = false;
}
if (whisperHold.digitalNow()) {
whisperDown = true;
} else if (whisperHold.justReleased()) {
whisperDown = false;
}
controller.dualSense().ifPresent(ds -> {
ds.setMuteLight(ClientManager.getPlayerStateManager().isMuted());
});
});
}
public static boolean isPTTDown() {
return pttDown;
}
public static boolean isWhisperDown() {
return whisperDown;
}
private static void checkConnected() {
if (MinecraftUtil.getOverlay() == null && MinecraftUtil.getScreen() == null) {
((KeyEventsAccessor) ClientManager.instance().getKeyEvents()).invokeCheckConnected();
}
}
private static Identifier registerIcon16x(Identifier location) {
ControlifyBindApi.get().registerRadialIcon(location, ((graphics, x, y, tickDelta) ->
graphics.blit(RenderPipelines.GUI_TEXTURED, location, x, y, 0, 0, 16, 16, 16, 16)));
return location;
}
}
//?}