When unloading world, only save if it has data

This commit is contained in:
Sn0wStorm 2020-11-09 13:18:49 +01:00
parent e28cd72af9
commit 9271d82eda
4 changed files with 21 additions and 4 deletions

View File

@ -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) {

View File

@ -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
*/

View File

@ -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;
}

View File

@ -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);
}