Skip to content

Commit c1597bb

Browse files
authored
Merge pull request #4 from AvionBlock/dev
Update v1.3.0.4
2 parents 43d4309 + 7a2b38c commit c1597bb

File tree

27 files changed

+1108
-559
lines changed

27 files changed

+1108
-559
lines changed

.github/workflows/release.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
run: ./gradlew build -PVERSION="${{ env.VERSION }}"
3535

3636
- name: Archive artifacts
37-
uses: actions/upload-artifact@v3
37+
uses: actions/upload-artifact@v4
3838
with:
3939
name: geyser-voice-artifact
4040
path: build/libs/
@@ -52,7 +52,7 @@ jobs:
5252
uses: actions/checkout@v2
5353

5454
- name: Download artifacts
55-
uses: actions/download-artifact@v3
55+
uses: actions/download-artifact@v4
5656
with:
5757
name: geyser-voice-artifact
5858
path: build/libs/
@@ -78,3 +78,19 @@ jobs:
7878
build/libs/GeyserVoice-*.jar
7979
env:
8080
GITHUB_REPOSITORY: AvionBlock/GeyserVoice
81+
82+
- name: Create Modrinth release
83+
if: github.event.inputs.status == 'stable'
84+
uses: dsx137/modrinth-release-action@main
85+
env:
86+
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
87+
with:
88+
name: GeyserVoice ${{ github.event.inputs.tag }}
89+
project_id: WtPu56Wa
90+
loaders: paper, spigot, bukkit, purpur, velocity, bungeecord
91+
game_versions: 1.20.2:1.21.4
92+
version_number: ${{ github.event.inputs.tag }}
93+
featured: github.event.inputs.status == 'stable'
94+
version_type: ${{ github.event.inputs.status == 'stable' && 'release' || 'beta' }}
95+
files: |
96+
./build/libs/GeyserVoice-*.jar

src/main/java/io/greitan/avion/bungeecord/GeyserVoice.java

Lines changed: 148 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import net.md_5.bungee.config.ConfigurationProvider;
88
import net.md_5.bungee.config.Configuration;
99
import net.md_5.bungee.config.YamlConfiguration;
10+
import net.md_5.bungee.api.ChatColor;
11+
import net.md_5.bungee.api.chat.ComponentBuilder;
1012
import net.md_5.bungee.api.connection.ProxiedPlayer;
1113

