diff --git a/Mage.Sets/src/mage/cards/g/GiantTrapDoorSpider.java b/Mage.Sets/src/mage/cards/g/GiantTrapDoorSpider.java index 6c0ed14e87..968ce61a78 100644 --- a/Mage.Sets/src/mage/cards/g/GiantTrapDoorSpider.java +++ b/Mage.Sets/src/mage/cards/g/GiantTrapDoorSpider.java @@ -33,7 +33,6 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileSourceEffect; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.FlyingAbility; @@ -42,11 +41,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterAttackingCreature; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.target.common.FilterCreatureAttackingYou; import mage.target.common.TargetCreaturePermanent; /** @@ -55,7 +52,7 @@ import mage.target.common.TargetCreaturePermanent; */ public class GiantTrapDoorSpider extends CardImpl { - private static final HuntingKavuFilter filter = new HuntingKavuFilter(); + private static final FilterCreatureAttackingYou filter = new FilterCreatureAttackingYou("creature without flying that's attacking you"); static { filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); @@ -71,7 +68,7 @@ public class GiantTrapDoorSpider extends CardImpl { // {1}{R}{G}, {tap}: Exile Giant Trap Door Spider and target creature without flying that's attacking you. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(), new ManaCostsImpl("{1}{R}{G}")); ability.addCost(new TapSourceCost()); - ability.addEffect(new ExileTargetEffect()); + ability.addEffect(new ExileTargetEffect().setText("and target creature without flying that's attacking you")); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } @@ -85,26 +82,3 @@ public class GiantTrapDoorSpider extends CardImpl { return new GiantTrapDoorSpider(this); } } - -class HuntingKavuFilter extends FilterAttackingCreature { - - public HuntingKavuFilter() { - super("creature without flying that's attacking you"); - } - - public HuntingKavuFilter(final HuntingKavuFilter filter) { - super(filter); - } - - @Override - public HuntingKavuFilter copy() { - return new HuntingKavuFilter(this); - } - - @Override - public boolean match(Permanent permanent, UUID sourceId, UUID playerId, Game game) { - return super.match(permanent, sourceId, playerId, game) - && permanent.isAttacking() // to prevent unneccessary combat checking if not attacking - && playerId.equals(game.getCombat().getDefenderId(permanent.getId())); - } -} diff --git a/Mage.Sets/src/mage/cards/h/HuntingKavu.java b/Mage.Sets/src/mage/cards/h/HuntingKavu.java index c6541cbc9d..c4444d1338 100644 --- a/Mage.Sets/src/mage/cards/h/HuntingKavu.java +++ b/Mage.Sets/src/mage/cards/h/HuntingKavu.java @@ -33,7 +33,6 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.ExileSourceEffect; import mage.abilities.effects.common.ExileTargetEffect; import mage.abilities.keyword.FlyingAbility; @@ -42,11 +41,9 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.Zone; -import mage.filter.common.FilterAttackingCreature; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.target.common.FilterCreatureAttackingYou; import mage.target.common.TargetCreaturePermanent; /** @@ -55,7 +52,7 @@ import mage.target.common.TargetCreaturePermanent; */ public class HuntingKavu extends CardImpl { - private static final HuntingKavuFilter filter = new HuntingKavuFilter(); + private static final FilterCreatureAttackingYou filter = new FilterCreatureAttackingYou("creature without flying that's attacking you"); static { filter.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); @@ -71,7 +68,7 @@ public class HuntingKavu extends CardImpl { // {1}{R}{G}, {tap}: Exile Hunting Kavu and target creature without flying that's attacking you. Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileSourceEffect(), new ManaCostsImpl("{1}{R}{G}")); ability.addCost(new TapSourceCost()); - ability.addEffect(new ExileTargetEffect()); + ability.addEffect(new ExileTargetEffect().setText("nd target creature without flying that's attacking you")); ability.addTarget(new TargetCreaturePermanent(filter)); this.addAbility(ability); } @@ -85,26 +82,3 @@ public class HuntingKavu extends CardImpl { return new HuntingKavu(this); } } - -class HuntingKavuFilter extends FilterAttackingCreature { - - public HuntingKavuFilter() { - super("creature without flying that's attacking you"); - } - - public HuntingKavuFilter(final HuntingKavuFilter filter) { - super(filter); - } - - @Override - public HuntingKavuFilter copy() { - return new HuntingKavuFilter(this); - } - - @Override - public boolean match(Permanent permanent, UUID sourceId, UUID playerId, Game game) { - return super.match(permanent, sourceId, playerId, game) - && permanent.isAttacking() // to prevent unneccessary combat checking if not attacking - && playerId.equals(game.getCombat().getDefenderId(permanent.getId())); - } -} diff --git a/Mage.Sets/src/mage/cards/s/SoulSnare.java b/Mage.Sets/src/mage/cards/s/SoulSnare.java index e68f31e8fa..984e93f80a 100644 --- a/Mage.Sets/src/mage/cards/s/SoulSnare.java +++ b/Mage.Sets/src/mage/cards/s/SoulSnare.java @@ -37,9 +37,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; -import mage.filter.common.FilterAttackingCreature; -import mage.game.Game; -import mage.game.permanent.Permanent; +import mage.target.common.FilterCreatureAttackingYou; import mage.target.common.TargetCreaturePermanent; /** @@ -56,7 +54,7 @@ public class SoulSnare extends CardImpl { Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new ManaCostsImpl("{W}")); ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetCreaturePermanent(new SoulSnareFilter())); + ability.addTarget(new TargetCreaturePermanent(new FilterCreatureAttackingYou(true))); this.addAbility(ability); } @@ -69,25 +67,3 @@ public class SoulSnare extends CardImpl { return new SoulSnare(this); } } - -class SoulSnareFilter extends FilterAttackingCreature { - - public SoulSnareFilter() { - super("creature that's attacking you or a planeswalker you control"); - } - - public SoulSnareFilter(final SoulSnareFilter filter) { - super(filter); - } - - @Override - public SoulSnareFilter copy() { - return new SoulSnareFilter(this); - } - - @Override - public boolean match(Permanent permanent, UUID sourceId, UUID playerId, Game game) { - return super.match(permanent, sourceId, playerId, game) - && playerId.equals(game.getCombat().getDefendingPlayerId(permanent.getId(), game)); - } -} diff --git a/Mage/src/main/java/mage/target/common/FilterCreatureAttackingYou.java b/Mage/src/main/java/mage/target/common/FilterCreatureAttackingYou.java new file mode 100644 index 0000000000..308089f38a --- /dev/null +++ b/Mage/src/main/java/mage/target/common/FilterCreatureAttackingYou.java @@ -0,0 +1,82 @@ +/* +* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, are +* permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, this list of +* conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, this list +* of conditions and the following disclaimer in the documentation and/or other materials +* provided with the distribution. +* +* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR +* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +* The views and conclusions contained in the software and documentation are those of the +* authors and should not be interpreted as representing official policies, either expressed +* or implied, of BetaSteward_at_googlemail.com. + */ +package mage.target.common; + +import java.util.UUID; +import mage.filter.common.FilterAttackingCreature; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author TheElk801 + */ +public class FilterCreatureAttackingYou extends FilterAttackingCreature { + + private final boolean orWalker; + + public FilterCreatureAttackingYou() { + this(false); + } + + public FilterCreatureAttackingYou(boolean orWalker) { + this("creature that's attacking you" + (orWalker ? "or a planeswalker you control" : ""), orWalker); + } + + public FilterCreatureAttackingYou(String name) { + this(name, false); + } + + public FilterCreatureAttackingYou(String name, boolean orWalker) { + super(name); + this.orWalker = orWalker; + } + + public FilterCreatureAttackingYou(final FilterCreatureAttackingYou filter) { + super(filter); + this.orWalker = filter.orWalker; + } + + @Override + public FilterCreatureAttackingYou copy() { + return new FilterCreatureAttackingYou(this); + } + + @Override + public boolean match(Permanent permanent, UUID sourceId, UUID playerId, Game game) { + if (orWalker) { + return super.match(permanent, sourceId, playerId, game) + && permanent.isAttacking() // to prevent unneccessary combat checking if not attacking + && playerId.equals(game.getCombat().getDefendingPlayerId(permanent.getId(), game)); + } else { + return super.match(permanent, sourceId, playerId, game) + && permanent.isAttacking() // to prevent unneccessary combat checking if not attacking + && playerId.equals(game.getCombat().getDefenderId(permanent.getId())); + } + } +}