From 5e9a4326ba99baf89c49b8c9620745f6bc20c3f1 Mon Sep 17 00:00:00 2001 From: tastybento Date: Fri, 22 Jan 2021 11:56:42 -0800 Subject: [PATCH] Only save if data has changed on shutdown. --- .../limits/listeners/BlockLimitsListener.java | 2 +- .../limits/objects/IslandBlockCount.java | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java b/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java index 85e67e4..c0db0fe 100644 --- a/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java +++ b/src/main/java/world/bentobox/limits/listeners/BlockLimitsListener.java @@ -148,7 +148,7 @@ public class BlockLimitsListener implements Listener { * Save the count database completely */ public void save() { - islandCountMap.values().forEach(handler::saveObjectAsync); + islandCountMap.values().stream().filter(IslandBlockCount::isChanged).forEach(handler::saveObjectAsync); } // Player-related events diff --git a/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java b/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java index 485b21e..448daed 100644 --- a/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java +++ b/src/main/java/world/bentobox/limits/objects/IslandBlockCount.java @@ -28,6 +28,8 @@ public class IslandBlockCount implements DataObject { @Expose private Map blockCount = new EnumMap<>(Material.class); + private boolean changed; + /** * Permission based limits */ @@ -44,6 +46,7 @@ public class IslandBlockCount implements DataObject { public IslandBlockCount(String uniqueId2, String gameMode2) { this.uniqueId = uniqueId2; this.gameMode = gameMode2; + setChanged(); } /* (non-Javadoc) @@ -60,6 +63,7 @@ public class IslandBlockCount implements DataObject { @Override public void setUniqueId(String uniqueId) { this.uniqueId = uniqueId; + setChanged(); } /** @@ -74,6 +78,7 @@ public class IslandBlockCount implements DataObject { */ public void setBlockCount(Map blockCount) { this.blockCount = blockCount; + setChanged(); } /** @@ -82,6 +87,7 @@ public class IslandBlockCount implements DataObject { */ public void add(Material material) { blockCount.merge(material, 1, Integer::sum); + setChanged(); } /** @@ -91,6 +97,7 @@ public class IslandBlockCount implements DataObject { public void remove(Material material) { blockCount.put(material, blockCount.getOrDefault(material, 0) - 1); blockCount.values().removeIf(v -> v <= 0); + setChanged(); } /** @@ -129,6 +136,7 @@ public class IslandBlockCount implements DataObject { */ public void setBlockLimits(Map blockLimits) { this.blockLimits = blockLimits; + setChanged(); } /** @@ -147,6 +155,7 @@ public class IslandBlockCount implements DataObject { */ public void setBlockLimit(Material m, int limit) { blockLimits.put(m, limit); + setChanged(); } /** @@ -165,6 +174,7 @@ public class IslandBlockCount implements DataObject { */ public void setGameMode(String gameMode) { this.gameMode = gameMode; + setChanged(); } /** @@ -179,6 +189,7 @@ public class IslandBlockCount implements DataObject { */ public void setEntityLimits(Map entityLimits) { this.entityLimits = entityLimits; + setChanged(); } /** @@ -188,6 +199,7 @@ public class IslandBlockCount implements DataObject { */ public void setEntityLimit(EntityType t, int limit) { entityLimits.put(t, limit); + setChanged(); } /** @@ -204,6 +216,7 @@ public class IslandBlockCount implements DataObject { */ public void clearEntityLimits() { entityLimits.clear(); + setChanged(); } /** @@ -218,6 +231,7 @@ public class IslandBlockCount implements DataObject { */ public void setEntityGroupLimits(Map entityGroupLimits) { this.entityGroupLimits = entityGroupLimits; + setChanged(); } /** @@ -227,6 +241,7 @@ public class IslandBlockCount implements DataObject { */ public void setEntityGroupLimit(String name, int limit) { entityGroupLimits.put(name, limit); + setChanged(); } /** @@ -243,5 +258,27 @@ public class IslandBlockCount implements DataObject { */ public void clearEntityGroupLimits() { entityGroupLimits.clear(); + setChanged(); + } + + /** + * @return the changed + */ + public boolean isChanged() { + return changed; + } + + /** + * @param changed the changed to set + */ + public void setChanged(boolean changed) { + this.changed = changed; + } + + /** + * Mark changed + */ + public void setChanged() { + this.changed = true; } }