From f90188540db8d0c67e6d5363d6b117a6e9ae6565 Mon Sep 17 00:00:00 2001 From: melvin Date: Thu, 12 Sep 2013 17:31:53 +0800 Subject: [PATCH] only remove duplicate cards from library --- src/magic/model/target/MagicTargetFilter.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/magic/model/target/MagicTargetFilter.java b/src/magic/model/target/MagicTargetFilter.java index 948d366ab1..ca14f6b07f 100644 --- a/src/magic/model/target/MagicTargetFilter.java +++ b/src/magic/model/target/MagicTargetFilter.java @@ -101,34 +101,35 @@ abstract class MagicTargetFilterImpl implements MagicTargetFilter { abstract class MagicCardFilterImpl implements MagicTargetFilter { public List filter(final MagicGame game, final MagicPlayer player, final MagicTargetHint targetHint) { final List targets = new ArrayList(); - final Set added = new HashSet(); // Cards in graveyard if (acceptType(MagicTargetType.Graveyard)) { - add(game, player, player.getGraveyard(), targets, added); + add(game, player, player.getGraveyard(), targets, false); } // Cards in opponent's graveyard if (acceptType(MagicTargetType.OpponentsGraveyard)) { - add(game, player, player.getOpponent().getGraveyard(), targets, added); + add(game, player, player.getOpponent().getGraveyard(), targets, false); } // Cards in hand if (acceptType(MagicTargetType.Hand)) { - add(game, player, player.getHand(), targets, added); + add(game, player, player.getHand(), targets, false); } // Cards in library if (acceptType(MagicTargetType.Library)) { - add(game, player, player.getLibrary(), targets, added); + // only consider unique cards, possible as cards in library will not be counted + add(game, player, player.getLibrary(), targets, true); } return targets; } - private void add(final MagicGame game, final MagicPlayer player, final MagicCardList cards, final List targets, final Set added) { + private void add(final MagicGame game, final MagicPlayer player, final MagicCardList cards, final List targets, final boolean unique) { + final Set added = new HashSet(); for (final MagicCard card : cards) { - if (accept(game,player,card) && added.contains(card.getStateId()) == false) { + if (accept(game,player,card) && (unique == false || added.contains(card.getStateId()) == false)) { targets.add(card); added.add(card.getStateId()); }