From 808e29c0af94a0712508dff3392e16f671e59a13 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:20:07 +0700 Subject: [PATCH] fix: maybe some more concurrent fard fix --- build-number.txt | 2 +- .../chomens_bot/commands/FindAltsCommand.java | 4 ++++ .../plugins/PlayersPersistentDataPlugin.java | 16 ++++++++++++++++ .../util/PersistentDataUtilities.java | 4 ++-- 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/build-number.txt b/build-number.txt index 2b8b7059..dea24def 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1174 \ No newline at end of file +1177 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java index 599ea7f4..c7e73f71 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java @@ -52,6 +52,8 @@ public class FindAltsCommand extends Command { } private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player) { + PlayersPersistentDataPlugin.lock.lock(); + final Stream matches = PlayersPersistentDataPlugin.playersObject.deepCopy().properties() .stream() .filter( @@ -70,6 +72,8 @@ public class FindAltsCommand extends Command { ) .map(Map.Entry::getKey); + PlayersPersistentDataPlugin.lock.unlock(); + Component component = Component .translatable("Possible alts for the %s %s:") .color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)) diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java index 547d34f9..878df6a9 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java @@ -10,10 +10,13 @@ import me.chayapak1.chomens_bot.util.PersistentDataUtilities; import java.time.Instant; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { public static ObjectNode playersObject = (ObjectNode) PersistentDataUtilities.getOrDefault("players", JsonNodeFactory.instance.objectNode()); + public static final ReentrantLock lock = new ReentrantLock(); + private final Bot bot; public PlayersPersistentDataPlugin (Bot bot) { @@ -24,6 +27,8 @@ public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { @Override public synchronized void playerJoined(PlayerEntry target) { + lock.lock(); + final JsonNode originalElement = playersObject.get(target.profile.getName()); ObjectNode object; @@ -35,9 +40,12 @@ public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { } else if (originalElement instanceof ObjectNode) { object = (ObjectNode) originalElement; } else { + lock.unlock(); return; } + lock.unlock(); + bot.executorService.submit(() -> { final CompletableFuture future = bot.players.getPlayerIP(target); @@ -62,9 +70,13 @@ public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { // is this bad? private synchronized void setPersistentEntry (PlayerEntry target, ObjectNode object) { + lock.lock(); + playersObject.set(getName(target), object); PersistentDataUtilities.put("players", playersObject); + + lock.unlock(); } private String getName(PlayerEntry target) { @@ -73,6 +85,8 @@ public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { @Override public synchronized void playerLeft(PlayerEntry target) { + lock.lock(); + if (!playersObject.has(getName(target))) return; final ObjectNode player = (ObjectNode) playersObject.get(getName(target)); @@ -84,5 +98,7 @@ public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { player.set("lastSeen", object); PersistentDataUtilities.put("players", playersObject); + + lock.unlock(); } } diff --git a/src/main/java/me/chayapak1/chomens_bot/util/PersistentDataUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/PersistentDataUtilities.java index a1ca9e67..ec24630d 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/PersistentDataUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/PersistentDataUtilities.java @@ -73,10 +73,10 @@ public class PersistentDataUtilities { public static synchronized void stop () { stopping = true; - lock.lock(); - writeFuture.cancel(false); + lock.lock(); + try { writeToFile(true); } finally {