Skip to content

Commit aaf3d97

Browse files
committed
fix: do not redirect player to waiting server if already connected to it #1
1 parent 50a4fea commit aaf3d97

File tree

4 files changed

+26
-6
lines changed

4 files changed

+26
-6
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = 'fr.pickaria'
9-
version = '1.1-SNAPSHOT'
9+
version = '1.2-SNAPSHOT'
1010

1111
repositories {
1212
mavenCentral()

src/main/java/fr/pickaria/pterodactylpoweraction/ConnectionListener.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public void onServerPreConnect(ServerPreConnectEvent event) {
7474
shutdownManager.cancelTask(originalServer);
7575

7676
try {
77-
pingCompletableFuture.get();
77+
pingCompletableFuture.get(); // FIXME: This is blocking the main thread
7878
// Server pinged successfully, we can connect the player to this server
7979
event.setResult(ServerPreConnectEvent.ServerResult.allowed(originalServer));
8080
} catch (ExecutionException exception) {
@@ -118,14 +118,32 @@ public void onDisconnect(DisconnectEvent event) {
118118
@Subscribe()
119119
public void onKicked(KickedFromServerEvent event) {
120120
stopServer(event.getPlayer());
121+
redirectPlayerToWaitingServerOnKick(event);
122+
}
123+
124+
private void redirectPlayerToWaitingServerOnKick(KickedFromServerEvent event) {
125+
boolean shouldRedirectToWaitingServerOnKick = configuration.getRedirectToWaitingServerOnKick();
126+
boolean isKickedFromWaitingServer = event.getServer() == this.waitingServer;
127+
boolean isConnectedToWaitingServer = event.getPlayer().getCurrentServer()
128+
.map(serverConnection -> serverConnection.getServer() == this.waitingServer)
129+
.orElse(false);
121130

122-
// Redirect the player to the waiting server
123-
if (configuration.getRedirectToWaitingServerOnKick() && event.getServer() != this.waitingServer) {
124-
event.setResult(KickedFromServerEvent.RedirectPlayer.create(waitingServer, getKickReasonMessage(event)));
131+
if (shouldRedirectToWaitingServerOnKick && !isKickedFromWaitingServer) {
132+
if (isConnectedToWaitingServer) {
133+
event.setResult(KickedFromServerEvent.Notify.create(getKickDisconnectMessage(event)));
134+
} else {
135+
event.setResult(KickedFromServerEvent.RedirectPlayer.create(waitingServer, getKickRedirectMessage(event)));
136+
}
137+
} else {
138+
event.setResult(KickedFromServerEvent.DisconnectPlayer.create(getKickDisconnectMessage(event)));
125139
}
126140
}
127141

128-
private Component getKickReasonMessage(KickedFromServerEvent event) {
142+
private Component getKickDisconnectMessage(KickedFromServerEvent event) {
143+
return event.getServerKickReason().orElse(Component.translatable("kick.generic.disconnect"));
144+
}
145+
146+
private Component getKickRedirectMessage(KickedFromServerEvent event) {
129147
Optional<Component> serverKickReason = event.getServerKickReason();
130148
String serverName = event.getServer().getServerInfo().getName();
131149
String serverCommand = "/server " + serverName;

src/main/resources/PterodactylPowerAction/Bundle_en.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ starting.server=The server {0} is starting, you will be automatically redirected
22
failed.to.start.server=The server {0} failed to start. Please try again.
33
kick.reason.message=You have been kicked from the server {0} for reason: "{1}"\n → {2}
44
kick.generic.message=You have been kicked from the server {0}.\n → {1}
5+
kick.generic.disconnect=You have been kicked from the server {0}.
56
go.back.command=Return to the server {0}
67
run.command=Click to perform the command {0}

src/main/resources/PterodactylPowerAction/Bundle_fr.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ starting.server=Le serveur {0} est en train de démarrer, vous allez être redir
22
failed.to.start.server=Le serveur {0} n'a pas réussi à démarrer. Veuillez réessayer.
33
kick.reason.message=Vous avez été expulsé du serveur {0} pour la raison: "{1}"\n → {2}
44
kick.generic.message=Vous avez été expulsé du serveur {0}.\n → {1}
5+
kick.generic.disconnect=Vous avez été déconnecté du serveur {0}.
56
go.back.command=Retourner sur le serveur {0}
67
run.command=Clique pour faire la commande {0}

0 commit comments

Comments
 (0)