From 9271d82edaf90e4008af87585e371a346deda9f7 Mon Sep 17 00:00:00 2001 From: Sn0wStorm Date: Mon, 9 Nov 2020 13:18:49 +0100 Subject: [PATCH] When unloading world, only save if it has data --- src/com/dre/brewery/BCauldron.java | 7 +++++++ src/com/dre/brewery/Barrel.java | 7 +++++++ src/com/dre/brewery/filedata/BData.java | 2 +- src/com/dre/brewery/listeners/WorldListener.java | 9 ++++++--- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/com/dre/brewery/BCauldron.java b/src/com/dre/brewery/BCauldron.java index 992383b..dc1f472 100644 --- a/src/com/dre/brewery/BCauldron.java +++ b/src/com/dre/brewery/BCauldron.java @@ -535,6 +535,13 @@ public class BCauldron { return bcauldrons.remove(block) != null; } + /** + * Are any Cauldrons in that World + */ + public static boolean hasDataInWorld(String name) { + return bcauldrons.keySet().stream().anyMatch(block -> block.getWorld().getName().equals(name)); + } + // unloads cauldrons that are in a unloading world // as they were written to file just before, this is safe to do public static void onUnload(String name) { diff --git a/src/com/dre/brewery/Barrel.java b/src/com/dre/brewery/Barrel.java index 699d149..a00734c 100644 --- a/src/com/dre/brewery/Barrel.java +++ b/src/com/dre/brewery/Barrel.java @@ -472,6 +472,13 @@ public class Barrel implements InventoryHolder { return body.getBrokenBlock(force); } + /** + * Are any Barrels in that World + */ + public static boolean hasDataInWorld(String name) { + return barrels.stream().anyMatch(barrel -> barrel.spigot.getWorld().getName().equals(name)); + } + /** * unloads barrels that are in a unloading world */ diff --git a/src/com/dre/brewery/filedata/BData.java b/src/com/dre/brewery/filedata/BData.java index 7596c9b..8bd93a2 100644 --- a/src/com/dre/brewery/filedata/BData.java +++ b/src/com/dre/brewery/filedata/BData.java @@ -453,7 +453,7 @@ public class BData { // Increment the Data Mutex if it is not -1 while (BData.dataMutex.updateAndGet(i -> i >= 0 ? i + 1 : i) <= 0) { wait++; - if (wait > 60) { + if (!BConfig.loadDataAsync || wait > 60) { P.p.errorLog("Could not load World Data, Mutex: " + BData.dataMutex.get()); return false; } diff --git a/src/com/dre/brewery/listeners/WorldListener.java b/src/com/dre/brewery/listeners/WorldListener.java index b20f242..15f669e 100644 --- a/src/com/dre/brewery/listeners/WorldListener.java +++ b/src/com/dre/brewery/listeners/WorldListener.java @@ -45,10 +45,13 @@ public class WorldListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onWorldUnload(WorldUnloadEvent event) { - DataSave.save(true); String worldName = event.getWorld().getName(); - Barrel.onUnload(worldName); - BCauldron.onUnload(worldName); + if (Barrel.hasDataInWorld(worldName) || BCauldron.hasDataInWorld(worldName)) { + P.p.log("Saving due to data in unloading world"); + DataSave.save(true); + Barrel.onUnload(worldName); + BCauldron.onUnload(worldName); + } Wakeup.onUnload(worldName); }