package com.github.jamesnorris.ablockalypse.threading.inherent; import java.util.ArrayList; import java.util.List; import org.bukkit.Location; import org.bukkit.entity.Player; import com.github.jamesnorris.ablockalypse.Ablockalypse; import com.github.jamesnorris.ablockalypse.DataContainer; import com.github.jamesnorris.ablockalypse.aspect.Barrier; import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer; import com.github.jamesnorris.ablockalypse.enumerated.Setting; import com.github.jamesnorris.ablockalypse.enumerated.ZAEffect; import com.github.jamesnorris.ablockalypse.enumerated.ZASound; import com.github.jamesnorris.ablockalypse.threading.RepeatingTask; public class BarrierFixTask extends RepeatingTask { private static List<String> fixers = new ArrayList<String>(); private static final int INTERVAL = 20; private Barrier barrier; private Location center; private DataContainer data = Ablockalypse.getData(); private Player player; private ZAPlayer zap; public BarrierFixTask(Barrier barrier, ZAPlayer zap, boolean autorun) { super(INTERVAL, autorun); String name = zap.getPlayer().getName(); if (fixers.contains(name)) { return; } fixers.add(name); this.barrier = barrier; this.zap = zap; player = zap.getPlayer(); center = barrier.getCenter(); } @Override public void cancel() { if (player != null) { fixers.remove(player.getName()); } data.objects.remove(this); } @Override public void run() { if (player == null || !player.isSneaking() || player.isDead() || barrier.getCenter().distanceSquared(player.getLocation()) > 4 || barrier.getHP() >= 5) { cancel(); return; } barrier.setHP(barrier.getHP() + 1); if (barrier.getHP() < 5) { zap.addPoints((Integer) Setting.BARRIER_PART_FIX_PAY.getSetting()); } ZASound.BARRIER_REPAIR.play(center); ZAEffect.WOOD_BREAK.play(center); if (barrier.getHP() == 5) { zap.addPoints((Integer) Setting.BARRIER_FULL_FIX_PAY.getSetting()); barrier.replacePanels(); cancel(); } } }