package tc.oc.pgm.filters.matcher.player;
import tc.oc.pgm.filters.matcher.TypedFilter;
import tc.oc.pgm.filters.query.IPartyQuery;
import tc.oc.pgm.filters.query.IPlayerQuery;
import tc.oc.pgm.flag.FlagDefinition;
import tc.oc.pgm.flag.state.State;
public class CarryingFlagFilter extends TypedFilter.Impl<IPartyQuery> {
private final @Inspect(brief=true) FlagDefinition flag;
public CarryingFlagFilter(FlagDefinition flag) {
this.flag = flag;
}
@Override
public boolean isDynamic() {
return true;
}
@Override
public boolean matches(IPartyQuery query) {
final State state = query.feature(flag).state();
if(query instanceof IPlayerQuery) {
return ((IPlayerQuery) query).onlinePlayer()
.filter(state::isCarrying)
.isPresent();
} else {
return state.isCarrying(query.getParty());
}
}
}