package tc.oc.pgm.eventrules;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ArrayListMultimap;
import org.bukkit.util.Vector;
public class EventRuleContext {
protected final ArrayListMultimap<EventRuleScope, EventRule> byScope = ArrayListMultimap.create();
protected final List<EventRule> byPriority = new ArrayList<>();
public EventRuleContext() {
}
/**
* Append the given rule, giving it the lowest priority
*/
public void add(EventRule rule) {
this.byScope.put(rule.scope(), rule);
this.byPriority.add(rule);
}
/**
* Prepend the given rule, giving it the highest priority
*/
public void prepend(EventRule rule) {
this.byScope.get(rule.scope()).add(0, rule);
this.byPriority.add(0, rule);
}
/**
* Return all rules in the given scope, in priority order
*/
public Iterable<EventRule> get(EventRuleScope scope) {
return this.byScope.get(scope);
}
/**
* Return all rules in priority order
*/
public Iterable<EventRule> getAll() {
return this.byPriority;
}
public EventRule getNearest(Vector pos) {
EventRule nearest = null;
double distance = Double.POSITIVE_INFINITY;
for(EventRule rule : byPriority) {
double d = pos.distanceSquared(rule.region().getBounds().center());
if(d < distance) {
nearest = rule;
distance = d;
}
}
return nearest;
}
}