/
ServerSettings.java
120 lines (102 loc) · 4.92 KB
/
ServerSettings.java
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
114
115
116
117
118
119
120
package su.plo.voice.client.config;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;
import net.minecraft.client.Minecraft;
import su.plo.voice.client.VoiceClient;
import su.plo.voice.client.gui.VoiceSettingsScreen;
import su.plo.voice.client.render.SphereRenderer;
import su.plo.voice.client.socket.SocketClientUDPQueue;
import su.plo.voice.client.sound.AbstractSoundQueue;
import su.plo.voice.common.entities.MutedEntity;
import su.plo.voice.common.packets.tcp.ConfigPacket;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Data
public class ServerSettings {
private String secret;
private String ip;
private int port;
@Setter(AccessLevel.PRIVATE)
private HashSet<UUID> clients = new HashSet<>();
@Setter(AccessLevel.PRIVATE)
private ConcurrentHashMap<UUID, MutedEntity> muted = new ConcurrentHashMap<>();
@Setter(AccessLevel.PRIVATE)
private List<Integer> distances = new ArrayList<>();
private short distance;
private short defaultDistance;
private short minDistance;
private short maxDistance;
private short maxPriorityDistance;
private short priorityDistance;
private int fadeDivisor;
private int priorityFadeDivisor;
private boolean priority;
private boolean voiceActivationDisabled;
public ServerSettings(String secret, String ip, int port, boolean hasPriority) {
this.secret = secret;
this.ip = ip;
this.port = port;
this.priority = hasPriority;
}
public void update(ConfigPacket config) {
int oldDistance = this.distance;
this.distances = config.getDistances();
Collections.sort(this.distances);
this.minDistance = this.distances.get(0).shortValue();
this.maxDistance = this.distances.get(this.distances.size() - 1).shortValue();
this.maxPriorityDistance = (short) config.getMaxPriorityDistance();
this.maxPriorityDistance = this.maxPriorityDistance == 0 ? Short.MAX_VALUE : this.maxPriorityDistance;
this.fadeDivisor = config.getFadeDivisor();
this.priorityFadeDivisor = config.getPriorityFadeDivisor();
this.voiceActivationDisabled = config.isDisableVoiceActivation();
this.defaultDistance = (short) config.getDefaultDistance();
if(VoiceClient.getClientConfig().getServers().containsKey(ip)) {
ClientConfig.ServerConfig serverConfig = VoiceClient.getClientConfig().getServers().get(ip);
serverConfig.distance.setDefault((int) this.defaultDistance);
serverConfig.priorityDistance.setDefault(Math.min(this.maxPriorityDistance, this.maxDistance * 2));
if(this.distances.contains(serverConfig.distance.get())) {
this.distance = serverConfig.distance.get().shortValue();
} else {
this.distance = (short) config.getDefaultDistance();
serverConfig.distance.set((int) this.distance);
}
if(serverConfig.priorityDistance.get() > this.maxDistance &&
serverConfig.priorityDistance.get() < this.maxPriorityDistance) {
this.priorityDistance = serverConfig.priorityDistance.get().shortValue();
} else {
this.priorityDistance = (short) Math.min(this.maxPriorityDistance, this.maxDistance * 2);
serverConfig.priorityDistance.set((int) this.priorityDistance);
}
} else {
this.distance = (short) config.getDefaultDistance();
this.priorityDistance = (short) Math.min(this.maxPriorityDistance, this.maxDistance * 2);
ClientConfig.ServerConfig serverConfig = new ClientConfig.ServerConfig();
serverConfig.distance.setDefault(config.getDefaultDistance());
serverConfig.priorityDistance.setDefault(Math.min(this.maxPriorityDistance, this.maxDistance * 2));
VoiceClient.getClientConfig().getServers().put(ip, serverConfig);
}
VoiceClient.setSpeaking(false);
VoiceClient.setSpeakingPriority(false);
VoiceClient.recorder.updateSampleRate(config.getSampleRate());
SocketClientUDPQueue.talking.clear();
SocketClientUDPQueue.audioChannels
.values()
.forEach(AbstractSoundQueue::closeAndKill);
SocketClientUDPQueue.audioChannels.clear();
if (VoiceClient.isSettingsOpen()) {
((VoiceSettingsScreen) Minecraft.getInstance().screen).updateGeneralTab();
}
SphereRenderer.getInstance().setRadius(this.distance + 0.5F,
this.distance != oldDistance && oldDistance > 0,
false);
}
public void setDistance(short distance) {
this.distance = distance;
SphereRenderer.getInstance().setRadius(this.distance + 0.5F, false);
}
public void setPriorityDistance(short distance) {
this.priorityDistance = distance;
SphereRenderer.getInstance().setRadius(this.priorityDistance + 0.5F, true);
}
}