From dc8b51c59b351dc699a8fc0bdaef5d3e160745ea Mon Sep 17 00:00:00 2001 From: Omar Ballesteros Date: Sat, 28 Jun 2025 13:07:15 -0600 Subject: [PATCH] refactor: improved castMultipleWithAttributeForFree usage with exiled cards (close #13788) (#13794) --- Mage.Sets/src/mage/cards/c/CollectedConjuring.java | 2 ++ Mage.Sets/src/mage/cards/d/DanceWithCalamity.java | 2 ++ Mage.Sets/src/mage/cards/e/EmergentUltimatum.java | 2 ++ Mage.Sets/src/mage/cards/e/EpicExperiment.java | 2 ++ Mage.Sets/src/mage/cards/e/EtaliPrimalConqueror.java | 2 ++ Mage.Sets/src/mage/cards/e/EtaliPrimalStorm.java | 2 ++ Mage.Sets/src/mage/cards/f/FeveredSuspicion.java | 1 + Mage.Sets/src/mage/cards/g/GixYawgmothPraetor.java | 1 + Mage.Sets/src/mage/cards/h/HazoretsUndyingFury.java | 2 ++ Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java | 1 + Mage.Sets/src/mage/cards/k/KefkaDancingMad.java | 1 + Mage.Sets/src/mage/cards/k/KotisTheFangkeeper.java | 2 ++ Mage.Sets/src/mage/cards/k/KyloxVisionaryInventor.java | 2 ++ Mage.Sets/src/mage/cards/p/PrimevalSpawn.java | 2 ++ Mage.Sets/src/mage/cards/v/VillainousWealth.java | 2 ++ 15 files changed, 26 insertions(+) diff --git a/Mage.Sets/src/mage/cards/c/CollectedConjuring.java b/Mage.Sets/src/mage/cards/c/CollectedConjuring.java index b838db5ce86..c38757e772b 100644 --- a/Mage.Sets/src/mage/cards/c/CollectedConjuring.java +++ b/Mage.Sets/src/mage/cards/c/CollectedConjuring.java @@ -76,6 +76,8 @@ class CollectedConjuringEffect extends OneShotEffect { } Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 6)); controller.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, filter, 2); controller.putCardsOnBottomOfLibrary(cards, game, source, false); return true; diff --git a/Mage.Sets/src/mage/cards/d/DanceWithCalamity.java b/Mage.Sets/src/mage/cards/d/DanceWithCalamity.java index 5d947b3f73a..3b111b5bd05 100644 --- a/Mage.Sets/src/mage/cards/d/DanceWithCalamity.java +++ b/Mage.Sets/src/mage/cards/d/DanceWithCalamity.java @@ -78,6 +78,8 @@ class DanceWithCalamityEffect extends OneShotEffect { player.moveCards(card, Zone.EXILED, source, game); cards.add(card); } + game.processAction(); + cards.retainZone(Zone.EXILED, game); if (cards .getCards(game) .stream() diff --git a/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java b/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java index e9f2af707bc..8a7830e7c05 100644 --- a/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java +++ b/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java @@ -79,6 +79,8 @@ class EmergentUltimatumEffect extends OneShotEffect { boolean searched = player.searchLibrary(targetCardInLibrary, source, game); Cards cards = new CardsImpl(targetCardInLibrary.getTargets()); player.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); if (cards.isEmpty()) { if (searched) { player.shuffleLibrary(source, game); diff --git a/Mage.Sets/src/mage/cards/e/EpicExperiment.java b/Mage.Sets/src/mage/cards/e/EpicExperiment.java index a3a596dcce7..7ad32fff925 100644 --- a/Mage.Sets/src/mage/cards/e/EpicExperiment.java +++ b/Mage.Sets/src/mage/cards/e/EpicExperiment.java @@ -67,6 +67,8 @@ class EpicExperimentEffect extends OneShotEffect { } Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, CardUtil.getSourceCostsTag(game, source, "X", 0))); controller.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); FilterCard filter = new FilterInstantOrSorceryCard(); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, CardUtil.getSourceCostsTag(game, source, "X", 0) + 1)); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, filter); diff --git a/Mage.Sets/src/mage/cards/e/EtaliPrimalConqueror.java b/Mage.Sets/src/mage/cards/e/EtaliPrimalConqueror.java index 1a919e9d546..8330ea611f9 100644 --- a/Mage.Sets/src/mage/cards/e/EtaliPrimalConqueror.java +++ b/Mage.Sets/src/mage/cards/e/EtaliPrimalConqueror.java @@ -91,6 +91,8 @@ class EtaliPrimalConquerorEffect extends OneShotEffect { } } } + game.processAction(); + cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, StaticFilters.FILTER_CARD); return true; } diff --git a/Mage.Sets/src/mage/cards/e/EtaliPrimalStorm.java b/Mage.Sets/src/mage/cards/e/EtaliPrimalStorm.java index f16e32a1b6c..18a1d80e468 100644 --- a/Mage.Sets/src/mage/cards/e/EtaliPrimalStorm.java +++ b/Mage.Sets/src/mage/cards/e/EtaliPrimalStorm.java @@ -78,6 +78,8 @@ class EtaliPrimalStormEffect extends OneShotEffect { } } controller.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, filter); return true; } diff --git a/Mage.Sets/src/mage/cards/f/FeveredSuspicion.java b/Mage.Sets/src/mage/cards/f/FeveredSuspicion.java index 9032c3b34c9..2f9ecf9032b 100644 --- a/Mage.Sets/src/mage/cards/f/FeveredSuspicion.java +++ b/Mage.Sets/src/mage/cards/f/FeveredSuspicion.java @@ -78,6 +78,7 @@ class FeveredSuspicionEffect extends OneShotEffect { } } controller.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); nonlands.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree( controller, source, game, nonlands, diff --git a/Mage.Sets/src/mage/cards/g/GixYawgmothPraetor.java b/Mage.Sets/src/mage/cards/g/GixYawgmothPraetor.java index 6fa05c7b7ff..f9811fed4a4 100644 --- a/Mage.Sets/src/mage/cards/g/GixYawgmothPraetor.java +++ b/Mage.Sets/src/mage/cards/g/GixYawgmothPraetor.java @@ -144,6 +144,7 @@ class GixYawgmothPraetorExileEffect extends OneShotEffect { int xValue = GetXValue.instance.calculate(game, source, this); Set toExile = opponent.getLibrary().getTopCards(game, xValue); controller.moveCards(toExile, Zone.EXILED, source, game); + game.processAction(); Cards cards = new CardsImpl(toExile); cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, StaticFilters.FILTER_CARD, Integer.MAX_VALUE, null, true); diff --git a/Mage.Sets/src/mage/cards/h/HazoretsUndyingFury.java b/Mage.Sets/src/mage/cards/h/HazoretsUndyingFury.java index 2355abcea95..4bd75592ac4 100644 --- a/Mage.Sets/src/mage/cards/h/HazoretsUndyingFury.java +++ b/Mage.Sets/src/mage/cards/h/HazoretsUndyingFury.java @@ -79,6 +79,8 @@ class HazoretsUndyingFuryEffect extends OneShotEffect { // move cards from library to exile Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 4)); controller.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); // cast the possible cards without paying the mana CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, filter); return true; diff --git a/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java b/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java index ad4ef1f1cff..22499a1b5fc 100644 --- a/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java +++ b/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java @@ -108,6 +108,7 @@ class JaceArchitectOfThoughtEffect3 extends OneShotEffect { controller.moveCards(card, Zone.EXILED, source, game); player.shuffleLibrary(source, game); } + game.processAction(); cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, StaticFilters.FILTER_CARD); return true; diff --git a/Mage.Sets/src/mage/cards/k/KefkaDancingMad.java b/Mage.Sets/src/mage/cards/k/KefkaDancingMad.java index c3ab872f77e..7f7954118a2 100644 --- a/Mage.Sets/src/mage/cards/k/KefkaDancingMad.java +++ b/Mage.Sets/src/mage/cards/k/KefkaDancingMad.java @@ -114,6 +114,7 @@ class KefkaDancingMadEffect extends OneShotEffect { return false; } controller.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); cards.retainZone(Zone.EXILED, game); KefkaDancingMadTracker tracker = new KefkaDancingMadTracker(); CardUtil.castMultipleWithAttributeForFree( diff --git a/Mage.Sets/src/mage/cards/k/KotisTheFangkeeper.java b/Mage.Sets/src/mage/cards/k/KotisTheFangkeeper.java index ff609acbfcb..a95d43efa36 100644 --- a/Mage.Sets/src/mage/cards/k/KotisTheFangkeeper.java +++ b/Mage.Sets/src/mage/cards/k/KotisTheFangkeeper.java @@ -80,6 +80,8 @@ class KotisTheFangkeeperEffect extends OneShotEffect { controller.moveCards(cards, Zone.EXILED, source, game); FilterCard filter = new FilterCard(); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue + 1)); + game.processAction(); + cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, filter); return true; } diff --git a/Mage.Sets/src/mage/cards/k/KyloxVisionaryInventor.java b/Mage.Sets/src/mage/cards/k/KyloxVisionaryInventor.java index 871529737e2..00e094f447c 100644 --- a/Mage.Sets/src/mage/cards/k/KyloxVisionaryInventor.java +++ b/Mage.Sets/src/mage/cards/k/KyloxVisionaryInventor.java @@ -110,6 +110,8 @@ class KyloxVisionaryInventorEffect extends OneShotEffect { return true; } player.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree( player, source, game, cards, StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY diff --git a/Mage.Sets/src/mage/cards/p/PrimevalSpawn.java b/Mage.Sets/src/mage/cards/p/PrimevalSpawn.java index 5fead7a8e80..15c1a2a0146 100644 --- a/Mage.Sets/src/mage/cards/p/PrimevalSpawn.java +++ b/Mage.Sets/src/mage/cards/p/PrimevalSpawn.java @@ -132,6 +132,8 @@ class PrimevalSpawnSpellEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 10)); player.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); CardUtil.castMultipleWithAttributeForFree( player, source, game, cards, StaticFilters.FILTER_CARD, Integer.MAX_VALUE, new PrimevalSpawnTracker() diff --git a/Mage.Sets/src/mage/cards/v/VillainousWealth.java b/Mage.Sets/src/mage/cards/v/VillainousWealth.java index 15bbf0c8b63..a9da3ab3fb2 100644 --- a/Mage.Sets/src/mage/cards/v/VillainousWealth.java +++ b/Mage.Sets/src/mage/cards/v/VillainousWealth.java @@ -71,6 +71,8 @@ class VillainousWealthEffect extends OneShotEffect { } Cards cards = new CardsImpl(opponent.getLibrary().getTopCards(game, xValue)); opponent.moveCards(cards, Zone.EXILED, source, game); + game.processAction(); + cards.retainZone(Zone.EXILED, game); FilterCard filter = new FilterCard(); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, CardUtil.getSourceCostsTag(game, source, "X", 0) + 1)); CardUtil.castMultipleWithAttributeForFree(controller, source, game, cards, filter);