From 288a1ec02cd2b3c26b261936a2a883345bd1e064 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 12 Oct 2015 23:10:16 +0200 Subject: [PATCH] * Oath of Lieges - Fixed target handling (fixes #1312). --- .../src/mage/sets/exodus/OathOfLieges.java | 22 ++-- .../cards/enchantments/OathOfLiegesTest.java | 124 ++++++++++++++++++ .../java/org/mage/test/player/TestPlayer.java | 29 +++- Mage/src/mage/game/GameImpl.java | 2 +- 4 files changed, 163 insertions(+), 14 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/enchantments/OathOfLiegesTest.java diff --git a/Mage.Sets/src/mage/sets/exodus/OathOfLieges.java b/Mage.Sets/src/mage/sets/exodus/OathOfLieges.java index b7a8d637588..f11e6b7823e 100644 --- a/Mage.Sets/src/mage/sets/exodus/OathOfLieges.java +++ b/Mage.Sets/src/mage/sets/exodus/OathOfLieges.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.Effect; -import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayTargetPlayerEffect; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; @@ -46,14 +46,16 @@ import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; import mage.target.common.TargetCardInLibrary; +import mage.target.targetpointer.FixedTarget; /** * * @author emerald000 */ public class OathOfLieges extends CardImpl { - - private static final FilterPlayer filter = new FilterPlayer(); + + private static final FilterPlayer filter = new FilterPlayer("player who controls more lands than you do and is his your opponent"); + static { filter.add(new OathOfLiegesPredicate()); } @@ -62,9 +64,8 @@ public class OathOfLieges extends CardImpl { super(ownerId, 11, "Oath of Lieges", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); this.expansionSetCode = "EXO"; - // At the beginning of each player's upkeep, that player chooses target player who controls more lands than he or she does and is his or her opponent. The first player may search his or her library for a basic land card, put that card onto the battlefield, then shuffle his or her library. - Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterBasicLandCard()), false, Outcome.PutLandInPlay); + Effect effect = new SearchLibraryPutInPlayTargetPlayerEffect(new TargetCardInLibrary(new FilterBasicLandCard()), false, Outcome.PutLandInPlay); effect.setText("that player chooses target player who controls more lands than he or she does and is his or her opponent. The first player may search his or her library for a basic land card, put that card onto the battlefield, then shuffle his or her library"); Ability ability = new BeginningOfUpkeepTriggeredAbility(effect, TargetController.ANY, true); ability.addTarget(new TargetPlayer(1, 1, false, filter)); @@ -74,16 +75,21 @@ public class OathOfLieges extends CardImpl { public OathOfLieges(final OathOfLieges card) { super(card); } - + @Override public void adjustTargets(Ability ability, Game game) { if (ability instanceof BeginningOfUpkeepTriggeredAbility) { Player activePlayer = game.getPlayer(game.getActivePlayerId()); if (activePlayer != null) { - ability.setControllerId(activePlayer.getId()); ability.getTargets().clear(); TargetPlayer target = new TargetPlayer(1, 1, false, filter); + target.setTargetController(activePlayer.getId()); ability.getTargets().add(target); + for (Effect effect : ability.getEffects()) { + if (effect instanceof SearchLibraryPutInPlayTargetPlayerEffect) { + effect.setTargetPointer(new FixedTarget(activePlayer.getId())); + } + } } } } @@ -119,4 +125,4 @@ class OathOfLiegesPredicate implements ObjectSourcePlayerPredicate abilities, Game game) { if (!choices.isEmpty()) { @@ -1891,11 +1915,6 @@ public class TestPlayer implements Player { return computerPlayer.choose(outcome, cards, target, game); } - @Override - public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) { - return computerPlayer.chooseTarget(outcome, cards, target, source, game); - } - @Override public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) { return computerPlayer.chooseTargetAmount(outcome, target, source, game); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 27abfa58db1..f67b6387437 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1467,7 +1467,7 @@ public abstract class GameImpl implements Game, Serializable { } else { TriggeredAbility newAbility = ability.copy(); newAbility.newId(); - // Too early, becuase no targets set yet !!!!!!!!!!! + // Too early, because no targets set yet !!!!!!!!!!! for (Effect effect : newAbility.getEffects()) { effect.getTargetPointer().init(this, newAbility); }