1214
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -97,7 +99,8 @@ public void reload() {
9799
port = getConfig().getInt("config.port");
98100
serverKey = getConfig().getString("config.server-key");
99101

100-
isConnected = connect(true);
102+
if (getConfig().getBoolean("config.auto-reconnect"))
103+
isConnected = reconnect(true);
101104

102105
int positionTaskInterval = getConfig().getInt("config.voice.position-task-interval", 1);
103106
taskRunner.cancel();
@@ -112,26 +115,52 @@ public void reload() {
112115
updateSettings(proximityDistance, proximityToggle, voiceEffects);
113116
}
114117

118+
/**
119+
* Connects to a new server.
120+
*
121+
* @param host The host to connect to.
122+
* @param port The port to connect to.
123+
* @param serverKey The server key.
124+
* @return True if connected successfully, otherwise false.
125+
*/
126+
public Boolean connect(String host, int port, String serverKey) {
127+
if (Objects.nonNull(host) && Objects.nonNull(serverKey)) {
128+
getConfig().set("config.host", host);
129+
getConfig().set("config.port", port);
130+
getConfig().set("config.server-key", serverKey);
131+
saveConfig();
132+
reloadConfig();
133+
reload();
134+
135+
return isConnected;
136+
} else {
137+
Logger.warn(Language.getMessage(lang, "plugin-connect-invalid-data"));
138+
return false;
139+
}
140+
}
141+
115142
/**
116143
* Connects to the server.
117144
*
118145
* @param force Indicates whether to force a connection.
119146
* @return True if connected successfully, otherwise false.
120147
*/
121-
public Boolean connect(Boolean force) {
148+
public Boolean reconnect(Boolean force) {
122149
if (isConnected && !force)
123150
return true;
124-
isConnected = false;
151+
if (isConnected) {
152+
disconnect("Reconnecting to another server.");
153+
}
125154

126155
if (Objects.nonNull(host) && Objects.nonNull(serverKey)) {
127156
String link = "http://" + host + ":" + port;
128157
String Token = network.sendLoginRequest(link, serverKey);
129158
if (Objects.nonNull(Token)) {
130-
Logger.info(Language.getMessage(lang, "plugin-connect-connect"));
159+
Logger.info(Language.getMessage(lang, "plugin-connect-connected"));
131160
isConnected = true;
132161
token = Token;
133162
} else {
134-
Logger.warn(Language.getMessage(lang, "plugin-connect-disconnect"));
163+
Logger.warn(Language.getMessage(lang, "plugin-connect-failed"));
135164
}
136165
return isConnected;
137166
} else {
@@ -140,6 +169,39 @@ public Boolean connect(Boolean force) {
140169
}
141170
}
142171

172+
/**
173+
* Disconnects from the server.
174+
*
175+
* @param reason The reason why we disconnected
176+
*/
177+
public void disconnect(String reason) {
178+
if (!isConnected)
179+
return;
180+
181+
if (Objects.nonNull(host) && Objects.nonNull(serverKey)) {
182+
String link = "http://" + host + ":" + port;
183+
network.sendLogoutRequest(link, token);
184+
isConnected = false;
185+
186+
String disconnectMessage = Language.getMessage(lang, "plugin-connection-disconnect").replace("$reason", reason);
187+
Logger.info(disconnectMessage);
188+
189+
boolean sendVoipDisconnectMessage = getConfig().getBoolean("config.voice.send-voip-disconnect-message");
190+
if (sendVoipDisconnectMessage) {
191+
getProxy().broadcast(new ComponentBuilder(disconnectMessage).color(ChatColor.YELLOW).create());
192+
}
193+
} else {
194+
Logger.warn(Language.getMessage(lang, "plugin-connect-invalid-data"));
195+
}
196+
}
197+
198+
/**
199+
* Disconnects from the server.
200+
*/
201+
public void disconnect() {
202+
disconnect("N.A.");
203+
}
204+
143205
/**
144206
* Binds a player to the voice chat server.
145207
*
@@ -150,6 +212,11 @@ public Boolean connect(Boolean force) {
150212
public Boolean bind(int playerKey, ProxiedPlayer player, int tries) {
151213
if (!isConnected || Objects.isNull(host) || Objects.isNull(serverKey))
152214
return false;
215+
216+
if (playerBinds.containsKey(player.getName()) && playerBinds.get(player.getName())) {
217+
return true;
218+
}
219+
153220
String link = "http://" + host + ":" + port;
154221

155222
getConfig().set("config.players." + player.getName(), playerKey);
@@ -162,13 +229,28 @@ public Boolean bind(int playerKey, ProxiedPlayer player, int tries) {
162229
if (result == "SUCCESS") {
163230
playerBinds.put(player.getName(), true);
164231
messageHandler.sendPlayerBindSync(player);
165-
return true;
166-
} else {
167-
if (result == "Invalid Token!" && tries == 0) {
168-
Logger.info("Invalid Token detected, reconnecting...");
169-
isConnected = connect(true);
170-
return bind(playerKey, player, 1);
232+
233+
Logger.info(Language.getMessage(lang, "player-binded").replace("$player",player.getName()));
234+
235+
boolean sendBindedMessage = getConfig().getBoolean("config.voice.send-binded-message");
236+
if (sendBindedMessage) {
237+
getProxy().broadcast(
238+
new ComponentBuilder(player.getName()).bold(true)
239+
.append(
240+
new ComponentBuilder(
241+
Language.getMessage(lang, "player-binded")
242+
.replace("$player", "")
243+
)
244+
.color(ChatColor.DARK_GREEN)
245+
.create()
246+
).create()
247+
);
171248
}
249+
return true;
250+
} else if (result == "Invalid Token!" && tries == 0) {
251+
Logger.info("Invalid Token detected, reconnecting...");
252+
isConnected = reconnect(true);
253+
return bind(playerKey, player, 1);
172254
}
173255
}
174256
messageHandler.sendPlayerBindSync(player);
@@ -179,6 +261,60 @@ public Boolean bind(int playerKey, ProxiedPlayer player) {
179261
return bind(playerKey, player, 0);
180262
}
181263

264+
/**
265+
* Bind a fake player
266+
* @param bindKey
267+
* @param name
268+
* @return
269+
*/
270+
public Boolean bindFake(int playerKey, String name, int tries) {
271+
if (!isConnected || Objects.isNull(host) || Objects.isNull(serverKey))
272+
return false;
273+
274+
if (playerBinds.containsKey(name) && playerBinds.get(name)) {
275+
return true;
276+
}
277+
278+
String link = "http://" + host + ":" + port;
279+
280+
String result = network.sendBindRequest(link, token, playerKey, String.format("%0", playerKey), name);
281+
playerBinds.put(name, false);
282+
if (result != null) {
283+
if (result == "SUCCESS") {
284+
playerBinds.put(name, true);
285+
// messageHandler.sendPlayerBindSync(player);
286+
287+
Logger.info(Language.getMessage(lang, "player-binded").replace("$player", name));
288+
289+
boolean sendBindedMessage = getConfig().getBoolean("config.voice.send-binded-message");
290+
if (sendBindedMessage) {
291+
getProxy().broadcast(
292+
new ComponentBuilder(name).bold(true)
293+
.append(
294+
new ComponentBuilder(
295+
Language.getMessage(lang, "player-binded")
296+
.replace("$player", "")
297+
)
298+
.color(ChatColor.DARK_GREEN)
299+
.create()
300+
).create()
301+
);
302+
}
303+
return true;
304+
} else if (result == "Invalid Token!" && tries == 0) {
305+
Logger.info("Invalid Token detected, reconnecting...");
306+
isConnected = reconnect(true);
307+
return bindFake(playerKey, name, 1);
308+
}
309+
}
310+
// messageHandler.sendPlayerBindSync(player);
311+
return false;
312+
}
313+
314+
public Boolean bindFake(int playerKey, String name) {
315+
return bindFake(playerKey, name, 0);
316+
}
317+
182318
/**
183319
* Disconnects a player from the voice chat server.
184320
*
@@ -198,7 +334,7 @@ public Boolean disconnectPlayer(ProxiedPlayer player, int tries) {
198334
return true;
199335
} else if (result == "Invalid Token!" && tries == 0) {
200336
Logger.info("Invalid Token detected, reconnecting...");
201-
isConnected = connect(true);
337+
isConnected = reconnect(true);
202338
return disconnectPlayer(player, 1);
203339
}
204340
}

0 commit comments

Comments
 (0)