mirror of
https://github.com/correl/mage.git
synced 2024-11-15 11:09:30 +00:00
* Grindstone - Fixed a bug causing target player to lose game by grindstone effect itself.
This commit is contained in:
parent
15389b24d8
commit
7529d6f207
3 changed files with 90 additions and 18 deletions
|
@ -52,11 +52,6 @@ public class Progenitus extends CardImpl {
|
|||
this.subtype.add("Hydra");
|
||||
this.subtype.add("Avatar");
|
||||
|
||||
this.color.setRed(true);
|
||||
this.color.setBlue(true);
|
||||
this.color.setGreen(true);
|
||||
this.color.setBlack(true);
|
||||
this.color.setWhite(true);
|
||||
this.power = new MageInt(10);
|
||||
this.toughness = new MageInt(10);
|
||||
|
||||
|
|
|
@ -106,17 +106,23 @@ class GrindstoneEffect extends OneShotEffect {
|
|||
return true;
|
||||
}
|
||||
colorShared = false;
|
||||
Card card1 = targetPlayer.getLibrary().removeFromTop(game);
|
||||
if (card1 != null) {
|
||||
targetPlayer.moveCardToGraveyardWithInfo(card1, source.getSourceId(), game, Zone.LIBRARY);
|
||||
Card card2 = targetPlayer.getLibrary().removeFromTop(game);
|
||||
if (card2 != null) {
|
||||
targetPlayer.moveCardToGraveyardWithInfo(card2, source.getSourceId(), game, Zone.LIBRARY);
|
||||
Card card1 = null;
|
||||
Card card2 = null;
|
||||
if (targetPlayer.getLibrary().size() > 0) {
|
||||
card1 = targetPlayer.getLibrary().removeFromTop(game);
|
||||
if (targetPlayer.getLibrary().size() > 0) {
|
||||
card2 = targetPlayer.getLibrary().removeFromTop(game);
|
||||
if (card1.getColor().hasColor() && card2.getColor().hasColor()) {
|
||||
colorShared = card1.getColor().shares(card2.getColor());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (card1 != null) {
|
||||
targetPlayer.moveCardToGraveyardWithInfo(card1, source.getSourceId(), game, Zone.LIBRARY);
|
||||
}
|
||||
if (card2 != null) {
|
||||
targetPlayer.moveCardToGraveyardWithInfo(card2, source.getSourceId(), game, Zone.LIBRARY);
|
||||
}
|
||||
} while (colorShared && targetPlayer.isInGame());
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ package org.mage.test.cards.replacement;
|
|||
|
||||
import mage.constants.PhaseStep;
|
||||
import mage.constants.Zone;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.mage.test.serverside.base.CardTestPlayerBase;
|
||||
|
||||
|
@ -40,11 +41,11 @@ import org.mage.test.serverside.base.CardTestPlayerBase;
|
|||
public class GrindstoneTest extends CardTestPlayerBase {
|
||||
|
||||
/**
|
||||
* Tests that instead of one spore counter there were two spore counters added to Pallid Mycoderm
|
||||
* if Doubling Season is on the battlefield.
|
||||
* Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play
|
||||
* Leaving one Progenius in play
|
||||
*/
|
||||
@Test
|
||||
public void testGrindstoneTest() {
|
||||
public void testGrindstoneProgenius() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5);
|
||||
// As Painter's Servant enters the battlefield, choose a color.
|
||||
// All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors.
|
||||
|
@ -52,18 +53,88 @@ public class GrindstoneTest extends CardTestPlayerBase {
|
|||
// {3}, {T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Grindstone");
|
||||
|
||||
addCard(Zone.LIBRARY, playerA, "Progenitus", 2);
|
||||
// Protection from everything
|
||||
// If Progenitus would be put into a graveyard from anywhere, reveal Progenitus and shuffle it into its owner's library instead.
|
||||
addCard(Zone.LIBRARY, playerB, "Progenitus", 1);
|
||||
skipInitShuffling();
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant");
|
||||
setChoice(playerA, "Blue");
|
||||
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3},{T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process.");
|
||||
addTarget(playerA, playerB);
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
Assert.assertEquals("Progenitus has to be in the libarary", 1, playerB.getLibrary().size());
|
||||
assertPermanentCount(playerA, "Painter's Servant", 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play
|
||||
* Iterating with two Progenius for a draw
|
||||
*/
|
||||
@Test
|
||||
public void testGrindstoneProgeniusDraw() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5);
|
||||
// As Painter's Servant enters the battlefield, choose a color.
|
||||
// All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors.
|
||||
addCard(Zone.HAND, playerA, "Painter's Servant");
|
||||
// {3}, {T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Grindstone");
|
||||
|
||||
// Protection from everything
|
||||
// If Progenitus would be put into a graveyard from anywhere, reveal Progenitus and shuffle it into its owner's library instead.
|
||||
addCard(Zone.LIBRARY, playerB, "Progenitus", 2);
|
||||
skipInitShuffling();
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant");
|
||||
setChoice(playerA, "Blue");
|
||||
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3},{T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process.");
|
||||
addTarget(playerA, playerB);
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
Assert.assertTrue("Has to be a draw because of endless iteration", currentGame.isADraw());
|
||||
assertPermanentCount(playerA, "Painter's Servant", 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that Grindstone mills all cards to graveyard while Painter's Servant is in play
|
||||
* Iterating with two Progenius for a draw
|
||||
*/
|
||||
@Test
|
||||
public void testGrindstoneUlamog() {
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5);
|
||||
// As Painter's Servant enters the battlefield, choose a color.
|
||||
// All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors.
|
||||
addCard(Zone.HAND, playerA, "Painter's Servant");
|
||||
// {3}, {T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process.
|
||||
addCard(Zone.BATTLEFIELD, playerA, "Grindstone");
|
||||
|
||||
// When you cast Ulamog, the Infinite Gyre, destroy target permanent.
|
||||
// Annihilator 4 (Whenever this creature attacks, defending player sacrifices four permanents.)
|
||||
// Ulamog is indestructible.
|
||||
// When Ulamog is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library.
|
||||
addCard(Zone.LIBRARY, playerB, "Ulamog, the Infinite Gyre", 2);
|
||||
skipInitShuffling();
|
||||
|
||||
castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant");
|
||||
setChoice(playerA, "Blue");
|
||||
|
||||
activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "{3},{T}: Target player puts the top two cards of his or her library into his or her graveyard. If both cards share a color, repeat this process.");
|
||||
addTarget(playerA, playerB);
|
||||
|
||||
setStopAt(1, PhaseStep.END_TURN);
|
||||
execute();
|
||||
|
||||
// No cards in graveyard because Ulamog shuffle all cards back to Lib
|
||||
assertGraveyardCount(playerB, 0);
|
||||
assertPermanentCount(playerA, "Painter's Servant", 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue