diff --git a/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java b/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java index 1cb2c7f4587..8341e2905d4 100644 --- a/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java +++ b/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java @@ -49,6 +49,8 @@ public final class FirstComeFirstServed extends CardImpl { } class FirstComeFirstServedPredicate implements Predicate { + + private static final Pattern partNumberPattern = Pattern.compile("\\d+"); @Override public boolean apply(Permanent input, Game game) { @@ -67,8 +69,11 @@ class FirstComeFirstServedPredicate implements Predicate { public int parseCardNumber(Permanent input) { String str = input.getCardNumber(); - Matcher matcher = Pattern.compile("\\d+").matcher(str); - matcher.find(); - return Integer.parseInt(matcher.group()); + Matcher matcher = partNumberPattern.matcher(str); + if (matcher.find()) { + return Integer.parseInt(matcher.group()); + } else { + throw new IllegalStateException("Unknown card number format [" + input.getCardNumber() + "] for permanent " + input.getName()); + } } } diff --git a/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java b/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java index 5f89cc4ac04..fab60486d65 100644 --- a/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java +++ b/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java @@ -166,7 +166,7 @@ class KotoseTheSilentSpiderWatcher extends Watcher { morMap.values() .stream() .flatMap(Collection::stream) - .map(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game))); + .forEach(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game))); morMap.values().removeIf(Set::isEmpty); return; } diff --git a/Mage.Sets/src/mage/cards/m/MaddeningImp.java b/Mage.Sets/src/mage/cards/m/MaddeningImp.java index 2fe231c94ee..db85f1af156 100644 --- a/Mage.Sets/src/mage/cards/m/MaddeningImp.java +++ b/Mage.Sets/src/mage/cards/m/MaddeningImp.java @@ -119,7 +119,6 @@ class MaddeningImpCreateDelayedTriggeredAbilityEffect extends OneShotEffect { } AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(new MaddeningImpDelayedDestroyEffect(activeCreatures), TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance)); - delayedAbility.getDuration(); game.addDelayedTriggeredAbility(delayedAbility, source); return true; } diff --git a/Mage.Sets/src/mage/cards/n/NashiMoonSagesScion.java b/Mage.Sets/src/mage/cards/n/NashiMoonSagesScion.java index 076116e003d..7cda8c11a47 100644 --- a/Mage.Sets/src/mage/cards/n/NashiMoonSagesScion.java +++ b/Mage.Sets/src/mage/cards/n/NashiMoonSagesScion.java @@ -116,7 +116,7 @@ class NashiMoonSagesScionWatcher extends Watcher { morMap.values() .stream() .flatMap(Collection::stream) - .map(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game))); + .forEach(set -> set.removeIf(mor -> !mor.zoneCounterIsCurrent(game))); morMap.values().removeIf(Set::isEmpty); return; } diff --git a/Mage.Sets/src/mage/cards/n/NettlingImp.java b/Mage.Sets/src/mage/cards/n/NettlingImp.java index 881c20ef962..53ace3a8f96 100644 --- a/Mage.Sets/src/mage/cards/n/NettlingImp.java +++ b/Mage.Sets/src/mage/cards/n/NettlingImp.java @@ -104,7 +104,6 @@ class NettlingImpDelayedDestroyEffect extends OneShotEffect { effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance)); - delayedAbility.getDuration(); delayedAbility.getTargets().addAll(source.getTargets()); game.addDelayedTriggeredAbility(delayedAbility, source); return true; diff --git a/Mage.Sets/src/mage/cards/n/Norritt.java b/Mage.Sets/src/mage/cards/n/Norritt.java index 21cff23e104..d32088b8b43 100644 --- a/Mage.Sets/src/mage/cards/n/Norritt.java +++ b/Mage.Sets/src/mage/cards/n/Norritt.java @@ -105,7 +105,6 @@ class NorrittDelayedDestroyEffect extends OneShotEffect { effect.setTargetPointer(new FixedTarget(source.getFirstTarget(), game)); AtTheBeginOfNextEndStepDelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect, TargetController.ANY, new InvertCondition(TargetAttackedThisTurnCondition.instance)); - delayedAbility.getDuration(); delayedAbility.getTargets().addAll(source.getTargets()); game.addDelayedTriggeredAbility(delayedAbility, source); return true; diff --git a/Mage.Sets/src/mage/cards/s/StanggEchoWarrior.java b/Mage.Sets/src/mage/cards/s/StanggEchoWarrior.java index 576e03ea156..9e9faa95707 100644 --- a/Mage.Sets/src/mage/cards/s/StanggEchoWarrior.java +++ b/Mage.Sets/src/mage/cards/s/StanggEchoWarrior.java @@ -110,7 +110,7 @@ class StanggEchoWarriorEffect extends OneShotEffect { CreateTokenCopyTargetEffect effect = new CreateTokenCopyTargetEffect(); effect.setSavedPermanent(attachment); effect.apply(game, source); - effect.getAddedPermanents().stream().map(t -> permanent.addAttachment(t.getId(), source, game)); + effect.getAddedPermanents().forEach(t -> permanent.addAttachment(t.getId(), source, game)); toSacrifice.addAll(effect.getAddedPermanents()); } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/neo/StoryweaveTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/neo/StoryweaveTest.java index a7ccd562716..8c2b30fa736 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/neo/StoryweaveTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/neo/StoryweaveTest.java @@ -4,6 +4,7 @@ import mage.cards.s.Storyweave; import mage.constants.PhaseStep; import mage.constants.Zone; import mage.counters.CounterType; +import org.junit.Assert; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; @@ -56,12 +57,12 @@ public class StoryweaveTest extends CardTestPlayerBase { assertCounterCount(playerA, fang, CounterType.P1P1, 0); assertPermanentCount(playerA, "Centaur Token", 2); - currentGame + Assert.assertTrue(currentGame .getBattlefield() .getAllActivePermanents() .stream() .filter(permanent -> "Centaur Token".equals(permanent.getName())) - .noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 2); + .noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 2)); } @Test @@ -80,11 +81,11 @@ public class StoryweaveTest extends CardTestPlayerBase { assertCounterCount(playerA, fang, CounterType.P1P1, 2); assertPermanentCount(playerA, "Centaur Token", 2); - currentGame + Assert.assertTrue(currentGame .getBattlefield() .getAllActivePermanents() .stream() .filter(permanent -> "Centaur Token".equals(permanent.getName())) - .noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 0); + .noneMatch(permanent -> permanent.getCounters(currentGame).getCount(CounterType.P1P1) != 0)); } } diff --git a/Mage/src/main/java/mage/abilities/keyword/MonstrosityAbility.java b/Mage/src/main/java/mage/abilities/keyword/MonstrosityAbility.java index 8dfd4d7d0c1..c15d6be253b 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MonstrosityAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MonstrosityAbility.java @@ -111,11 +111,9 @@ class BecomeMonstrousSourceEffect extends OneShotEffect { } private String setText(int monstrosityValue) { - StringBuilder sb = new StringBuilder("Monstrosity "); - sb.append(monstrosityValue == Integer.MAX_VALUE ? "X" : monstrosityValue) - .append(". (If this creature isn't monstrous, put ") - .append(monstrosityValue == Integer.MAX_VALUE ? "X" : CardUtil.numberToText(monstrosityValue)) - .append(" +1/+1 counters on it and it becomes monstrous.)").toString(); - return sb.toString(); + return "Monstrosity " + (monstrosityValue == Integer.MAX_VALUE ? "X" : monstrosityValue) + + ". (If this creature isn't monstrous, put " + + (monstrosityValue == Integer.MAX_VALUE ? "X" : CardUtil.numberToText(monstrosityValue)) + + " +1/+1 counters on it and it becomes monstrous.)"; } } diff --git a/Mage/src/main/java/mage/target/TargetImpl.java b/Mage/src/main/java/mage/target/TargetImpl.java index 98ba0d54fa4..3d7ddf7f4b7 100644 --- a/Mage/src/main/java/mage/target/TargetImpl.java +++ b/Mage/src/main/java/mage/target/TargetImpl.java @@ -103,7 +103,7 @@ public abstract class TargetImpl implements Target { StringBuilder sb = new StringBuilder(); int min = getMinNumberOfTargets(); int max = getMaxNumberOfTargets(); - if (min != 1 || max != 1) { + if (!getTargetName().startsWith("X") && (min != 1 || max != 1)) { if (min < max && max != Integer.MAX_VALUE) { if (min == 1 && max == 2) { sb.append("one or ");