package tc.oc.pgm.filters.matcher.player;
import com.google.common.cache.LoadingCache;
import org.bukkit.PoseFlag;
import tc.oc.commons.core.util.CacheUtils;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.matcher.TypedFilter;
import tc.oc.pgm.filters.operator.AnyFilter;
import tc.oc.pgm.filters.operator.InverseFilter;
import tc.oc.pgm.filters.query.IPoseQuery;
public class PoseFilter extends TypedFilter.Impl<IPoseQuery> {
private static final LoadingCache<PoseFlag, PoseFilter> CACHE = CacheUtils.newCache(PoseFilter::new);
public static Filter of(PoseFlag pose) {
return CACHE.getUnchecked(pose);
}
private static final Filter WALKING = new InverseFilter(AnyFilter.of(of(PoseFlag.SNEAKING), of(PoseFlag.SPRINTING)));
public static Filter walking() { return WALKING; }
private final @Inspect PoseFlag pose;
public PoseFilter(PoseFlag pose) {
this.pose = pose;
}
@Override
public String toString() {
return "Pose{" + pose + "}";
}
@Override
public boolean isDynamic() {
return true;
}
@Override
public boolean matches(IPoseQuery query) {
return query.getPose().contains(pose);
}
}