From 5d0bf58f7893c3a29233f31d79788bf41f75ccc5 Mon Sep 17 00:00:00 2001 From: Derek Chen Date: Fri, 31 Oct 2025 03:03:32 -0500 Subject: [PATCH] feat: join and quit savedata done async optimization --- .../me/codedred/playtimes/listeners/Join.java | 48 ++++++++++--------- .../me/codedred/playtimes/listeners/Quit.java | 10 ++-- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/main/java/me/codedred/playtimes/listeners/Join.java b/src/main/java/me/codedred/playtimes/listeners/Join.java index d25ca16..7b71f0c 100644 --- a/src/main/java/me/codedred/playtimes/listeners/Join.java +++ b/src/main/java/me/codedred/playtimes/listeners/Join.java @@ -7,6 +7,7 @@ import me.codedred.playtimes.data.database.manager.DatabaseManager; import me.codedred.playtimes.statistics.StatManager; import me.codedred.playtimes.statistics.StatisticType; +import me.codedred.playtimes.utils.Async; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.event.EventHandler; @@ -47,33 +48,36 @@ public void onJoin(PlayerJoinEvent event) { return; } - ConfigurationSection leaderboardSection = data - .getData() - .getConfigurationSection("leaderboard"); + // Run leaderboard update asynchronously to avoid blocking main thread - DerexXD + Async.run(() -> { + ConfigurationSection leaderboardSection = data + .getData() + .getConfigurationSection("leaderboard"); - if (leaderboardSection == null) { - leaderboardSection = data.getData().createSection("leaderboard"); - } + if (leaderboardSection == null) { + leaderboardSection = data.getData().createSection("leaderboard"); + } - if (leaderboardSection.contains(uuid.toString())) { - return; - } + if (leaderboardSection.contains(uuid.toString())) { + return; + } - long time = StatManager - .getInstance() - .getPlayerStat(uuid, StatisticType.PLAYTIME); + long time = StatManager + .getInstance() + .getPlayerStat(uuid, StatisticType.PLAYTIME); - if ( - !data.getConfig().getBoolean("top-playtime.track-rawtime", false) && - data.hasAfkEnabled() - ) { - time -= - AFKManager.getInstance().getAFKTime(event.getPlayer().getUniqueId()) * - 20; - } + if ( + !data.getConfig().getBoolean("top-playtime.track-rawtime", false) && + data.hasAfkEnabled() + ) { + time -= + AFKManager.getInstance().getAFKTime(event.getPlayer().getUniqueId()) * + 20; + } - leaderboardSection.set(uuid.toString(), time); + leaderboardSection.set(uuid.toString(), time); - data.saveData(); + data.saveData(); + }); } } diff --git a/src/main/java/me/codedred/playtimes/listeners/Quit.java b/src/main/java/me/codedred/playtimes/listeners/Quit.java index e435e9d..a3f0112 100644 --- a/src/main/java/me/codedred/playtimes/listeners/Quit.java +++ b/src/main/java/me/codedred/playtimes/listeners/Quit.java @@ -1,12 +1,12 @@ package me.codedred.playtimes.listeners; import java.util.UUID; -import java.util.concurrent.CompletableFuture; import me.codedred.playtimes.afk.AFKManager; import me.codedred.playtimes.data.DataManager; import me.codedred.playtimes.data.database.manager.DatabaseManager; import me.codedred.playtimes.statistics.StatManager; import me.codedred.playtimes.statistics.StatisticType; +import me.codedred.playtimes.utils.Async; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; @@ -20,7 +20,7 @@ public void onQuit(PlayerQuitEvent event) { // Database if (data.hasDatabase()) { - CompletableFuture.runAsync(() -> { + Async.run(() -> { DatabaseManager dbManager = DatabaseManager.getInstance(); dbManager.updatePlaytime( uuid, @@ -33,7 +33,7 @@ public void onQuit(PlayerQuitEvent event) { }); } else { // Save AFK time in data.yml - CompletableFuture.runAsync(() -> { + Async.run(() -> { data .getData() .set("afktime." + uuid, AFKManager.getInstance().getAFKTime(uuid)); @@ -47,8 +47,8 @@ public void onQuit(PlayerQuitEvent event) { return; } - // Run leaderboard update - CompletableFuture.runAsync(() -> { + // Run leaderboard update asynchronously - DerexXD + Async.run(() -> { StatManager statManager = StatManager.getInstance(); long playtime = statManager.getPlayerStat(uuid, StatisticType.PLAYTIME); if (