package joshie.progression.criteria.conditions; import joshie.progression.Progression; import joshie.progression.api.IPlayerTeam; import joshie.progression.api.ProgressionAPI; import joshie.progression.api.criteria.IField; import joshie.progression.api.criteria.IFilterProvider; import joshie.progression.api.criteria.IFilterType; import joshie.progression.api.criteria.ProgressionRule; import joshie.progression.api.special.DisplayMode; import joshie.progression.api.special.ICustomDescription; import joshie.progression.api.special.IHasFilters; import joshie.progression.api.special.ISpecialFieldProvider; import joshie.progression.gui.fields.ItemFilterField; import joshie.progression.lib.WorldLocation; import net.minecraft.entity.player.EntityPlayer; import java.util.ArrayList; import java.util.List; @ProgressionRule(name="location", color=0xFF111111, meta="ifIsAtCoordinates") public class ConditionLocation extends ConditionBase implements ICustomDescription, IHasFilters, ISpecialFieldProvider { public List<IFilterProvider> locations = new ArrayList(); protected transient IField field; public ConditionLocation() { field = new ItemFilterField("locations", this); } @Override public String getDescription() { if (getProvider().isInverted()) return Progression.translate(getProvider().getUnlocalisedName() + ".description.inverted") + " \n" + field.getField(); else return Progression.translate(getProvider().getUnlocalisedName() + ".description") + " \n" + field.getField(); } @Override public void addSpecialFields(List<IField> fields, DisplayMode mode) { if (mode == DisplayMode.EDIT) { fields.add(new ItemFilterField("locations", this)); } } @Override public List<IFilterProvider> getAllFilters() { return locations; } @Override public IFilterType getFilterForField(String fieldName) { return ProgressionAPI.filters.getLocationFilter(); } @Override public boolean isSatisfied(IPlayerTeam team) { for (EntityPlayer player: team.getTeamEntities()) { WorldLocation location = new WorldLocation(player); for (IFilterProvider filter : locations) { if (filter.getProvided().matches(location)) return true; } } return false; } }