From 2a23e81e9c550a0c574c8df70553c3c8e95003f2 Mon Sep 17 00:00:00 2001 From: jeffwadsworth Date: Tue, 19 Jan 2021 09:28:00 -0600 Subject: [PATCH] - refactor a few parts of Valki, God of Lies and its emblem --- .../src/mage/cards/v/ValkiGodOfLies.java | 41 +++++++++++++------ .../emblems/TibaltCosmicImposterEmblem.java | 1 + 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java b/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java index 675279e1ee9..e4c5891e38f 100644 --- a/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java +++ b/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java @@ -1,5 +1,6 @@ package mage.cards.v; +import java.util.LinkedHashSet; import java.util.Set; import java.util.UUID; import mage.MageInt; @@ -116,6 +117,7 @@ class ValkiGodOfLiesRevealExileEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); MageObject Valki = game.getObject(source.getSourceId()); + Set cardsToExile = new LinkedHashSet<>(); if (controller != null && Valki != null) { UUID exileId = CardUtil.getExileZoneId(source.getSourceId().toString() + Valki.getZoneChangeCounter(game), game); @@ -129,11 +131,13 @@ class ValkiGodOfLiesRevealExileEffect extends OneShotEffect { Card targetedCardToExile = game.getCard(targetToExile.getFirstTarget()); if (targetedCardToExile != null && game.getState().getZone(source.getSourceId()) == Zone.BATTLEFIELD) { - controller.moveCardsToExile(targetedCardToExile, source, game, true, exileId, Valki.getName()); + cardsToExile.add(targetedCardToExile); } } } } + // exile all cards at one time + controller.moveCardsToExile(cardsToExile, source, game, true, exileId, Valki.getName()); game.addDelayedTriggeredAbility(new ValkiGodOfLiesReturnExiledCardAbility(), source); return true; } @@ -178,7 +182,7 @@ class ValkiGodOfLiesReturnExiledCardAbility extends DelayedTriggeredAbility { class ValkiGodOfLiesReturnExiledCardEffect extends OneShotEffect { public ValkiGodOfLiesReturnExiledCardEffect() { - super(Outcome.Benefit); + super(Outcome.Neutral); this.staticText = "Return exiled card to its owner's hand"; } @@ -195,8 +199,9 @@ class ValkiGodOfLiesReturnExiledCardEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); MageObject Valki = game.getObject(source.getSourceId()); - if (Valki != null - && controller != null) { + if (controller != null + && Valki != null) { + // Valki, God of Lies has changed zone, so make sure to get the exile zone information from its previous state UUID exileId = CardUtil.getExileZoneId(source.getSourceId().toString() + (Valki.getZoneChangeCounter(game) - 1), game); ExileZone exile = game.getExile().getExileZone(exileId); Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); @@ -271,15 +276,20 @@ class ExileTopCardEachPlayersLibrary extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); + MageObject Tibalt = source.getSourceObject(game); UUID exileId = CardUtil.getExileZoneId(source.getSourceId().toString(), game); - if (controller != null) { + Set cardsToExile = new LinkedHashSet<>(); + if (controller != null + && Tibalt != null) { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { Card topCard = player.getLibrary().getFromTop(game); - controller.moveCardsToExile(topCard, source, game, true, exileId, "Tibalt, Cosmic Imposter"); + cardsToExile.add(topCard); } } + // exile all cards at one time + controller.moveCardsToExile(cardsToExile, source, game, true, exileId, Tibalt.getName()); return true; } return false; @@ -305,11 +315,13 @@ class ExileTargetArtifactOrCreatureEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); + MageObject Tibalt = source.getSourceObject(game); UUID exileId = CardUtil.getExileZoneId(source.getSourceId().toString(), game); - if (controller != null) { + if (controller != null + && Tibalt != null) { Permanent targetCreatureOrArtifact = game.getPermanent(source.getTargets().getFirstTarget()); if (targetCreatureOrArtifact != null) { - controller.moveCardsToExile(targetCreatureOrArtifact, source, game, true, exileId, "Tibalt, Cosmic Imposter"); + controller.moveCardsToExile(targetCreatureOrArtifact, source, game, true, exileId, Tibalt.getName()); return true; } } @@ -336,16 +348,21 @@ class ExileAllCardsFromAllGraveyards extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); + MageObject Tibalt = source.getSourceObject(game); + Set cardsToExile = new LinkedHashSet<>(); UUID exileId = CardUtil.getExileZoneId(source.getSourceId().toString(), game); - if (controller != null) { + if (controller != null + && Tibalt != null) { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { - Set cardsInGraveyard = player.getGraveyard().getCards(game); - controller.moveCardsToExile(cardsInGraveyard, source, game, true, exileId, "Tibalt, Cosmic Imposter"); + cardsToExile.addAll(player.getGraveyard().getCards(game)); } } - controller.getManaPool().addMana(Mana.RedMana(3), game, source); // add {R}{R}{R} + // exile all cards at one time + controller.moveCardsToExile(cardsToExile, source, game, true, exileId, Tibalt.getName()); + // add {R}{R}{R} + controller.getManaPool().addMana(Mana.RedMana(3), game, source); return true; } return false; diff --git a/Mage/src/main/java/mage/game/command/emblems/TibaltCosmicImposterEmblem.java b/Mage/src/main/java/mage/game/command/emblems/TibaltCosmicImposterEmblem.java index fcdd007efe7..50e12dd13ea 100644 --- a/Mage/src/main/java/mage/game/command/emblems/TibaltCosmicImposterEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/TibaltCosmicImposterEmblem.java @@ -56,6 +56,7 @@ class TibaltCosmicImposterPlayFromExileEffect extends AsThoughEffectImpl { if (tibaltEmblem == null) { return false; } + // the exile zone of the Tibalt, Cosmic Imposter that spawned the emblem only UUID exileId = CardUtil.getExileZoneId(tibaltEmblem.getSourceObject().getId().toString(), game); if (exileId == null) { return false;