61 lines
1.8 KiB
Java
61 lines
1.8 KiB
Java
package world.bentobox.bentobox.managers;
|
|
|
|
import java.util.LinkedList;
|
|
import java.util.Queue;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
import world.bentobox.bentobox.BentoBox;
|
|
import world.bentobox.bentobox.database.objects.IslandDeletion;
|
|
import world.bentobox.bentobox.util.DeleteIslandChunks;
|
|
|
|
/**
|
|
* Manages the queue of island chunks to be deleted.
|
|
*/
|
|
public class IslandChunkDeletionManager implements Runnable {
|
|
private final boolean slowDeletion;
|
|
private final BentoBox plugin;
|
|
private final AtomicReference<DeleteIslandChunks> currentTask;
|
|
private final Queue<IslandDeletion> queue;
|
|
|
|
public IslandChunkDeletionManager(BentoBox plugin) {
|
|
this.plugin = plugin;
|
|
this.currentTask = new AtomicReference<>();
|
|
this.queue = new LinkedList<>();
|
|
this.slowDeletion = plugin.getSettings().isSlowDeletion();
|
|
|
|
if (slowDeletion) {
|
|
plugin.getServer().getScheduler().runTaskTimer(plugin, this, 0L, 20L);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
if (queue.isEmpty()) {
|
|
return;
|
|
}
|
|
DeleteIslandChunks task = this.currentTask.get();
|
|
if (task != null && !task.isCompleted()) {
|
|
return;
|
|
}
|
|
IslandDeletion islandDeletion = queue.remove();
|
|
currentTask.set(startDeleteTask(islandDeletion));
|
|
}
|
|
|
|
private DeleteIslandChunks startDeleteTask(IslandDeletion islandDeletion) {
|
|
return new DeleteIslandChunks(plugin, islandDeletion);
|
|
}
|
|
|
|
/**
|
|
* Adds an island deletion to the queue.
|
|
*
|
|
* @param islandDeletion island deletion
|
|
*/
|
|
public void add(IslandDeletion islandDeletion) {
|
|
if (slowDeletion) {
|
|
queue.add(islandDeletion);
|
|
} else {
|
|
startDeleteTask(islandDeletion);
|
|
}
|
|
}
|
|
}
|