diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/cost/adventure/CastAdventureCardsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/cost/adventure/CastAdventureCardsTest.java index bc7a277ec75..f8a1d125364 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/cost/adventure/CastAdventureCardsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/cost/adventure/CastAdventureCardsTest.java @@ -7,14 +7,44 @@ import org.mage.test.serverside.base.CardTestPlayerBase; public class CastAdventureCardsTest extends CardTestPlayerBase { @Test - public void testCastCuriousPair() { + public void testCastTreatsToShare() { addCard(Zone.BATTLEFIELD, playerA, "Forest"); addCard(Zone.HAND, playerA, "Curious Pair"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share"); setStopAt(1, PhaseStep.BEGIN_COMBAT); execute(); assertPermanentCount(playerA, "Food", 1); assertExileCount(playerA, "Curious Pair", 1); assertGraveyardCount(playerA,0); } + + @Test + public void testCastCuriousPair() { + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.HAND, playerA, "Curious Pair"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerA, "Food", 0); + assertPermanentCount(playerA, "Curious Pair", 1); + assertExileCount(playerA, "Curious Pair", 0); + assertGraveyardCount(playerA,0); + } + + @Test + public void testCastTreatsToShareAndCuriousPair() { + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, "Forest"); + addCard(Zone.HAND, playerA, "Curious Pair"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Treats to Share"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Curious Pair"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerA, "Food", 1); + assertPermanentCount(playerA, "Curious Pair", 1); + assertExileCount(playerA, "Curious Pair", 0); + assertGraveyardCount(playerA, 0); + } } diff --git a/Mage/src/main/java/mage/cards/AdventureCard.java b/Mage/src/main/java/mage/cards/AdventureCard.java index b132c4ebb72..1bd3f16d016 100644 --- a/Mage/src/main/java/mage/cards/AdventureCard.java +++ b/Mage/src/main/java/mage/cards/AdventureCard.java @@ -21,14 +21,14 @@ public abstract class AdventureCard extends CardImpl { /* The adventure spell card, i.e. Swift End. */ protected Card spellCard; - /* The ability to cast the creature from exile. */ - protected SpellAbility adventureCreatureAbility; public AdventureCard(UUID ownerId, CardSetInfo setInfo, CardType[] types, CardType[] typesSpell, String costs, String adventureName, String costsSpell) { super(ownerId, setInfo, types, costs); spellCard = new AdventureCardSpellImpl(ownerId, setInfo, typesSpell, costsSpell, this); spellCard.getSpellAbility().addEffect(ExileAdventureSpellEffect.getInstance()); - adventureCreatureAbility = new AdventureCreatureAbility(new ManaCostsImpl(costs)); + spellCard.setName(adventureName); + spellCard.getSpellAbility().setCardName(adventureName); + this.addAbility(spellCard.getSpellAbility()); } public AdventureCard(AdventureCard card) { diff --git a/Mage/src/main/java/mage/cards/CardImpl.java b/Mage/src/main/java/mage/cards/CardImpl.java index d903a30b0b3..2b9ea65e52f 100644 --- a/Mage/src/main/java/mage/cards/CardImpl.java +++ b/Mage/src/main/java/mage/cards/CardImpl.java @@ -505,6 +505,9 @@ public abstract class CardImpl extends MageObjectImpl implements Card { stackObject = game.getStack().getSpell(((SplitCard) this).getRightHalfCard().getId()); } } + if (stackObject == null && (this instanceof AdventureCard)) { + stackObject = game.getStack().getSpell(((AdventureCard) this).getSpellCard().getId()); + } if (stackObject == null) { stackObject = game.getStack().getSpell(getId()); } diff --git a/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java index e09d8560049..1c2af8afdbd 100644 --- a/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java @@ -3,6 +3,8 @@ package mage.filter.predicate.other; import java.util.HashMap; import java.util.Locale; + +import mage.cards.AdventureCard; import mage.cards.Card; import mage.cards.SplitCard; import mage.constants.SubType; @@ -76,6 +78,14 @@ public class CardTextPredicate implements Predicate { } } } + if (input instanceof AdventureCard) { + for (String rule : ((AdventureCard) input).getSpellCard().getRules(game)) { + if (rule.toLowerCase(Locale.ENGLISH).contains(token)) { + found = true; + break; + } + } + } for (String rule : input.getRules(game)) { if (rule.toLowerCase(Locale.ENGLISH).contains(token)) { found = true; diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index c0c8c8a6865..8f4eafff6b1 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -230,6 +230,12 @@ public abstract class GameImpl implements Game, Serializable { gameCards.put(rightCard.getId(), rightCard); state.addCard(rightCard); } + if (card instanceof AdventureCard) { + Card spellCard = ((AdventureCard) card).getSpellCard(); + spellCard.setOwnerId(ownerId); + gameCards.put(spellCard.getId(), spellCard); + state.addCard(spellCard); + } } } @@ -1767,7 +1773,7 @@ public abstract class GameImpl implements Game, Serializable { Iterator copiedCards = this.getState().getCopiedCards().iterator(); while (copiedCards.hasNext()) { Card card = copiedCards.next(); - if (card instanceof SplitCardHalf) { + if (card instanceof SplitCardHalf || card instanceof AdventureCardSpell) { continue; // only the main card is moves, not the halves } Zone zone = state.getZone(card.getId()); diff --git a/Mage/src/main/java/mage/game/GameState.java b/Mage/src/main/java/mage/game/GameState.java index 21efc769a75..14f9de51ea3 100644 --- a/Mage/src/main/java/mage/game/GameState.java +++ b/Mage/src/main/java/mage/game/GameState.java @@ -5,6 +5,7 @@ import mage.abilities.*; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.ContinuousEffects; import mage.abilities.effects.Effect; +import mage.cards.AdventureCard; import mage.cards.Card; import mage.cards.SplitCard; import mage.constants.Zone; @@ -811,6 +812,9 @@ public class GameState implements Serializable, Copyable { removeCopiedCard(((SplitCard) card).getLeftHalfCard()); removeCopiedCard(((SplitCard) card).getRightHalfCard()); } + if (card instanceof AdventureCard) { + removeCopiedCard(((AdventureCard) card).getSpellCard()); + } } /** @@ -1166,6 +1170,11 @@ public class GameState implements Serializable, Copyable { copiedCards.put(rightCard.getId(), rightCard); addCard(rightCard); } + if (copiedCard instanceof AdventureCard) { + Card spellCard = ((AdventureCard) copiedCard).getSpellCard(); + copiedCards.put(spellCard.getId(), spellCard); + addCard(spellCard); + } return copiedCard; }