package com.github.jamesnorris.ablockalypse.threading.inherent;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import com.github.jamesnorris.ablockalypse.Ablockalypse;
import com.github.jamesnorris.ablockalypse.DataContainer;
import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer;
import com.github.jamesnorris.ablockalypse.enumerated.Setting;
import com.github.jamesnorris.ablockalypse.threading.RepeatingTask;
public class LastStandPickupTask extends RepeatingTask {
private DataContainer data = Ablockalypse.getData();
private static List<String> pickingUp = new ArrayList<String>();
private int starting, max, perRequirement, ranThrough = 0, requirement;
private ZAPlayer pickup, downed;
private Player pickupPlayer, downedPlayer;
public LastStandPickupTask(ZAPlayer pickup, ZAPlayer downed, int interval, int requirement, boolean autorun) {
super(interval, autorun);
if (pickup.equals(downed) || pickingUp.contains(downed.getPlayer().getName())) {
super.cancel();
return;
}
pickingUp.add(downed.getPlayer().getName());
this.pickup = pickup;
this.downed = downed;
this.requirement = requirement;
pickupPlayer = pickup.getPlayer();
downedPlayer = downed.getPlayer();
starting = (int) pickupPlayer.getExp();
max = pickupPlayer.getExpToLevel() - 1;
perRequirement = max / requirement;
}
@Override public void cancel() {
pickingUp.remove(downed.getPlayer().getName());
pickupPlayer.setExp(starting);
data.objects.remove(this);
}
@Override public void run() {
++ranThrough;
if (downed.isInLastStand() && pickupPlayer.getLocation().distanceSquared(downedPlayer.getLocation()) <= 4 /* 4 = 2 squared */
&& ranThrough < requirement && pickupPlayer.isSneaking()) {
pickupPlayer.setExp(starting + perRequirement * ranThrough);
} else if (ranThrough >= requirement && downed.isInLastStand()) {
downed.toggleLastStand();
pickupPlayer.sendMessage(ChatColor.GREEN + "You have picked up " + downedPlayer.getName() + "!");
pickup.addPoints((Integer) Setting.LAST_STAND_HELPER_PAY.getSetting());
cancel();
} else {
cancel();
}
}
}