package org.mctourney.autoreferee.goals;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockFromToEvent;
import org.jdom2.Element;
import org.mctourney.autoreferee.AutoRefMatch;
import org.mctourney.autoreferee.AutoRefTeam;
import org.mctourney.autoreferee.regions.AutoRefRegion;
import org.mctourney.autoreferee.util.BlockData;
public class CoreGoal extends AutoRefGoal
{
private boolean broken;
private AutoRefRegion region;
private long range = 0L;
public CoreGoal(AutoRefTeam team, AutoRefRegion region, long range)
{ super(team); this.region = region; this.range = range; }
public CoreGoal(AutoRefTeam team, AutoRefRegion region)
{ this(team, region, 0L); }
private CoreGoal(AutoRefTeam team, CoreGoal goal)
{ this(team, goal.region, goal.range); }
public CoreGoal(AutoRefTeam team, Element elt)
{
super(team);
this.region = AutoRefRegion.fromElement(team.getMatch(), elt.getChildren().get(0));
if (elt.getAttribute("range") != null)
try { this.range = Long.parseLong(elt.getAttributeValue("range").trim()); }
catch (NumberFormatException e) { e.printStackTrace(); }
}
@Override
public CoreGoal copy()
{ return this.copy(this.owner); }
@Override
public CoreGoal copy(AutoRefTeam team)
{ return new CoreGoal(team, this); }
public long getRange()
{ return this.range; }
public void setRange(long range)
{ this.range = range; }
public void checkSatisfied(BlockFromToEvent event)
{
final Location fm = event.getBlock().getLocation();
final Location to = event.getToBlock().getLocation();
if (region != null && region.distanceToRegion(fm) <= range &&
region.distanceToRegion(to) > range) broken = true;
}
@Override
public boolean isSatisfied(AutoRefMatch match)
{ return broken; }
@Override
public String toString()
{
return "CORE";
}
@Override
public void updateReferee(Player ref)
{
AutoRefMatch.messageReferee(ref, "team", getOwner().getName(),
"goal", "core", region.toString(), Boolean.toString(broken));
}
@Override
public BlockData getItem() { return null; }
@Override
public Location getTarget() { return null; }
@Override
public Element toElement()
{
if (region == null)
throw new IllegalStateException("Not a valid CoreGoal: Requires a valid region.");
Element elt = new Element("core");
if (range > 0L) elt.setAttribute("range", Long.toString(range));
elt.addContent(region.toElement());
return elt;
}
}