package me.fromgate.reactions.util.waiter;
import me.fromgate.reactions.ReActions;
import me.fromgate.reactions.util.ActVal;
import me.fromgate.reactions.util.message.M;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class ActionsWaiter {
private static Set<Task> tasks;
public static void init() {
tasks = Collections.newSetFromMap(new ConcurrentHashMap<Task, Boolean>()); //new HashSet<>();
load();
}
public static void executeDelayed(Player player, ActVal action, boolean isAction, long time) {
if (action == null) return;
List<ActVal> actions = new ArrayList<>();
actions.add(action);
executeDelayed(player, actions, isAction, time);
}
public static void executeDelayed(Player player, List<ActVal> actions, boolean isAction, long time) {
if (actions.isEmpty()) return;
String playerStr = player != null ? player.getName() : null;
Task task = new Task(playerStr, actions, isAction, time);
tasks.add(task);
save();
}
public static void remove(Task task) {
if (tasks.contains(task)) tasks.remove(task);
save();
}
public static void load() {
if (!tasks.isEmpty()) {
for (Task t : tasks) {
t.stop();
}
}
tasks.clear();
YamlConfiguration cfg = new YamlConfiguration();
File f = new File(ReActions.getPlugin().getDataFolder() + File.separator + "delayed-actions.yml");
try {
cfg.load(f);
} catch (Exception e) {
M.logMessage("Failed to load delayed actions");
return;
}
for (String key : cfg.getKeys(false)) {
Task t = new Task(cfg, key);
tasks.add(t);
}
}
public static void refresh() {
Set<Task> toRemove = new HashSet<>();
if (tasks.isEmpty()) return;
for (Task t : tasks) {
if (t.isTimePassed()) t.execute();
if (t.isExecuted()) toRemove.add(t);
}
if (toRemove.isEmpty()) return;
for (Task t : toRemove) {
if (tasks.contains(t)) tasks.remove(t);
}
save();
}
public static void save() {
Bukkit.getScheduler().runTaskLater(ReActions.getPlugin(), new Runnable() {
@Override
public void run() {
YamlConfiguration cfg = new YamlConfiguration();
File f = new File(ReActions.getPlugin().getDataFolder() + File.separator + "delayed-actions.yml");
if (f.exists()) f.delete();
for (Task t : tasks) {
if (!t.isExecuted()) t.save(cfg);
}
try {
cfg.save(f);
} catch (Throwable e) {
M.logMessage("Failed to save delayed actions");
}
}
}, 1);
}
}