From 603f98c67d2701e403be709dd359a84c6cb094e2 Mon Sep 17 00:00:00 2001 From: Rhys B Date: Fri, 17 Jan 2025 12:55:08 +1000 Subject: [PATCH 1/2] Revert "Save data asynchronously" --- .../beta/fundamentals/Fundamentals.java | 22 ++++++++++--------- .../fundamentals/FundamentalsPlayerMap.java | 6 ++--- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java b/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java index e78da98..87b7933 100644 --- a/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java +++ b/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java @@ -165,16 +165,18 @@ public void onEnable() { Bukkit.getPluginCommand("balancetop").setExecutor(new CommandBalanceTop(plugin)); Bukkit.getPluginCommand("fakequit").setExecutor(new CommandFakeQuit(plugin)); //Timer - //This async task is here to prevent lags from occuring when data is being saved, - //and to ensure TPS doesn't affect the timing of saving. + //This async task is so TPS doesn't affect the timing of saving. This probably actually isn't needed TBH. Bukkit.getScheduler().scheduleAsyncRepeatingTask(plugin, () -> { - int autoSavePeriod = getFundamentalConfig().getConfigInteger("settings.auto-save-time"); - if (lastAutoSaveTime + autoSavePeriod < getUnix()) { - lastAutoSaveTime = getUnix(); - debugLogger(Level.INFO, "Automatically saving data.", 2); - saveData(); - } - getPlayerMap().runTimerTasks(); + //Change back to main thread for all logic. + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + int autoSavePeriod = FundamentalsConfig.getInstance(plugin).getConfigInteger("settings.auto-save-time"); + if (lastAutoSaveTime + autoSavePeriod < getUnix()) { + lastAutoSaveTime = getUnix(); + debugLogger(Level.INFO, "Automatically saving data.", 2); + saveData(); + } + FundamentalsPlayerMap.getInstance(plugin).runTimerTasks(); + }); }, 20, 20 * 10); long endTimeUnix = System.currentTimeMillis() / 1000L; @@ -295,7 +297,7 @@ public UUID getPlayerUUID(String playerName) { } public void saveData() { - getPlayerMap().saveData(); + FundamentalsPlayerMap.getInstance().saveData(); economyCache.saveData(); // uuidCache.saveData(); playerCache.saveData(); diff --git a/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/FundamentalsPlayerMap.java b/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/FundamentalsPlayerMap.java index dc0b4d4..5416e5a 100644 --- a/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/FundamentalsPlayerMap.java +++ b/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/FundamentalsPlayerMap.java @@ -7,15 +7,15 @@ import java.io.File; import java.util.ArrayList; +import java.util.HashMap; import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.regex.Pattern; public class FundamentalsPlayerMap { private static FundamentalsPlayerMap singleton; private Fundamentals plugin; - private ConcurrentHashMap playerMap = new ConcurrentHashMap<>(); + private HashMap playerMap = new HashMap(); private ArrayList knownPlayers = new ArrayList(); private boolean cacheAllPlayers = false; private int playersLoaded = 0; @@ -98,7 +98,7 @@ public void removePlayerFromMap(UUID uuid) { public void runTimerTasks() { - long currentUnix = System.currentTimeMillis() / 1000L; + Long currentUnix = System.currentTimeMillis() / 1000L; playerMap.keySet().removeIf(key -> { FundamentalsPlayer player = playerMap.get(key); if (!player.isPlayerOnline()) { From ff43fd1bbd2b100fe673d85b1279fea3074dd4bd Mon Sep 17 00:00:00 2001 From: Rhys B Date: Fri, 17 Jan 2025 12:58:38 +1000 Subject: [PATCH 2/2] Make caches only save on server shutdown --- .../johnymuffin/beta/fundamentals/Fundamentals.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java b/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java index 87b7933..3d26038 100644 --- a/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java +++ b/FundamentalsCore/src/main/java/com/johnymuffin/beta/fundamentals/Fundamentals.java @@ -297,10 +297,9 @@ public UUID getPlayerUUID(String playerName) { } public void saveData() { - FundamentalsPlayerMap.getInstance().saveData(); - economyCache.saveData(); -// uuidCache.saveData(); - playerCache.saveData(); + FundamentalsPlayerMap.getInstance().saveData(); // Save player data files that have been modified. + + // Save Fundamentals Banks FundamentalsBank[] banks = new FundamentalsBank[this.banks.size()]; int i = 0; for (String bankName : this.banks.keySet()) { @@ -324,6 +323,10 @@ public void onDisable() { //Save Player Data saveData(); + + // Save caches + playerCache.saveData(); + economyCache.saveData(); } public void logger(Level level, String message) {