From b7881f8eb2a26d9d1feab1e1ad6508b42d5a903e Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 27 May 2013 16:57:16 +0200 Subject: [PATCH] Implemented split card name handling according the rules (two separate names). I guess this fixes #221. --- .../mage/cards/repository/CardRepository.java | 24 ++++++++++++++++--- .../predicate/mageobject/NamePredicate.java | 14 ++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Mage/src/mage/cards/repository/CardRepository.java b/Mage/src/mage/cards/repository/CardRepository.java index 03663557a6e..7fe43f647df 100644 --- a/Mage/src/mage/cards/repository/CardRepository.java +++ b/Mage/src/mage/cards/repository/CardRepository.java @@ -144,7 +144,13 @@ public enum CardRepository { qb.distinct().selectColumns("name"); List results = cardDao.query(qb.prepare()); for (CardInfo card : results) { - names.add(card.getName()); + int result = card.getName().indexOf(" // "); + if (result > 0) { + names.add(card.getName().substring(0, result)); + names.add(card.getName().substring(result+4)); + } else { + names.add(card.getName()); + } } } catch (SQLException ex) { } @@ -159,7 +165,13 @@ public enum CardRepository { qb.where().not().like("types", new SelectArg('%' + CardType.LAND.name() + '%')); List results = cardDao.query(qb.prepare()); for (CardInfo card : results) { - names.add(card.getName()); + int result = card.getName().indexOf(" // "); + if (result > 0) { + names.add(card.getName().substring(0, result)); + names.add(card.getName().substring(result+4)); + } else { + names.add(card.getName()); + } } } catch (SQLException ex) { } @@ -175,7 +187,13 @@ public enum CardRepository { where.and(where.not().like("types", '%' + CardType.CREATURE.name() +'%'),where.not().like("types", '%' + CardType.LAND.name() + '%')); List results = cardDao.query(qb.prepare()); for (CardInfo card : results) { - names.add(card.getName()); + int result = card.getName().indexOf(" // "); + if (result > 0) { + names.add(card.getName().substring(0, result)); + names.add(card.getName().substring(result+4)); + } else { + names.add(card.getName()); + } } } catch (SQLException ex) { } diff --git a/Mage/src/mage/filter/predicate/mageobject/NamePredicate.java b/Mage/src/mage/filter/predicate/mageobject/NamePredicate.java index 505e37efdef..07e789827b4 100644 --- a/Mage/src/mage/filter/predicate/mageobject/NamePredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/NamePredicate.java @@ -27,9 +27,12 @@ */ package mage.filter.predicate.mageobject; +import mage.Constants.SpellAbilityType; import mage.MageObject; +import mage.cards.SplitCard; import mage.filter.predicate.Predicate; import mage.game.Game; +import mage.game.stack.Spell; /** * @@ -45,7 +48,16 @@ public class NamePredicate implements Predicate { @Override public boolean apply(MageObject input, Game game) { - return name.equals(input.getName()); + // If a player names a card, the player may name either half of a split card, but not both. + // A split card has the chosen name if one of its two names matches the chosen name. + if (input instanceof SplitCard) { + return name.equals(((SplitCard)input).getLeftHalfCard().getName()) || name.equals(((SplitCard)input).getRightHalfCard().getName()); + } else if (input instanceof Spell && ((Spell)input).getSpellAbility().getSpellAbilityType().equals(SpellAbilityType.SPLIT_FUSED)){ + SplitCard card = (SplitCard) ((Spell)input).getCard(); + return name.equals(card.getLeftHalfCard().getName()) || name.equals(card.getRightHalfCard().getName()); + } else { + return name.equals(input.getName()); + } } @Override