refactor DefendingPlayerControlsCondition (#10749)

This commit is contained in:
Susucre 2023-08-05 02:10:08 +02:00 committed by GitHub
parent f75b1c9f0a
commit 4ebfd79005
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 84 additions and 56 deletions

View file

@ -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));
}

View file

@ -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));
}

View file

@ -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));
}

View file

@ -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));
}

View file

@ -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);
}

View file

@ -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));
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}