From 035913988a6759a14b255c2f78e747ed39c18431 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Sun, 20 Aug 2023 13:28:37 -0400 Subject: [PATCH] refactor: standardize to CantAttackYouAllEffect (#10923) * adjust CantAttackYouAllEffect text, check permanent is planeswalker * switch 3 cards to main class, remove redundant class --- .../mage/cards/r/RiteOfTheRagingStorm.java | 21 +++---- .../src/mage/cards/s/SandwurmConvergence.java | 10 +--- .../cards/v/VarchildBetrayerOfKjeldor.java | 7 +-- .../common/combat/CantAttackYouAllEffect.java | 6 +- .../CantAttackYouOrPlaneswalkerAllEffect.java | 57 ------------------- 5 files changed, 16 insertions(+), 85 deletions(-) delete mode 100644 Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.java diff --git a/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java b/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java index eb35d50e435..028b2b40eb7 100644 --- a/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java +++ b/Mage.Sets/src/mage/cards/r/RiteOfTheRagingStorm.java @@ -1,33 +1,28 @@ - package mage.cards.r; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.combat.CantAttackYouOrPlaneswalkerAllEffect; +import mage.abilities.effects.common.combat.CantAttackYouAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.NamePredicate; import mage.game.Game; import mage.game.permanent.token.LightningRagerToken; import mage.players.Player; +import java.util.UUID; + /** * * @author fireshoes */ public final class RiteOfTheRagingStorm extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures named Lightning Rager"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures named Lightning Rager"); static { filter.add(new NamePredicate("Lightning Rager")); @@ -37,9 +32,7 @@ public final class RiteOfTheRagingStorm extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}{R}"); // Creatures named Lightning Rager can't attack you or planeswalkers you control. - Effect effect = new CantAttackYouOrPlaneswalkerAllEffect(Duration.WhileOnBattlefield, filter); - effect.setText("Creatures named Lightning Rager can't attack you or planeswalkers you control"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new CantAttackYouAllEffect(Duration.WhileOnBattlefield, filter, true))); // At the beginning of each player's upkeep, that player creates a 5/1 red Elemental creature token named Lightning Rager. // It has trample, haste, and "At the beginning of the end step, sacrifice this creature." @@ -64,7 +57,7 @@ class RiteOfTheRagingStormEffect extends OneShotEffect { + "It has trample, haste, and \"At the beginning of the end step, sacrifice this creature.\""; } - RiteOfTheRagingStormEffect(RiteOfTheRagingStormEffect effect) { + private RiteOfTheRagingStormEffect(final RiteOfTheRagingStormEffect effect) { super(effect); } diff --git a/Mage.Sets/src/mage/cards/s/SandwurmConvergence.java b/Mage.Sets/src/mage/cards/s/SandwurmConvergence.java index f1b00df21c8..f5b92d0e78d 100644 --- a/Mage.Sets/src/mage/cards/s/SandwurmConvergence.java +++ b/Mage.Sets/src/mage/cards/s/SandwurmConvergence.java @@ -2,16 +2,14 @@ package mage.cards.s; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.combat.CantAttackYouOrPlaneswalkerAllEffect; +import mage.abilities.effects.common.combat.CantAttackYouAllEffect; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.TargetController; -import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; import mage.game.permanent.token.Wurm55Token; @@ -23,7 +21,7 @@ import java.util.UUID; */ public final class SandwurmConvergence extends CardImpl { - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Creatures with flying"); + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("creatures with flying"); static { filter.add(new AbilityPredicate(FlyingAbility.class)); @@ -33,9 +31,7 @@ public final class SandwurmConvergence extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{6}{G}{G}"); // Creatures with flying can't attack you or planeswalkers you control. - Effect effect = new CantAttackYouOrPlaneswalkerAllEffect(Duration.WhileOnBattlefield, filter); - effect.setText("Creatures with flying can't attack you or planeswalkers you control"); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + this.addAbility(new SimpleStaticAbility(new CantAttackYouAllEffect(Duration.WhileOnBattlefield, filter, true))); // At the beginning of your end step, create a 5/5 green Wurm creature token. this.addAbility(new BeginningOfEndStepTriggeredAbility(new CreateTokenEffect(new Wurm55Token()), TargetController.YOU, false)); diff --git a/Mage.Sets/src/mage/cards/v/VarchildBetrayerOfKjeldor.java b/Mage.Sets/src/mage/cards/v/VarchildBetrayerOfKjeldor.java index 4a6c96361ec..4e428666e23 100644 --- a/Mage.Sets/src/mage/cards/v/VarchildBetrayerOfKjeldor.java +++ b/Mage.Sets/src/mage/cards/v/VarchildBetrayerOfKjeldor.java @@ -8,7 +8,7 @@ import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.SavedDamageValue; import mage.abilities.effects.common.CreateTokenTargetEffect; -import mage.abilities.effects.common.combat.CantAttackYouOrPlaneswalkerAllEffect; +import mage.abilities.effects.common.combat.CantAttackYouAllEffect; import mage.abilities.effects.common.combat.CantBlockAllEffect; import mage.abilities.effects.common.continuous.GainControlAllEffect; import mage.cards.CardImpl; @@ -49,9 +49,8 @@ public final class VarchildBetrayerOfKjeldor extends CardImpl { // Survivors your opponents control can't block, and they can't attack you or a planeswalker you control. Ability ability = new SimpleStaticAbility(new CantBlockAllEffect(filter1, Duration.WhileOnBattlefield)); - ability.addEffect(new CantAttackYouOrPlaneswalkerAllEffect( - Duration.WhileOnBattlefield, filter1 - ).setText("and can't attack you or planeswalkers you control")); + ability.addEffect(new CantAttackYouAllEffect(Duration.WhileOnBattlefield, filter1, true) + .setText("and they can't attack you or planeswalkers you control")); this.addAbility(ability); // When Varchild leaves the battlefield, gain control of all Survivors. diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java index fcdac865536..84c87acae1d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java @@ -32,11 +32,11 @@ public class CantAttackYouAllEffect extends RestrictionEffect { this.filterAttacker = filter; this.alsoPlaneswalker = alsoPlaneswalker; staticText = filterAttacker.getMessage() + " can't attack you" - + (alsoPlaneswalker ? " or a planeswalker you control" : "") + + (alsoPlaneswalker ? " or planeswalkers you control" : "") + (duration == Duration.UntilYourNextTurn || duration == Duration.UntilEndOfYourNextTurn ? " " + duration.toString() : ""); } - CantAttackYouAllEffect(final CantAttackYouAllEffect effect) { + protected CantAttackYouAllEffect(final CantAttackYouAllEffect effect) { super(effect); this.filterAttacker = effect.filterAttacker; this.alsoPlaneswalker = effect.alsoPlaneswalker; @@ -54,7 +54,7 @@ public class CantAttackYouAllEffect extends RestrictionEffect { } if (alsoPlaneswalker) { Permanent planeswalker = game.getPermanent(defenderId); - if (planeswalker != null) { + if (planeswalker != null && planeswalker.isPlaneswalker(game)) { defenderId = planeswalker.getControllerId(); } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.java deleted file mode 100644 index a5c208b1c50..00000000000 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouOrPlaneswalkerAllEffect.java +++ /dev/null @@ -1,57 +0,0 @@ -package mage.abilities.effects.common.combat; - -import mage.abilities.Ability; -import mage.abilities.effects.RestrictionEffect; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; - -import java.util.UUID; - -/** - * @author fireshoes - */ -public class CantAttackYouOrPlaneswalkerAllEffect extends RestrictionEffect { - - private final FilterCreaturePermanent filterAttacker; - - public CantAttackYouOrPlaneswalkerAllEffect(Duration duration) { - this(duration, new FilterCreaturePermanent()); - } - - public CantAttackYouOrPlaneswalkerAllEffect(Duration duration, FilterCreaturePermanent filter) { - super(duration, Outcome.Benefit); - this.filterAttacker = filter; - staticText = "Creatures can't attack you"; - } - - CantAttackYouOrPlaneswalkerAllEffect(final CantAttackYouOrPlaneswalkerAllEffect effect) { - super(effect); - this.filterAttacker = effect.filterAttacker; - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return filterAttacker.match(permanent, source.getControllerId(), source, game); - } - - @Override - public boolean canAttack(Permanent attacker, UUID defenderId, Ability source, Game game, boolean canUseChooseDialogs) { - if (defenderId == null) { - return true; - } - - if (defenderId.equals(source.getControllerId())) { - return false; - } - Permanent planeswalker = game.getPermanent(defenderId); - return planeswalker == null || !planeswalker.isControlledBy(source.getControllerId()); - } - - @Override - public CantAttackYouOrPlaneswalkerAllEffect copy() { - return new CantAttackYouOrPlaneswalkerAllEffect(this); - } -}