diff --git a/Mage.Sets/src/mage/cards/b/BouncingBeebles.java b/Mage.Sets/src/mage/cards/b/BouncingBeebles.java index 9ac58e46e5e..9e7d3ebec56 100644 --- a/Mage.Sets/src/mage/cards/b/BouncingBeebles.java +++ b/Mage.Sets/src/mage/cards/b/BouncingBeebles.java @@ -2,9 +2,10 @@ package mage.cards.b; import java.util.UUID; + import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsCondition; +import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; @@ -16,13 +17,12 @@ import mage.constants.Zone; import mage.filter.common.FilterArtifactPermanent; /** - * * @author Backfir3 */ public final class BouncingBeebles extends CardImpl { public BouncingBeebles(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.BEEBLE); this.power = new MageInt(2); @@ -31,7 +31,7 @@ public final class BouncingBeebles extends CardImpl { //Bouncing Beebles can't be blocked as long as defending player controls an artifact. Effect effect = new ConditionalRestrictionEffect( new CantBeBlockedSourceEffect(), - new DefendingPlayerControlsCondition(new FilterArtifactPermanent())); + new DefendingPlayerControlsSourceAttackingCondition(new FilterArtifactPermanent())); effect.setText("{this} can't be blocked as long as defending player controls an artifact"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/b/BubblingBeebles.java b/Mage.Sets/src/mage/cards/b/BubblingBeebles.java index 5767cfcf413..2a8fbef44b2 100644 --- a/Mage.Sets/src/mage/cards/b/BubblingBeebles.java +++ b/Mage.Sets/src/mage/cards/b/BubblingBeebles.java @@ -3,7 +3,7 @@ package mage.cards.b; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsCondition; +import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; @@ -17,13 +17,12 @@ import mage.filter.StaticFilters; import java.util.UUID; /** - * * @author Backfir3 */ public final class BubblingBeebles extends CardImpl { public BubblingBeebles(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{4}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}"); this.subtype.add(SubType.BEEBLE); this.power = new MageInt(3); @@ -32,7 +31,7 @@ public final class BubblingBeebles extends CardImpl { // Bubbling Beebles can't be blocked as long as defending player controls an enchantment. Effect effect = new ConditionalRestrictionEffect( new CantBeBlockedSourceEffect(), - new DefendingPlayerControlsCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT)); + new DefendingPlayerControlsSourceAttackingCondition(StaticFilters.FILTER_PERMANENT_ENCHANTMENT)); effect.setText("{this} can't be blocked as long as defending player controls an enchantment"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/h/HazyHomunculus.java b/Mage.Sets/src/mage/cards/h/HazyHomunculus.java index c8c9964fff8..0e2da313d78 100644 --- a/Mage.Sets/src/mage/cards/h/HazyHomunculus.java +++ b/Mage.Sets/src/mage/cards/h/HazyHomunculus.java @@ -2,9 +2,10 @@ package mage.cards.h; import java.util.UUID; + import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsCondition; +import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; @@ -18,7 +19,6 @@ import mage.filter.common.FilterLandPermanent; import mage.filter.predicate.permanent.TappedPredicate; /** - * * @author North */ public final class HazyHomunculus extends CardImpl { @@ -30,7 +30,7 @@ public final class HazyHomunculus extends CardImpl { } public HazyHomunculus(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); this.subtype.add(SubType.HOMUNCULUS); this.subtype.add(SubType.ILLUSION); @@ -40,7 +40,7 @@ public final class HazyHomunculus extends CardImpl { // Hazy Homunculus can't be blocked as long as defending player controls an untapped land. Effect effect = new ConditionalRestrictionEffect( new CantBeBlockedSourceEffect(), - new DefendingPlayerControlsCondition(filter)); + new DefendingPlayerControlsSourceAttackingCondition(filter)); effect.setText("{this} can't be blocked as long as defending player controls an untapped land"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/n/NeurokSpy.java b/Mage.Sets/src/mage/cards/n/NeurokSpy.java index 742638da563..57659344b4b 100644 --- a/Mage.Sets/src/mage/cards/n/NeurokSpy.java +++ b/Mage.Sets/src/mage/cards/n/NeurokSpy.java @@ -2,9 +2,10 @@ package mage.cards.n; import java.util.UUID; + import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsCondition; +import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; @@ -16,13 +17,12 @@ import mage.constants.Zone; import mage.filter.common.FilterArtifactPermanent; /** - * * @author Backfir3 */ public final class NeurokSpy extends CardImpl { public NeurokSpy(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ROGUE); @@ -32,7 +32,7 @@ public final class NeurokSpy extends CardImpl { //Neurok Spy can't be blocked as long as defending player controls an artifact. Effect effect = new ConditionalRestrictionEffect( new CantBeBlockedSourceEffect(), - new DefendingPlayerControlsCondition(new FilterArtifactPermanent())); + new DefendingPlayerControlsSourceAttackingCondition(new FilterArtifactPermanent())); effect.setText("{this} can't be blocked as long as defending player controls an artifact"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage.Sets/src/mage/cards/s/ScrapdiverSerpent.java b/Mage.Sets/src/mage/cards/s/ScrapdiverSerpent.java index 56b24917e11..23b290ebc08 100644 --- a/Mage.Sets/src/mage/cards/s/ScrapdiverSerpent.java +++ b/Mage.Sets/src/mage/cards/s/ScrapdiverSerpent.java @@ -2,10 +2,9 @@ package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsCondition; +import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; @@ -16,14 +15,15 @@ import mage.constants.SubType; import mage.constants.Zone; import mage.filter.common.FilterArtifactPermanent; +import java.util.UUID; + /** - * * @author ayratn */ public final class ScrapdiverSerpent extends CardImpl { - public ScrapdiverSerpent (UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{5}{U}{U}"); + public ScrapdiverSerpent(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{U}{U}"); this.subtype.add(SubType.SERPENT); this.power = new MageInt(5); @@ -32,12 +32,12 @@ public final class ScrapdiverSerpent extends CardImpl { // Scrapdiver Serpent can't be blocked as long as defending player controls an artifact Effect effect = new ConditionalRestrictionEffect( new CantBeBlockedSourceEffect(), - new DefendingPlayerControlsCondition(new FilterArtifactPermanent())); + new DefendingPlayerControlsSourceAttackingCondition(new FilterArtifactPermanent())); effect.setText("{this} can't be blocked as long as defending player controls an artifact"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } - public ScrapdiverSerpent (final ScrapdiverSerpent card) { + private ScrapdiverSerpent(final ScrapdiverSerpent card) { super(card); } diff --git a/Mage.Sets/src/mage/cards/t/Tanglewalker.java b/Mage.Sets/src/mage/cards/t/Tanglewalker.java index 665c54aeef7..0a2cf0622f5 100644 --- a/Mage.Sets/src/mage/cards/t/Tanglewalker.java +++ b/Mage.Sets/src/mage/cards/t/Tanglewalker.java @@ -1,25 +1,25 @@ package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsCondition; +import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; import mage.abilities.decorator.ConditionalRestrictionEffect; import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.StaticFilters; import mage.filter.common.FilterLandPermanent; +import java.util.UUID; + /** - * * @author North */ public final class Tanglewalker extends CardImpl { @@ -31,7 +31,7 @@ public final class Tanglewalker extends CardImpl { } public Tanglewalker(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{G}"); this.subtype.add(SubType.DRYAD); this.power = new MageInt(2); @@ -40,7 +40,7 @@ public final class Tanglewalker extends CardImpl { // Each creature you control can't be blocked as long as defending player controls an artifact land. Effect effect = new ConditionalRestrictionEffect( new CantBeBlockedAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, Duration.WhileOnBattlefield), - new DefendingPlayerControlsCondition(filter)); + new DefendingPlayerControlsSourceAttackingCondition(filter)); effect.setText("Each creature you control can't be blocked as long as defending player controls an artifact land"); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsCondition.java b/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsCondition.java deleted file mode 100644 index 6b709442597..00000000000 --- a/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsCondition.java +++ /dev/null @@ -1,27 +0,0 @@ - -package mage.abilities.condition.common; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.filter.FilterPermanent; -import mage.game.Game; - -/** - * - * @author North - */ -public class DefendingPlayerControlsCondition implements Condition { - - private final FilterPermanent filter; - - public DefendingPlayerControlsCondition(FilterPermanent filter) { - this.filter = filter; - } - - @Override - public boolean apply(Game game, Ability source) { - UUID defendingPlayer = game.getCombat().getDefenderId(source.getSourceId()); - return defendingPlayer != null && game.getBattlefield().countAll(filter, defendingPlayer, game) > 0; - } -} diff --git a/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsNoSourceCondition.java b/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsNoSourceCondition.java new file mode 100644 index 00000000000..afe26d7a571 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsNoSourceCondition.java @@ -0,0 +1,29 @@ + +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.filter.FilterPermanent; +import mage.filter.predicate.permanent.DefendingPlayerControlsNoSourcePredicate; +import mage.game.Game; + +/** + * This condition always returns false outside of the combat phase. + * + * @author Susucr + */ +public class DefendingPlayerControlsNoSourceCondition implements Condition { + + private final FilterPermanent filter; + + public DefendingPlayerControlsNoSourceCondition(FilterPermanent filter) { + this.filter = filter.copy(); + this.filter.add(DefendingPlayerControlsNoSourcePredicate.instance); + } + + @Override + public boolean apply(Game game, Ability source) { + return game.getBattlefield().count(filter, source.getControllerId(), source, game) > 0; + } + +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsSourceAttackingCondition.java b/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsSourceAttackingCondition.java new file mode 100644 index 00000000000..92e1c256b20 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/condition/common/DefendingPlayerControlsSourceAttackingCondition.java @@ -0,0 +1,27 @@ + +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.filter.FilterPermanent; +import mage.filter.predicate.permanent.DefendingPlayerControlsSourceAttackingPredicate; +import mage.game.Game; + +/** + * @author Susucr + */ +public class DefendingPlayerControlsSourceAttackingCondition implements Condition { + + private final FilterPermanent filter; + + public DefendingPlayerControlsSourceAttackingCondition(FilterPermanent filter) { + this.filter = filter.copy(); + this.filter.add(DefendingPlayerControlsSourceAttackingPredicate.instance); + } + + @Override + public boolean apply(Game game, Ability source) { + return game.getBattlefield().count(filter, source.getControllerId(), source, game) > 0; + } + +}