diff --git a/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java b/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java index 8341e2905d4..d8ea30122af 100644 --- a/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java +++ b/Mage.Sets/src/mage/cards/f/FirstComeFirstServed.java @@ -1,9 +1,5 @@ - package mage.cards.f; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.UUID; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.keyword.FirstStrikeAbility; @@ -18,8 +14,11 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.PermanentCard; +import java.util.UUID; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** - * * @author L_J */ public final class FirstComeFirstServed extends CardImpl { @@ -31,7 +30,7 @@ public final class FirstComeFirstServed extends CardImpl { } public FirstComeFirstServed(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{W}"); // Each attacking or blocking creature with the lowest collector number among attacking or blocking creatures has first strike. GainAbilityAllEffect gainEffect = new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, false); @@ -51,14 +50,15 @@ 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) { if (input instanceof PermanentCard) { int lowestNumber = Integer.MAX_VALUE; for (Permanent permanent : game.getBattlefield().getAllActivePermanents(new FilterAttackingOrBlockingCreature(), game)) { + // token don't have card number int number = parseCardNumber(permanent); - if (lowestNumber > number) { + if (number > 0 && lowestNumber > number) { lowestNumber = number; } } @@ -66,9 +66,13 @@ class FirstComeFirstServedPredicate implements Predicate { } return false; } - + public int parseCardNumber(Permanent input) { String str = input.getCardNumber(); + if (str == null || str.isEmpty()) { + // token don't have card number + return 0; + } Matcher matcher = partNumberPattern.matcher(str); if (matcher.find()) { return Integer.parseInt(matcher.group());