* Fixed a bug of TargetCardInHand class, that could lead to game locked down situations (e.g. Force of Will).

This commit is contained in:
LevelX2 2014-06-22 18:26:06 +02:00
parent ba60a38472
commit 8a12fa9b01
2 changed files with 41 additions and 7 deletions

View file

@ -28,12 +28,16 @@
package mage.target.common;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.constants.Zone;
import mage.abilities.Ability;
import mage.cards.Card;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.players.Player;
import mage.target.TargetCard;
/**
@ -72,6 +76,37 @@ public class TargetCardInHand extends TargetCard {
return false;
}
@Override
public Set<UUID> possibleTargets(UUID sourceId, UUID playerId, Game game) {
Set<UUID> possibleTargets = new HashSet<>();
Player player = game.getPlayer(playerId);
if (player != null) {
for (Card card : player.getHand().getCards(filter, game)) {
if (sourceId == null || isNotTarget() || !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.TARGET, card.getId(), sourceId, playerId))) {
possibleTargets.add(card.getId());
}
}
}
return possibleTargets;
}
@Override
public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) {
int possibleTargets = 0;
Player player = game.getPlayer(sourceControllerId);
if (player != null) {
for (Card card : player.getHand().getCards(filter, game)) {
if (sourceId == null || isNotTarget() || !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.TARGET, card.getId(), sourceId, sourceControllerId))) {
possibleTargets++;
if (possibleTargets >= this.minNumberOfTargets) {
return true;
}
}
}
}
return false;
}
@Override
public TargetCardInHand copy() {
return new TargetCardInHand(this);