package net.querz.mcaselector.filter; import net.querz.nbt.tag.StringTag; import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class StatusFilter extends TextFilter<String> { private static final Set<String> validStatus = new HashSet<>(); private static final Comparator[] comparators = { Comparator.EQUAL, Comparator.NOT_EQUAL }; static { validStatus.addAll(Arrays.asList( "empty", // old status "base", "carved", "liquid_carved", "decorated", "lighted", "mobs_spawned", "finalized", "fullchunk", "postprocessed", // new status "structure_starts", "structure_references", "biomes", "noise", "surface", "carvers", "liquid_carvers", "features", "light", "spawn", "heightmaps", "full" )); } public StatusFilter() { this(Operator.AND, Comparator.EQUAL, null); } private StatusFilter(Operator operator, Comparator comparator, String value) { super(FilterType.STATUS, operator, comparator, value); setRawValue(value); } @Override public Comparator[] getComparators() { return comparators; } @Override public String getFormatText() { return "empty,..."; } @Override public boolean contains(String value, FilterData data) { StringTag tag = data.getChunk().getCompoundTag("Level").getStringTag("Status"); return tag != null && validStatus.contains(tag.getValue()); } @Override public boolean containsNot(String value, FilterData data) { StringTag tag = data.getChunk().getCompoundTag("Level").getStringTag("Status"); return tag == null || !validStatus.contains(tag.getValue()); } @Override public void setFilterValue(String raw) { if (validStatus.contains(raw)) { setValue(raw); setValid(true); } else { setValue(null); setValid(false); } } @Override public String toString() { return "Status " + getComparator().getQueryString() + " " + getFilterValue(); } @Override public StatusFilter clone() { return new StatusFilter(getOperator(), getComparator(), value); } }