Skip to content

Commit

Permalink
Data persistence flag tracker: expire-check-needed key for opti
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Dec 22, 2020
1 parent 8700648 commit c2bc3fd
Showing 1 changed file with 16 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package com.denizenscript.denizen.utilities.flags;

import com.denizenscript.denizen.Denizen;
import com.denizenscript.denizen.utilities.DataPersistenceHelper;
import com.denizenscript.denizencore.flags.MapTagBasedFlagTracker;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.MapTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.NamespacedKey;
import org.bukkit.persistence.PersistentDataHolder;
import org.bukkit.persistence.PersistentDataType;

import java.util.Collection;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -37,6 +39,9 @@ public void setRootMap(String key, MapTag map) {
DataPersistenceHelper.removeDenizenKey(holder, keyPrefix + CoreUtilities.toLowerCase(key));
return;
}
if (map.map.containsKey(expirationString) || map.map.get(valueString) instanceof MapTag) {
holder.getPersistentDataContainer().set(expireNeededKey, PersistentDataType.STRING, "true");
}
DataPersistenceHelper.setDenizenKey(holder, keyPrefix + CoreUtilities.toLowerCase(key), map);
}

Expand All @@ -47,10 +52,16 @@ public Collection<String> listAllFlags() {
.map(k -> k.getKey().substring(keyPrefix.length())).collect(Collectors.toList());
}

public static NamespacedKey expireNeededKey = new NamespacedKey(Denizen.getInstance(), "expire_flag_check_needed");

public void doTotalClean() {
if (MapTagBasedFlagTracker.skipAllCleanings) {
return;
}
if (!holder.getPersistentDataContainer().has(expireNeededKey, PersistentDataType.STRING)) {
return;
}
boolean containsAnyToCheck = false;
for (NamespacedKey key : holder.getPersistentDataContainer().getKeys()) {
if (!key.getNamespace().equals("denizen") || !key.getKey().startsWith("flag_")) {
continue;
Expand All @@ -61,14 +72,19 @@ public void doTotalClean() {
}
if (isExpired(((MapTag) map).map.get(expirationString))) {
holder.getPersistentDataContainer().remove(key);
containsAnyToCheck = true;
continue;
}
ObjectTag subValue = ((MapTag) map).map.get(valueString);
if (subValue instanceof MapTag) {
if (doClean((MapTag) subValue)) {
holder.getPersistentDataContainer().set(key, DataPersistenceHelper.PERSISTER_TYPE, map);
}
containsAnyToCheck = true;
}
}
if (!containsAnyToCheck) {
holder.getPersistentDataContainer().remove(expireNeededKey);
}
}
}

0 comments on commit c2bc3fd

Please sign in to comment.