diff --git a/Mage/src/main/java/mage/filter/Filter.java b/Mage/src/main/java/mage/filter/Filter.java index 90486321ab9..0eea30f5a35 100644 --- a/Mage/src/main/java/mage/filter/Filter.java +++ b/Mage/src/main/java/mage/filter/Filter.java @@ -1,5 +1,7 @@ package mage.filter; +import mage.abilities.Ability; +import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.Predicate; import mage.game.Game; import mage.util.Copyable; @@ -7,6 +9,7 @@ import mage.util.Copyable; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import java.util.UUID; /** * @param @@ -21,6 +24,8 @@ public interface Filter extends Serializable, Copyable> { boolean match(E o, Game game); + boolean match(E object, UUID sourceControllerId, Ability source, Game game); + Filter add(Predicate predicate); boolean checkObjectClass(Object object); @@ -37,7 +42,7 @@ public interface Filter extends Serializable, Copyable> { List> getPredicates(); - default List getExtraPredicates() { + default List> getExtraPredicates() { return new ArrayList<>(); } } diff --git a/Mage/src/main/java/mage/filter/FilterCard.java b/Mage/src/main/java/mage/filter/FilterCard.java index ccdb72f6e52..2ba1edbe035 100644 --- a/Mage/src/main/java/mage/filter/FilterCard.java +++ b/Mage/src/main/java/mage/filter/FilterCard.java @@ -1,9 +1,7 @@ package mage.filter; -import mage.abilities.Ability; import mage.cards.Card; import mage.constants.TargetController; -import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; @@ -24,7 +22,6 @@ import java.util.stream.Collectors; public class FilterCard extends FilterObject { private static final long serialVersionUID = 1L; - protected final List> extraPredicates = new ArrayList<>(); public FilterCard() { super("card"); @@ -36,56 +33,6 @@ public class FilterCard extends FilterObject { protected FilterCard(final FilterCard filter) { super(filter); - this.extraPredicates.addAll(filter.extraPredicates); - } - - //20130711 708.6c - /* If anything performs a comparison involving multiple characteristics or - * values of one or more split cards in any zone other than the stack or - * involving multiple characteristics or values of one or more fused split - * spells, each characteristic or value is compared separately. If each of - * the individual comparisons would return a “yes” answer, the whole - * comparison returns a “yes” answer. The individual comparisons may involve - * different halves of the same split card. - */ - @Override - public boolean match(Card card, Game game) { - if (card == null) { - return false; - } - return super.match(card, game); - } - - public boolean match(Card card, UUID playerId, Game game) { - return match(card, playerId, null, game); - } - - public boolean match(Card card, UUID playerId, Ability source, Game game) { - if (!this.match(card, game)) { - return false; - } - ObjectSourcePlayer osp = new ObjectSourcePlayer<>(card, playerId, source); - return extraPredicates.stream().allMatch(p -> p.apply(osp, game)); - } - - public final void add(ObjectSourcePlayerPredicate predicate) { - if (isLockedFilter()) { - throw new UnsupportedOperationException("You may not modify a locked filter"); - } - - // verify check - checkPredicateIsSuitableForCardFilter(predicate); - Predicates.makeSurePredicateCompatibleWithFilter(predicate, Card.class); - - extraPredicates.add(predicate); - } - - public Set filter(Set cards, Game game) { - return cards.stream().filter(card -> match(card, game)).collect(Collectors.toSet()); - } - - public boolean hasPredicates() { - return !predicates.isEmpty() || !extraPredicates.isEmpty(); } @Override @@ -93,13 +40,16 @@ public class FilterCard extends FilterObject { return new FilterCard(this); } - @Override - public List getExtraPredicates() { - return new ArrayList<>(extraPredicates); + public boolean match(Card card, UUID playerId, Game game) { + return match(card, playerId, null, game); + } + + public Set filter(Set cards, Game game) { + return cards.stream().filter(card -> match(card, game)).collect(Collectors.toSet()); } public static void checkPredicateIsSuitableForCardFilter(Predicate predicate) { - // card filter can't contain controller predicate (only permanents on battlefield have controller) + // card filter can't contain controller predicate (only permanents on battlefield and StackObjects have controller) List list = new ArrayList<>(); Predicates.collectAllComponents(predicate, list); if (list.stream().anyMatch(TargetController.ControllerPredicate.class::isInstance)) { @@ -107,8 +57,22 @@ public class FilterCard extends FilterObject { } } + public FilterCard withMessage(String message) { this.setMessage(message); return this; } + + @Override + public void add(ObjectSourcePlayerPredicate predicate) { + // verify checks + checkPredicateIsSuitableForCardFilter(predicate); + Predicates.makeSurePredicateCompatibleWithFilter(predicate, Card.class); + this.addExtra(predicate); + } + + @Override + public boolean checkObjectClass(Object object) { + return object instanceof Card; + } } diff --git a/Mage/src/main/java/mage/filter/FilterImpl.java b/Mage/src/main/java/mage/filter/FilterImpl.java index 428610eabbb..8575e0b7063 100644 --- a/Mage/src/main/java/mage/filter/FilterImpl.java +++ b/Mage/src/main/java/mage/filter/FilterImpl.java @@ -1,11 +1,15 @@ package mage.filter; +import mage.abilities.Ability; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; import mage.game.Game; import java.util.ArrayList; import java.util.List; +import java.util.UUID; /** * @param @@ -14,7 +18,8 @@ import java.util.List; */ public abstract class FilterImpl implements Filter { - protected List> predicates = new ArrayList<>(); + private List> predicates = new ArrayList<>(); + private List> extraPredicates = new ArrayList<>(); protected String message; protected boolean lockedFilter; // Helps to prevent "accidentally" modifying the StaticFilters objects @@ -29,6 +34,7 @@ public abstract class FilterImpl implements Filter { protected FilterImpl(final FilterImpl filter) { this.message = filter.message; this.predicates = new ArrayList<>(filter.predicates); + this.extraPredicates.addAll(filter.extraPredicates); this.lockedFilter = false;// After copying a filter it's allowed to modify } @@ -40,8 +46,16 @@ public abstract class FilterImpl implements Filter { return false; } + public boolean match(E object, UUID sourceControllerId, Ability source, Game game) { + if (!this.match(object, game)) { + return false; + } + ObjectSourcePlayer osp = new ObjectSourcePlayer<>(object, sourceControllerId, source); + return extraPredicates.stream().allMatch(p -> p.apply(osp, game)); + } + @Override - public final Filter add(Predicate predicate) { + public Filter add(Predicate predicate) { if (isLockedFilter()) { throw new UnsupportedOperationException("You may not modify a locked filter"); } @@ -49,6 +63,24 @@ public abstract class FilterImpl implements Filter { return this; } + /** + * Make sure on setting a new Filter that you overwrite this method + * and call Predicates.makeSurePredicateCompatibleWithFilter + * to check that the filter is able to process objects + * of the right kind. Helps with checks the Compiler can't do + * due to ObjectSourcePlayer casting in the this.match(4 arguments). + */ + public void add(ObjectSourcePlayerPredicate predicate) { + addExtra(predicate); + } + + public void addExtra(ObjectSourcePlayerPredicate predicate) { + if (isLockedFilter()) { + throw new UnsupportedOperationException("You may not modify a locked filter"); + } + extraPredicates.add(predicate); + } + @Override public String getMessage() { return message; @@ -80,4 +112,12 @@ public abstract class FilterImpl implements Filter { public List> getPredicates() { return predicates; } + + public List> getExtraPredicates() { + return new ArrayList<>(extraPredicates); + } + + public boolean hasPredicates() { + return !predicates.isEmpty() || !extraPredicates.isEmpty(); + } } diff --git a/Mage/src/main/java/mage/filter/FilterInPlay.java b/Mage/src/main/java/mage/filter/FilterInPlay.java deleted file mode 100644 index ba0b9979a7e..00000000000 --- a/Mage/src/main/java/mage/filter/FilterInPlay.java +++ /dev/null @@ -1,18 +0,0 @@ -package mage.filter; - -import mage.abilities.Ability; -import mage.game.Game; - -import java.util.UUID; - -/** - * @param - * @author BetaSteward_at_googlemail.com - */ -public interface FilterInPlay extends Filter { - - boolean match(E o, UUID playerId, Ability source, Game game); - - @Override - FilterInPlay copy(); -} diff --git a/Mage/src/main/java/mage/filter/FilterMana.java b/Mage/src/main/java/mage/filter/FilterMana.java index a8584e7fcd8..81410fe112f 100644 --- a/Mage/src/main/java/mage/filter/FilterMana.java +++ b/Mage/src/main/java/mage/filter/FilterMana.java @@ -7,6 +7,8 @@ import java.util.ArrayList; import java.util.List; /** + * TODO: Not really a Filter. Should be renamed? + * * @author nantuko */ public class FilterMana implements Serializable { diff --git a/Mage/src/main/java/mage/filter/FilterObject.java b/Mage/src/main/java/mage/filter/FilterObject.java index 6795d65b76d..5d816f60531 100644 --- a/Mage/src/main/java/mage/filter/FilterObject.java +++ b/Mage/src/main/java/mage/filter/FilterObject.java @@ -2,24 +2,17 @@ package mage.filter; import mage.MageObject; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.filter.predicate.Predicates; /** + * // TODO: migrate all FilterObject to more specific ones, then remove this class? * - * @author North * @param + * @author North */ public class FilterObject extends FilterImpl { - @Override - public FilterObject copy() { - return new FilterObject<>(this); - } - - @Override - public boolean checkObjectClass(Object object) { - return object instanceof MageObject; - } - public FilterObject(String name) { super(name); } @@ -27,4 +20,21 @@ public class FilterObject extends FilterImpl { protected FilterObject(final FilterObject filter) { super(filter); } + + @Override + public FilterObject copy() { + return new FilterObject(this); + } + + @Override + public void add(ObjectSourcePlayerPredicate predicate) { + // verify checks + Predicates.makeSurePredicateCompatibleWithFilter(predicate, MageObject.class); + this.addExtra(predicate); + } + + @Override + public boolean checkObjectClass(Object object) { + return object instanceof MageObject; + } } diff --git a/Mage/src/main/java/mage/filter/FilterPermanent.java b/Mage/src/main/java/mage/filter/FilterPermanent.java index 9eaee653392..dbe3c0ff4af 100644 --- a/Mage/src/main/java/mage/filter/FilterPermanent.java +++ b/Mage/src/main/java/mage/filter/FilterPermanent.java @@ -1,25 +1,16 @@ package mage.filter; -import mage.abilities.Ability; import mage.constants.SubType; -import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; -import mage.game.Game; import mage.game.permanent.Permanent; -import java.util.ArrayList; -import java.util.List; import java.util.Set; -import java.util.UUID; /** * @author North */ -public class FilterPermanent extends FilterObject implements FilterInPlay { - - protected final List> extraPredicates = new ArrayList<>(); +public class FilterPermanent extends FilterObject { public FilterPermanent() { super("permanent"); @@ -43,32 +34,6 @@ public class FilterPermanent extends FilterObject implements FilterIn protected FilterPermanent(final FilterPermanent filter) { super(filter); - this.extraPredicates.addAll(filter.extraPredicates); - } - - @Override - public boolean checkObjectClass(Object object) { - return object instanceof Permanent; - } - - @Override - public boolean match(Permanent permanent, UUID playerId, Ability source, Game game) { - if (!this.match(permanent, game) || !permanent.isPhasedIn()) { - return false; - } - ObjectSourcePlayer osp = new ObjectSourcePlayer<>(permanent, playerId, source); - return extraPredicates.stream().allMatch(p -> p.apply(osp, game)); - } - - public final void add(ObjectSourcePlayerPredicate predicate) { - if (isLockedFilter()) { - throw new UnsupportedOperationException("You may not modify a locked filter"); - } - - // verify check - Predicates.makeSurePredicateCompatibleWithFilter(predicate, Permanent.class); - - extraPredicates.add(predicate); } @Override @@ -77,7 +42,14 @@ public class FilterPermanent extends FilterObject implements FilterIn } @Override - public List getExtraPredicates() { - return new ArrayList<>(extraPredicates); + public void add(ObjectSourcePlayerPredicate predicate) { + // verify checks + Predicates.makeSurePredicateCompatibleWithFilter(predicate, Permanent.class); + this.addExtra(predicate); + } + + @Override + public boolean checkObjectClass(Object object) { + return object instanceof Permanent; } } diff --git a/Mage/src/main/java/mage/filter/FilterPlayer.java b/Mage/src/main/java/mage/filter/FilterPlayer.java index 766cba8253b..e33775a2ba5 100644 --- a/Mage/src/main/java/mage/filter/FilterPlayer.java +++ b/Mage/src/main/java/mage/filter/FilterPlayer.java @@ -1,25 +1,15 @@ package mage.filter; -import mage.abilities.Ability; -import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; -import mage.game.Game; import mage.players.Player; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - /** * @author BetaSteward_at_googlemail.com * @author North */ public class FilterPlayer extends FilterImpl { - protected final List> extraPredicates = new ArrayList<>(); - public FilterPlayer() { this("player"); } @@ -30,32 +20,6 @@ public class FilterPlayer extends FilterImpl { protected FilterPlayer(final FilterPlayer filter) { super(filter); - this.extraPredicates.addAll(filter.extraPredicates); - } - - public FilterPlayer add(ObjectSourcePlayerPredicate predicate) { - if (isLockedFilter()) { - throw new UnsupportedOperationException("You may not modify a locked filter"); - } - - // verify check - Predicates.makeSurePredicateCompatibleWithFilter(predicate, Player.class); - - extraPredicates.add(predicate); - return this; - } - - @Override - public boolean checkObjectClass(Object object) { - return object instanceof Player; - } - - public boolean match(Player checkPlayer, UUID sourceControllerId, Ability source, Game game) { - if (!this.match(checkPlayer, game)) { - return false; - } - ObjectSourcePlayer osp = new ObjectSourcePlayer<>(checkPlayer, sourceControllerId, source); - return extraPredicates.stream().allMatch(p -> p.apply(osp, game)); } @Override @@ -64,7 +28,14 @@ public class FilterPlayer extends FilterImpl { } @Override - public List getExtraPredicates() { - return new ArrayList<>(extraPredicates); + public void add(ObjectSourcePlayerPredicate predicate) { + // verify checks + Predicates.makeSurePredicateCompatibleWithFilter(predicate, Player.class); + this.addExtra(predicate); + } + + @Override + public boolean checkObjectClass(Object object) { + return object instanceof Player; } } diff --git a/Mage/src/main/java/mage/filter/FilterSource.java b/Mage/src/main/java/mage/filter/FilterSource.java index 335e30b4f9f..b7285223a1f 100644 --- a/Mage/src/main/java/mage/filter/FilterSource.java +++ b/Mage/src/main/java/mage/filter/FilterSource.java @@ -2,28 +2,18 @@ package mage.filter; import mage.MageObject; -import mage.abilities.Ability; import mage.cards.Card; -import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; -import mage.game.Game; import mage.game.command.CommandObject; import mage.game.permanent.Permanent; import mage.game.stack.StackObject; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - /** * @author Susucr */ public class FilterSource extends FilterObject { - protected final List> extraPredicates = new ArrayList<>(); - public FilterSource() { super("source"); } @@ -34,7 +24,6 @@ public class FilterSource extends FilterObject { private FilterSource(final FilterSource filter) { super(filter); - this.extraPredicates.addAll(filter.extraPredicates); } @Override @@ -42,16 +31,12 @@ public class FilterSource extends FilterObject { return new FilterSource(this); } - public FilterSource add(ObjectSourcePlayerPredicate predicate) { - if (isLockedFilter()) { - throw new UnsupportedOperationException("You may not modify a locked filter"); - } - - // verify check -- make sure predicates work with all 3 Class that could be a Source + @Override + public void add(ObjectSourcePlayerPredicate predicate) { + // verify checks + // A source can be a lot of different things, so a variety of predicates can be fed here Predicates.makeSurePredicateCompatibleWithFilter(predicate, Permanent.class, Card.class, StackObject.class, CommandObject.class); - - extraPredicates.add(predicate); - return this; + this.addExtra(predicate); } @Override @@ -61,17 +46,4 @@ public class FilterSource extends FilterObject { || object instanceof StackObject || object instanceof CommandObject; } - - public boolean match(MageObject object, UUID sourceControllerId, Ability source, Game game) { - if (!this.match(object, game)) { - return false; - } - ObjectSourcePlayer osp = new ObjectSourcePlayer<>(object, sourceControllerId, source); - return extraPredicates.stream().allMatch(p -> p.apply(osp, game)); - } - - @Override - public List getExtraPredicates() { - return new ArrayList<>(extraPredicates); - } } diff --git a/Mage/src/main/java/mage/filter/FilterSpell.java b/Mage/src/main/java/mage/filter/FilterSpell.java index 619fd45b0e9..a2a56ff759a 100644 --- a/Mage/src/main/java/mage/filter/FilterSpell.java +++ b/Mage/src/main/java/mage/filter/FilterSpell.java @@ -1,12 +1,7 @@ package mage.filter; -import java.util.UUID; - -import mage.abilities.Ability; -import mage.game.Game; import mage.game.stack.Spell; -import mage.game.stack.StackObject; /** * @author North, Quercitron @@ -26,11 +21,8 @@ public class FilterSpell extends FilterStackObject { } @Override - public boolean match(StackObject stackObject, UUID playerId, Ability source, Game game) { - if (!(stackObject instanceof Spell)) { - return false; - } - return super.match(stackObject, playerId, source, game); + public boolean checkObjectClass(Object object) { + return object instanceof Spell; } @Override diff --git a/Mage/src/main/java/mage/filter/FilterStackObject.java b/Mage/src/main/java/mage/filter/FilterStackObject.java index aa3b506c1ae..53f59d7c131 100644 --- a/Mage/src/main/java/mage/filter/FilterStackObject.java +++ b/Mage/src/main/java/mage/filter/FilterStackObject.java @@ -1,25 +1,16 @@ package mage.filter; -import mage.abilities.Ability; import mage.cards.Card; -import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.filter.predicate.Predicate; import mage.filter.predicate.Predicates; -import mage.game.Game; import mage.game.stack.Spell; import mage.game.stack.StackObject; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - /** * @author North */ public class FilterStackObject extends FilterObject { - protected final List> extraPredicates = new ArrayList<>(); public FilterStackObject() { this("spell or ability"); @@ -31,27 +22,6 @@ public class FilterStackObject extends FilterObject { protected FilterStackObject(final FilterStackObject filter) { super(filter); - this.extraPredicates.addAll(filter.extraPredicates); - } - - public boolean match(StackObject stackObject, UUID playerId, Ability source, Game game) { - if (!this.match(stackObject, game)) { - return false; - } - ObjectSourcePlayer osp = new ObjectSourcePlayer<>(stackObject, playerId, source); - return extraPredicates.stream().allMatch(p -> p.apply(osp, game)); - } - - public final void add(ObjectSourcePlayerPredicate predicate) { - if (isLockedFilter()) { - throw new UnsupportedOperationException("You may not modify a locked filter"); - } - - // verify check - // Spell implements Card interface, so it can use some default predicates like owner - Predicates.makeSurePredicateCompatibleWithFilter(predicate, StackObject.class, Spell.class, Card.class); - - extraPredicates.add(predicate); } @Override @@ -59,8 +29,15 @@ public class FilterStackObject extends FilterObject { return new FilterStackObject(this); } + public final void add(ObjectSourcePlayerPredicate predicate) { + // verify checks + // Spell implements Card interface, so it can use some default predicates like owner + Predicates.makeSurePredicateCompatibleWithFilter(predicate, StackObject.class, Spell.class, Card.class); + this.addExtra(predicate); + } + @Override - public List getExtraPredicates() { - return new ArrayList<>(extraPredicates); + public boolean checkObjectClass(Object object) { + return object instanceof StackObject; } } diff --git a/Mage/src/main/java/mage/filter/common/FilterPermanentOrPlayer.java b/Mage/src/main/java/mage/filter/common/FilterPermanentOrPlayer.java index 385d18f915d..ac18369a15b 100644 --- a/Mage/src/main/java/mage/filter/common/FilterPermanentOrPlayer.java +++ b/Mage/src/main/java/mage/filter/common/FilterPermanentOrPlayer.java @@ -3,11 +3,8 @@ package mage.filter.common; import mage.MageItem; import mage.abilities.Ability; import mage.filter.FilterImpl; -import mage.filter.FilterInPlay; import mage.filter.FilterPermanent; import mage.filter.FilterPlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.filter.predicate.Predicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; @@ -17,7 +14,7 @@ import java.util.UUID; /** * @author nantuko */ -public class FilterPermanentOrPlayer extends FilterImpl implements FilterInPlay { +public class FilterPermanentOrPlayer extends FilterImpl { protected final FilterPermanent permanentFilter; protected final FilterPlayer playerFilter; diff --git a/Mage/src/main/java/mage/filter/common/FilterPermanentOrSuspendedCard.java b/Mage/src/main/java/mage/filter/common/FilterPermanentOrSuspendedCard.java index 1dec36f6875..7bde90a10ff 100644 --- a/Mage/src/main/java/mage/filter/common/FilterPermanentOrSuspendedCard.java +++ b/Mage/src/main/java/mage/filter/common/FilterPermanentOrSuspendedCard.java @@ -1,7 +1,5 @@ package mage.filter.common; -import java.util.UUID; - import mage.MageObject; import mage.abilities.Ability; import mage.abilities.keyword.SuspendAbility; @@ -9,16 +7,17 @@ import mage.cards.Card; import mage.counters.CounterType; import mage.filter.FilterCard; import mage.filter.FilterImpl; -import mage.filter.FilterInPlay; import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import java.util.UUID; + /** * @author emerald000 */ -public class FilterPermanentOrSuspendedCard extends FilterImpl implements FilterInPlay { +public class FilterPermanentOrSuspendedCard extends FilterImpl { protected FilterCard cardFilter; protected FilterPermanent permanentFilter; diff --git a/Mage/src/main/java/mage/filter/common/FilterSpellOrPermanent.java b/Mage/src/main/java/mage/filter/common/FilterSpellOrPermanent.java index fa5af86f978..8757abc3d60 100644 --- a/Mage/src/main/java/mage/filter/common/FilterSpellOrPermanent.java +++ b/Mage/src/main/java/mage/filter/common/FilterSpellOrPermanent.java @@ -3,7 +3,6 @@ package mage.filter.common; import mage.MageObject; import mage.abilities.Ability; import mage.filter.FilterImpl; -import mage.filter.FilterInPlay; import mage.filter.FilterPermanent; import mage.filter.FilterSpell; import mage.game.Game; @@ -15,7 +14,7 @@ import java.util.UUID; /** * @author LevelX */ -public class FilterSpellOrPermanent extends FilterImpl implements FilterInPlay { +public class FilterSpellOrPermanent extends FilterImpl { protected FilterPermanent permanentFilter; protected FilterSpell spellFilter; diff --git a/Mage/src/main/java/mage/target/common/TargetOpponent.java b/Mage/src/main/java/mage/target/common/TargetOpponent.java index 3fbe826de18..7c52c08a6c9 100644 --- a/Mage/src/main/java/mage/target/common/TargetOpponent.java +++ b/Mage/src/main/java/mage/target/common/TargetOpponent.java @@ -1,7 +1,6 @@ package mage.target.common; import mage.filter.FilterOpponent; -import mage.filter.FilterPlayer; import mage.target.TargetPlayer; /**