From b25d874122a50a4a95049d4ff6702f819aa75361 Mon Sep 17 00:00:00 2001 From: HaHaWTH Date: Sat, 30 Dec 2023 09:20:16 +0800 Subject: [PATCH] Thread-safety --- src/main/java/fr/xephi/authme/AuthMe.java | 12 ++++++++++- .../authme/listener/GuiCaptchaHandler.java | 21 ++++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index a97ba048..7b15516e 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -73,7 +73,7 @@ public class AuthMe extends JavaPlugin { // Version and build number values private static String pluginVersion = "5.6.0-Fork"; - public static final String pluginBuild = "b"; + private static final String pluginBuild = "b"; private static String pluginBuildNumber = "38"; // Private instances private EmailService emailService; @@ -85,12 +85,22 @@ public class AuthMe extends JavaPlugin { private Injector injector; private BackupService backupService; public static ConsoleLogger logger; + /** * Constructor. */ public AuthMe() { } + /** + * Get the plugin's build + * + * @return The plugin's build + */ + public static String getPluginBuild() { + return pluginBuild; + } + /** * Get the plugin's name. diff --git a/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java b/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java index df233a14..e18b428c 100644 --- a/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java +++ b/src/main/java/fr/xephi/authme/listener/GuiCaptchaHandler.java @@ -32,10 +32,10 @@ import org.bukkit.inventory.meta.ItemMeta; import javax.inject.Inject; import java.io.File; -import java.util.HashMap; import java.util.List; import java.util.Random; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; @@ -70,12 +70,14 @@ public class GuiCaptchaHandler implements Listener { private int timesLeft = 3; //Use ConcurrentHashMap to store player and their close reason /* We used many async tasks so there is concurrent**/ - public static HashMap closeReasonMap = new HashMap<>(); + public static ConcurrentHashMap closeReasonMap = new ConcurrentHashMap<>(); //define randomStringSet String randomSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz!@#%&*()_+"; String randomString = ""; Random randomItemSet = new Random(); Random howManyRandom = new Random(); + + private boolean isPacketListenersActive = false; public GuiCaptchaHandler() { @@ -162,6 +164,7 @@ public class GuiCaptchaHandler implements Listener { messages.send(playerunreg, MessageKey.GUI_CAPTCHA_VERIFIED_AUTO_BEDROCK); return; } + bukkitService.runTaskAsynchronously(() -> { bukkitService.runTask(() -> { randomString = sb.toString(); @@ -233,14 +236,12 @@ public class GuiCaptchaHandler implements Listener { timeOut = settings.getProperty(RestrictionSettings.TIMEOUT); } long finalTimeOut = timeOut; - bukkitService.runTask(() -> { - bukkitService.runTaskLater(() -> { - if (!closeReasonMap.containsKey(playerunreg) && !authmeApi.isRegistered(playerunreg.getName())) { - playerunreg.kickPlayer(service.retrieveSingleMessage(playerunreg, MessageKey.GUI_CAPTCHA_KICK_TIMEOUT)); - timesLeft = 3; // Reset the attempt counter - } - }, finalTimeOut * 20L); - }); + bukkitService.runTaskLater(() -> { + if (!closeReasonMap.containsKey(playerunreg) && !authmeApi.isRegistered(playerunreg.getName())) { + playerunreg.kickPlayer(service.retrieveSingleMessage(playerunreg, MessageKey.GUI_CAPTCHA_KICK_TIMEOUT)); + timesLeft = 3; // Reset the attempt counter + } + }, finalTimeOut * 20L); } }); });