mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 21:12:04 -08:00
Merge pull request #6504 from SpeedProg/fix_target_card_in_opponent_graveyard
fixed TargetCardInOpponentsGraveyard not working properly
This commit is contained in:
commit
1a8d325710
1 changed files with 54 additions and 0 deletions
|
|
@ -1,8 +1,11 @@
|
|||
package mage.target.common;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import mage.abilities.Ability;
|
||||
import mage.cards.Card;
|
||||
import mage.cards.Cards;
|
||||
import mage.constants.Zone;
|
||||
import mage.filter.FilterCard;
|
||||
import mage.game.Game;
|
||||
|
|
@ -33,6 +36,23 @@ public class TargetCardInOpponentsGraveyard extends TargetCard {
|
|||
this.allFromOneOpponent = target.allFromOneOpponent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID playerId, UUID id, Ability source, Game game) {
|
||||
Card card = game.getCard(id);
|
||||
if (card != null && zone.match(game.getState().getZone(id))) {
|
||||
if (game.getPlayer(source.getControllerId()).hasOpponent(card.getOwnerId(), game)) {
|
||||
if (allFromOneOpponent && !targets.isEmpty()) {
|
||||
Card firstCard = game.getCard(targets.keySet().iterator().next());
|
||||
if (firstCard != null && !card.isOwnedBy(firstCard.getOwnerId())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return filter.match(card, source.getId(), playerId, game);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTarget(UUID id, Ability source, Game game) {
|
||||
Card card = game.getCard(id);
|
||||
|
|
@ -69,7 +89,14 @@ public class TargetCardInOpponentsGraveyard extends TargetCard {
|
|||
if (getNumberOfTargets() == 0) { // if 0 target is valid, the canChoose is always true
|
||||
return true;
|
||||
}
|
||||
Player sourceController = game.getPlayer(sourceControllerId);
|
||||
for (UUID playerId: game.getState().getPlayersInRange(sourceControllerId, game)) {
|
||||
if (!sourceController.hasOpponent(playerId, game)) {
|
||||
continue;
|
||||
}
|
||||
if (this.allFromOneOpponent) {
|
||||
possibleTargets = 0;
|
||||
}
|
||||
if (!playerId.equals(sourceControllerId)) {
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
|
|
@ -86,6 +113,33 @@ public class TargetCardInOpponentsGraveyard extends TargetCard {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<UUID> possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) {
|
||||
Set<UUID> possibleTargets = new HashSet<>();
|
||||
Player sourceController = game.getPlayer(sourceControllerId);
|
||||
for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) {
|
||||
if (!sourceController.hasOpponent(playerId, game)) {
|
||||
continue;
|
||||
}
|
||||
Player player = game.getPlayer(playerId);
|
||||
if (player != null) {
|
||||
Set<UUID> targetsInThisGraveyeard = new HashSet<>();
|
||||
for (Card card : player.getGraveyard().getCards(filter, sourceId, sourceControllerId, game)) {
|
||||
if (sourceId == null || isNotTarget() || !game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.TARGET, card.getId(), sourceId, sourceControllerId))) {
|
||||
targetsInThisGraveyeard.add(card.getId());
|
||||
}
|
||||
}
|
||||
// if there is not enough possible targets, the can't be any
|
||||
if (this.allFromOneOpponent && targetsInThisGraveyeard.size() < this.minNumberOfTargets) {
|
||||
continue;
|
||||
}
|
||||
possibleTargets.addAll(targetsInThisGraveyeard);
|
||||
}
|
||||
}
|
||||
return possibleTargets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TargetCardInOpponentsGraveyard copy() {
|
||||
return new TargetCardInOpponentsGraveyard(this);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue