package in.twizmwaz.cardinal.module.modules.filter.type;
import com.google.common.base.Optional;
import in.twizmwaz.cardinal.module.GameObjective;
import in.twizmwaz.cardinal.module.modules.filter.FilterModule;
import in.twizmwaz.cardinal.module.modules.filter.FilterState;
import in.twizmwaz.cardinal.module.modules.filter.parsers.ObjectiveFilterParser;
import in.twizmwaz.cardinal.module.modules.hill.HillObjective;
import in.twizmwaz.cardinal.module.modules.team.TeamModule;
import in.twizmwaz.cardinal.util.Teams;
import org.bukkit.entity.Player;
import static in.twizmwaz.cardinal.module.modules.filter.FilterState.ALLOW;
import static in.twizmwaz.cardinal.module.modules.filter.FilterState.DENY;
public class ObjectiveFilter extends FilterModule {
private final ObjectiveFilterParser parser;
private GameObjective objective = null;
private TeamModule team;
private Boolean any;
public ObjectiveFilter(final ObjectiveFilterParser parser) {
super(parser.getName(), parser.getParent());
this.parser = parser;
}
public void load() {
parser.load();
this.objective = parser.getObjective();
this.team = parser.getTeam();
this.any = parser.isAny();
}
@Override
public FilterState evaluate(final Object... objects) {
if (objective == null) load();
if (objective instanceof HillObjective) {
if (any) return objective.getTeam() != null ? ALLOW : DENY;
if (team != null) return objective.getTeam() != null && objective.getTeam().equals(team) ? ALLOW : DENY;
for (Object object : objects) {
if (object instanceof TeamModule) {
return objective.getTeam() != null && objective.getTeam().equals(object) ? ALLOW : DENY;
} else if (object instanceof Player) {
Optional<TeamModule> team = Teams.getTeamByPlayer((Player)object);
return objective.getTeam() != null && team.isPresent() && objective.getTeam().equals(team.get()) ? ALLOW : DENY;
}
}
return objective.getTeam() != null ? ALLOW : DENY;
} else {
return objective.isComplete() ? ALLOW : DENY;
}
}
}