From 25e559dd9d24ea2e252821ca80b6d186eccc2a48 Mon Sep 17 00:00:00 2001 From: xenohedron Date: Sun, 8 Oct 2023 17:53:49 -0400 Subject: [PATCH] fix Blightwing Bandit (#11282) --- .../src/mage/cards/b/BlightwingBandit.java | 11 +++-------- ...rstSpellOpponentsTurnTriggeredAbility.java | 19 +++++++++++++++---- .../SpellCastControllerTriggeredAbility.java | 8 ++++---- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BlightwingBandit.java b/Mage.Sets/src/mage/cards/b/BlightwingBandit.java index 85a46b8e704..69207177d8d 100644 --- a/Mage.Sets/src/mage/cards/b/BlightwingBandit.java +++ b/Mage.Sets/src/mage/cards/b/BlightwingBandit.java @@ -5,7 +5,7 @@ import java.util.Set; import java.util.UUID; import mage.MageInt; import mage.MageObject; -import mage.constants.SubType; +import mage.constants.*; import mage.game.Game; import mage.players.ManaPoolItem; import mage.players.Player; @@ -23,11 +23,6 @@ import mage.abilities.keyword.DeathtouchAbility; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AsThoughEffectType; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.ManaType; -import mage.constants.Outcome; /** * @@ -50,7 +45,7 @@ public final class BlightwingBandit extends CardImpl { this.addAbility(DeathtouchAbility.getInstance()); // Whenever you cast your first spell during each opponent's turn, look at the top card of that player's library, then exile it face down. You may play that card for as long as it remains exiled, and mana of any type can be spent to cast it. - this.addAbility(new FirstSpellOpponentsTurnTriggeredAbility(new BlightwingBanditEffect(), false)); + this.addAbility(new FirstSpellOpponentsTurnTriggeredAbility(new BlightwingBanditEffect(), false, SetTargetPointer.PLAYER)); } private BlightwingBandit(final BlightwingBandit card) { @@ -221,4 +216,4 @@ class BlightwingBanditSpendAnyManaEffect extends AsThoughEffectImpl implements A public ManaType getAsThoughManaType(ManaType manaType, ManaPoolItem mana, UUID affectedControllerId, Ability source, Game game) { return mana.getFirstAvailable(); } -} \ No newline at end of file +} diff --git a/Mage/src/main/java/mage/abilities/common/FirstSpellOpponentsTurnTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/FirstSpellOpponentsTurnTriggeredAbility.java index e83a49b724a..8e476ab9176 100644 --- a/Mage/src/main/java/mage/abilities/common/FirstSpellOpponentsTurnTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/FirstSpellOpponentsTurnTriggeredAbility.java @@ -1,9 +1,11 @@ package mage.abilities.common; import mage.abilities.effects.Effect; +import mage.constants.SetTargetPointer; import mage.filter.FilterSpell; import mage.game.Game; import mage.game.events.GameEvent; +import mage.target.targetpointer.FixedTarget; import mage.watchers.common.SpellsCastWatcher; /** @@ -15,10 +17,14 @@ public class FirstSpellOpponentsTurnTriggeredAbility extends SpellCastController = new FilterSpell("your first spell during each opponent's turn"); public FirstSpellOpponentsTurnTriggeredAbility(Effect effect, boolean optional) { - super(effect, defaultFilter, optional); + this(effect, optional, SetTargetPointer.NONE); } - private FirstSpellOpponentsTurnTriggeredAbility(final FirstSpellOpponentsTurnTriggeredAbility ability) { + public FirstSpellOpponentsTurnTriggeredAbility(Effect effect, boolean optional, SetTargetPointer setTargetPointer) { + super(effect, defaultFilter, optional, setTargetPointer); + } + + protected FirstSpellOpponentsTurnTriggeredAbility(final FirstSpellOpponentsTurnTriggeredAbility ability) { super(ability); } @@ -30,11 +36,16 @@ public class FirstSpellOpponentsTurnTriggeredAbility extends SpellCastController @Override public boolean checkTrigger(GameEvent event, Game game) { if (game.isActivePlayer(this.getControllerId()) // ignore controller turn - || !super.checkTrigger(event, game) || !game.getOpponents(this.getControllerId()).contains(game.getActivePlayerId())) { return false; } SpellsCastWatcher watcher = game.getState().getWatcher(SpellsCastWatcher.class); - return watcher != null && watcher.getCount(event.getPlayerId()) == 1; + if (watcher != null && (watcher.getCount(event.getPlayerId()) == 1) && super.checkTrigger(event, game)) { + if (setTargetPointer == SetTargetPointer.PLAYER) { // not handled in super class + getAllEffects().setTargetPointer(new FixedTarget(game.getActivePlayerId())); + } + return true; + } + return false; } } diff --git a/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java index 728e67f5d3f..2e23f21c72c 100644 --- a/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/SpellCastControllerTriggeredAbility.java @@ -83,15 +83,16 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl { this.getEffects().setValue("spellCast", spell); switch (setTargetPointer) { case NONE: + case PLAYER: // for subclasses only, needs to be handled there break; case SPELL: - getEffects().setTargetPointer(new FixedTarget(spell.getId(), game)); + getAllEffects().setTargetPointer(new FixedTarget(spell.getId(), game)); break; case CARD: - getEffects().setTargetPointer(new FixedTarget(spell.getCard().getId())); + getAllEffects().setTargetPointer(new FixedTarget(spell.getCard().getId())); break; default: - throw new UnsupportedOperationException("Unexpected setTargetPointer " + setTargetPointer); + throw new UnsupportedOperationException("Unexpected setTargetPointer in SpellCastControllerTriggeredAbility: " + setTargetPointer); } return true; } @@ -114,7 +115,6 @@ public class SpellCastControllerTriggeredAbility extends TriggeredAbilityImpl { text += " from your " + fromZone.toString().toLowerCase(); break; } - setTriggerPhrase(text + ", "); } }