From 6f1c63e693fbd337dd3fdb365a9d146a56bf6197 Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Thu, 18 Aug 2022 03:39:40 +0200 Subject: [PATCH] Add delay to bungee force-login messages --- .../fr/xephi/authme/process/join/AsynchronousJoin.java | 8 +++++++- .../fr/xephi/authme/process/login/AsynchronousLogin.java | 8 +++++++- src/main/java/fr/xephi/authme/service/BukkitService.java | 2 +- .../xephi/authme/service/bungeecord/BungeeReceiver.java | 2 +- .../fr/xephi/authme/service/bungeecord/BungeeSender.java | 1 + 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java index 93d38947..160e125c 100644 --- a/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java +++ b/src/main/java/fr/xephi/authme/process/join/AsynchronousJoin.java @@ -153,7 +153,13 @@ public class AsynchronousJoin implements AsynchronousProcess { }); // Skip if registration is optional - bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN); + + if (bungeeSender.isEnabled()) { + // As described at https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ + // "Keep in mind that you can't send plugin messages directly after a player joins." + bukkitService.scheduleSyncDelayedTask(() -> + bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN), 10L); + } return; } diff --git a/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java b/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java index 897daa0f..e465803c 100644 --- a/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/AsynchronousLogin.java @@ -300,7 +300,13 @@ public class AsynchronousLogin implements AsynchronousProcess { playerCache.updatePlayer(auth); dataSource.setLogged(name); sessionService.grantSession(name); - bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN); + + if (bungeeSender.isEnabled()) { + // As described at https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ + // "Keep in mind that you can't send plugin messages directly after a player joins." + bukkitService.scheduleSyncDelayedTask(() -> + bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN), 10L); + } // As the scheduling executes the Task most likely after the current // task, we schedule it in the end diff --git a/src/main/java/fr/xephi/authme/service/BukkitService.java b/src/main/java/fr/xephi/authme/service/BukkitService.java index e02c6f10..a09b1850 100644 --- a/src/main/java/fr/xephi/authme/service/BukkitService.java +++ b/src/main/java/fr/xephi/authme/service/BukkitService.java @@ -308,7 +308,7 @@ public class BukkitService implements SettingsDependent { } /** - * Adds a ban to the this list. If a previous ban exists, this will + * Adds a ban to the list. If a previous ban exists, this will * update the previous entry. * * @param ip the ip of the ban diff --git a/src/main/java/fr/xephi/authme/service/bungeecord/BungeeReceiver.java b/src/main/java/fr/xephi/authme/service/bungeecord/BungeeReceiver.java index 091c796b..05c7c944 100644 --- a/src/main/java/fr/xephi/authme/service/bungeecord/BungeeReceiver.java +++ b/src/main/java/fr/xephi/authme/service/bungeecord/BungeeReceiver.java @@ -46,7 +46,7 @@ public class BungeeReceiver implements PluginMessageListener, SettingsDependent this.isEnabled = bukkitService.isBungeeCordConfiguredForSpigot().orElse(false); } if (this.isEnabled) { - Messenger messenger = plugin.getServer().getMessenger(); + final Messenger messenger = plugin.getServer().getMessenger(); if (!messenger.isIncomingChannelRegistered(plugin, "BungeeCord")) { messenger.registerIncomingPluginChannel(plugin, "BungeeCord", this); } diff --git a/src/main/java/fr/xephi/authme/service/bungeecord/BungeeSender.java b/src/main/java/fr/xephi/authme/service/bungeecord/BungeeSender.java index 25080e01..68edfcf2 100644 --- a/src/main/java/fr/xephi/authme/service/bungeecord/BungeeSender.java +++ b/src/main/java/fr/xephi/authme/service/bungeecord/BungeeSender.java @@ -83,6 +83,7 @@ public class BungeeSender implements SettingsDependent { if (!isEnabled || destinationServerOnLogin.isEmpty()) { return; } + // Add a small delay, just in case... bukkitService.scheduleSyncDelayedTask(() -> sendBungeecordMessage(player, "Connect", destinationServerOnLogin), 5L); }