diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 35df50ba08f..c45f07adc47 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -990,7 +990,7 @@ public class TableController { || !match.isDoneSideboarding() || (!matchPlayer.hasQuit() && match.getGame() != null && matchPlayer.getPlayer().isInGame())) { Optional user = UserManager.instance.getUser(userPlayerEntry.getKey()); - if (!user.isPresent()) { + if (!user.isPresent() || user.get().isActive()) { logger.warn("- Active user of match is missing: " + matchPlayer.getName()); logger.warn("-- matchId:" + match.getId()); logger.warn("-- userId:" + userPlayerEntry.getKey()); diff --git a/Mage.Sets/src/mage/cards/s/SultaiAscendancy.java b/Mage.Sets/src/mage/cards/s/SultaiAscendancy.java index d516d565ad5..053e802bbd3 100644 --- a/Mage.Sets/src/mage/cards/s/SultaiAscendancy.java +++ b/Mage.Sets/src/mage/cards/s/SultaiAscendancy.java @@ -46,8 +46,7 @@ import mage.filter.FilterCard; public class SultaiAscendancy extends CardImpl { public SultaiAscendancy(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{B}{G}{U}"); - + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}{G}{U}"); // At the beginning of your upkeep, look at the top two cards of your library. Put any number of them into your graveyard and the rest on top of your library in any order. Effect effect = new LookLibraryAndPickControllerEffect( diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SpreadingSeasTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SpreadingSeasTest.java index c44ce2e37d3..f5528bbe33e 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SpreadingSeasTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/SpreadingSeasTest.java @@ -86,12 +86,12 @@ public class SpreadingSeasTest extends CardTestPlayerBase { } @Test - public void testUtopiaSprawlWithSpreadingSeas(){ + public void testUtopiaSprawlWithSpreadingSeas() { addCard(Zone.HAND, playerA, "Spreading Seas", 1); addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); addCard(Zone.BATTLEFIELD, playerA, "Island", 10); addCard(Zone.HAND, playerA, "Utopia Sprawl"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Utopia Sprawl","Forest"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Utopia Sprawl", "Forest"); setChoice(playerA, "Green"); castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spreading Seas", "Forest"); setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); @@ -99,9 +99,8 @@ public class SpreadingSeasTest extends CardTestPlayerBase { assertNotSubtype("Forest", SubType.FOREST); } - @Test - public void testSpreadingSeasWithUrzaLand(){ + public void testSpreadingSeasWithUrzaLand() { addCard(Zone.HAND, playerA, "Spreading Seas", 1); addCard(Zone.BATTLEFIELD, playerA, "Urza's Tower", 1); addCard(Zone.BATTLEFIELD, playerA, "Island", 10); @@ -111,4 +110,40 @@ public class SpreadingSeasTest extends CardTestPlayerBase { assertNotSubtype("Urza's Tower", SubType.URZAS); assertNotSubtype("Urza's Tower", SubType.TOWER); } + + /** + * https://github.com/magefree/mage/issues/4529 Some spell effects that + * effect the use of mana abilities on lands are inoperative. Example + * Spreading Seas transforms enchanted land into an island and it loses all + * other abilities. The AI does not recognize this and is able to use all + * abilities of the enchanted land including all previous mana abilities and + * activated abilities, in addition to now also being an island due to + * Spreading Sea's effect. + */ + @Test + public void testSpreadingRemovesOtherAbilities() { + + // Enchant land + // When Spreading Seas enters the battlefield, draw a card. + // Enchanted land is an Island. + addCard(Zone.HAND, playerA, "Spreading Seas", 1); // ENCHANTMENT {1}{U} + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + + // {T}: Add {C} to your mana pool. + // {1}{R}, {T}: Create a 0/1 red Kobold creature token named Kobolds of Kher Keep. + addCard(Zone.BATTLEFIELD, playerB, "Kher Keep", 1); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spreading Seas", "Kher Keep"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "{1}{R}"); // Ability should not be available + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Spreading Seas", 1); + + assertPermanentCount(playerB, "Kobolds of Kher Keep", 0); + assertTapped("Kher Keep", false); + } + }