mirror of
https://github.com/magefree/mage.git
synced 2025-12-30 07:22:03 -08:00
refactor DefendingPlayerControlsCondition (#10749)
This commit is contained in:
parent
f75b1c9f0a
commit
4ebfd79005
9 changed files with 84 additions and 56 deletions
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue