package be.isach.ultracosmetics.run;
import be.isach.ultracosmetics.UltraCosmeticsData;
import org.bukkit.Bukkit;
import org.bukkit.entity.Entity;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
* Created by Sacha on 15/12/15.
*/
public class FallDamageManager extends BukkitRunnable {
public static List<Entity> noFallDamage = Collections.synchronizedList(new ArrayList<Entity>());
public static List<Entity> queue = Collections.synchronizedList(new ArrayList<Entity>());
public static void addNoFall(Entity entity) {
if (!queue.contains(entity)
&& !noFallDamage.contains(entity)) {
queue.add(entity);
}
}
public static boolean shouldBeProtected(Entity entity) {
return noFallDamage.contains(entity) || queue.contains(entity);
}
@Override
public void run() {
List<Entity> toRemove = new ArrayList<>();
synchronized (noFallDamage) {
for (Iterator<Entity> iterator = noFallDamage.iterator(); iterator.hasNext(); ) {
Entity ent = iterator.next();
if (ent.isOnGround()) {
toRemove.add(ent);
}
}
}
Bukkit.getScheduler().runTaskLaterAsynchronously(UltraCosmeticsData.get().getPlugin(), () -> {
for(Entity entity : toRemove) {
noFallDamage.remove(entity);
}
}, 5);
noFallDamage.addAll(queue);
queue.clear();
}
}