From b0809c4a7af4407d18f32f124ee083b048ae9669 Mon Sep 17 00:00:00 2001 From: Alexander Novotny Date: Wed, 7 Jun 2023 11:27:59 -0700 Subject: [PATCH] Beamtown Bullies now properly targets opponent (#10439) * Beamtown Bullies now properly targets opponent Fixes magefree/mage#9975 * Fixed filter initialization --- .../src/mage/cards/t/TheBeamtownBullies.java | 20 ++++++------ .../main/java/mage/filter/FilterPlayer.java | 3 +- .../other/ActivePlayerPredicate.java | 15 +++++++++ .../common/TargetOpponentWhoseTurnItIs.java | 31 ------------------- 4 files changed, 28 insertions(+), 41 deletions(-) create mode 100644 Mage/src/main/java/mage/filter/predicate/other/ActivePlayerPredicate.java delete mode 100644 Mage/src/main/java/mage/target/common/TargetOpponentWhoseTurnItIs.java diff --git a/Mage.Sets/src/mage/cards/t/TheBeamtownBullies.java b/Mage.Sets/src/mage/cards/t/TheBeamtownBullies.java index 195603e2649..b34a8417562 100644 --- a/Mage.Sets/src/mage/cards/t/TheBeamtownBullies.java +++ b/Mage.Sets/src/mage/cards/t/TheBeamtownBullies.java @@ -18,14 +18,17 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; +import mage.filter.Filter; import mage.filter.FilterCard; +import mage.filter.FilterOpponent; +import mage.filter.FilterPlayer; import mage.filter.predicate.Predicates; +import mage.filter.predicate.other.ActivePlayerPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPlayer; import mage.target.common.TargetCardInYourGraveyard; -import mage.target.common.TargetOpponentWhoseTurnItIs; import mage.target.targetpointer.FixedTarget; import java.util.UUID; @@ -36,10 +39,12 @@ import java.util.UUID; public final class TheBeamtownBullies extends CardImpl { private static final FilterCard filter = new FilterCard("nonlegendary creature card"); + private static final FilterPlayer playerFilter = new FilterOpponent(); static { filter.add(Predicates.not(SuperType.LEGENDARY.getPredicate())); filter.add(CardType.CREATURE.getPredicate()); + playerFilter.add(ActivePlayerPredicate.instance); } public TheBeamtownBullies(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{R}{G}"); @@ -59,6 +64,8 @@ public final class TheBeamtownBullies extends CardImpl { Ability ability = new SimpleActivatedAbility(new TheBeamtownBulliesEffect(), new TapSourceCost()); // Choose a non-legendary creature to put on the battlefield under their control + + ability.addTarget(new TargetPlayer(1, 1, false, playerFilter)); ability.addTarget(new TargetCardInYourGraveyard(filter)); this.addAbility(ability); @@ -85,17 +92,12 @@ class TheBeamtownBulliesEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - // Ability is targeted - TargetPlayer targetOpponent = new TargetOpponentWhoseTurnItIs(game); - Player controller = game.getPlayer(source.getControllerId()); - controller.chooseTarget(Outcome.Neutral, targetOpponent, source, game); - Player opponent = game.getPlayer(targetOpponent.getFirstTarget()); + Player opponent = game.getPlayer(source.getFirstTarget()); - // check to ensure it is the chosen opponent's turn - if (opponent != null && opponent.getId().equals(game.getActivePlayerId())) + if (opponent != null) { // Put the chosen card onto the battlefield under opponents control - Card card = game.getCard(source.getTargets().getFirstTarget()); + Card card = game.getCard(source.getTargets().get(1).getFirstTarget()); if (card == null || !opponent.moveCards(card, Zone.BATTLEFIELD, source, game)) { return false; } diff --git a/Mage/src/main/java/mage/filter/FilterPlayer.java b/Mage/src/main/java/mage/filter/FilterPlayer.java index 025433028f0..d28e4e08d5d 100644 --- a/Mage/src/main/java/mage/filter/FilterPlayer.java +++ b/Mage/src/main/java/mage/filter/FilterPlayer.java @@ -31,11 +31,12 @@ public class FilterPlayer extends FilterImpl { this.extraPredicates.addAll(filter.extraPredicates); } - public void add(ObjectSourcePlayerPredicate predicate) { + public FilterPlayer add(ObjectSourcePlayerPredicate predicate) { if (isLockedFilter()) { throw new UnsupportedOperationException("You may not modify a locked filter"); } extraPredicates.add(predicate); + return this; } @Override diff --git a/Mage/src/main/java/mage/filter/predicate/other/ActivePlayerPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/ActivePlayerPredicate.java new file mode 100644 index 00000000000..6b3bc38385e --- /dev/null +++ b/Mage/src/main/java/mage/filter/predicate/other/ActivePlayerPredicate.java @@ -0,0 +1,15 @@ +package mage.filter.predicate.other; + +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.players.Player; + +public enum ActivePlayerPredicate implements Predicate { + instance; + + @Override + public boolean apply(Player input, Game game) { + return game.isActivePlayer(input.getId()); + } + +} diff --git a/Mage/src/main/java/mage/target/common/TargetOpponentWhoseTurnItIs.java b/Mage/src/main/java/mage/target/common/TargetOpponentWhoseTurnItIs.java deleted file mode 100644 index a8495048da8..00000000000 --- a/Mage/src/main/java/mage/target/common/TargetOpponentWhoseTurnItIs.java +++ /dev/null @@ -1,31 +0,0 @@ -package mage.target.common; - -import mage.filter.FilterOpponent; -import mage.filter.predicate.other.PlayerIdPredicate; -import mage.game.Game; -import mage.target.TargetPlayer; - -/** - * @author Arketec - */ -public class TargetOpponentWhoseTurnItIs extends TargetPlayer { - - public TargetOpponentWhoseTurnItIs(Game game) { - this(game,false); - - } - - public TargetOpponentWhoseTurnItIs(Game game, boolean notTarget) { - super(1, 1, notTarget, new FilterOpponent()); - super.filter.add(new PlayerIdPredicate(game.getActivePlayerId())); - } - - private TargetOpponentWhoseTurnItIs(final TargetOpponentWhoseTurnItIs target) { - super(target); - } - - @Override - public TargetOpponentWhoseTurnItIs copy() { - return new TargetOpponentWhoseTurnItIs(this); - } -}