package com.github.jamesnorris.ablockalypse.threading.inherent;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bukkit.Location;
import org.bukkit.entity.LivingEntity;
import com.github.jamesnorris.ablockalypse.Ablockalypse;
import com.github.jamesnorris.ablockalypse.DataContainer;
import com.github.jamesnorris.ablockalypse.aspect.Barrier;
import com.github.jamesnorris.ablockalypse.enumerated.ZAEffect;
import com.github.jamesnorris.ablockalypse.enumerated.ZASound;
import com.github.jamesnorris.ablockalypse.threading.RepeatingTask;
public class BarrierBreakTask extends RepeatingTask {
private static final List<UUID> breakers = new ArrayList<UUID>();
private static final int INTERVAL = 100;
private Barrier barrier;
private Location center;
private DataContainer data = Ablockalypse.getData();
private LivingEntity entity;
public BarrierBreakTask(Barrier barrier, LivingEntity entity, boolean autorun) {
super(INTERVAL, autorun);
UUID entityID = entity.getUniqueId();
if (breakers.contains(entityID)) {
return;
}
breakers.add(entityID);
this.barrier = barrier;
this.entity = entity;
center = barrier.getCenter();
}
@Override public void cancel() {
if (entity != null) {
breakers.remove(entity.getUniqueId());
}
data.objects.remove(this);
}
@Override public void run() {
if (entity == null || barrier == null || entity.isDead() || !(barrier.getCenter().distanceSquared(entity.getLocation()) < 4) || barrier.isBroken()) {
cancel();
return;
}
barrier.setHP(barrier.getHP() - 1);
ZASound.BARRIER_BREAK.play(center);
ZAEffect.WOOD_BREAK.play(center);
if (barrier.getHP() == 0) {
if (data.isZAMob(entity)) {
data.getZAMob(entity).retarget();
}
barrier.breakPanels();
cancel();
}
}
}