mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 21:12:04 -08:00
* Add support for non-permanent targets to EachOpponentPermanentTargetsAdjuster, add ownership check * Rename EachOpponentPermanentTargetsAdjuster to ForEachOpponentTargetsAdjuster
This commit is contained in:
parent
7cb669603f
commit
74804a468e
32 changed files with 91 additions and 129 deletions
|
|
@ -7,6 +7,7 @@ import mage.filter.predicate.permanent.ControllerIdPredicate;
|
|||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.targetpointer.FirstTargetPointer;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
|
|
@ -35,6 +36,9 @@ public class DamagedPlayerControlsTargetAdjuster extends GenericTargetAdjuster {
|
|||
@Override
|
||||
public void addDefaultTargets(Ability ability) {
|
||||
super.addDefaultTargets(ability);
|
||||
if (blueprintTarget instanceof TargetCard && !owner) {
|
||||
throw new IllegalArgumentException("DamagedPlayerControlsTargetAdjuster has TargetCard but checking for Controller instead of Owner - " + blueprintTarget);
|
||||
}
|
||||
CardUtil.AssertNoControllerOwnerPredicates(blueprintTarget);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,11 +2,12 @@ package mage.target.targetadjustment;
|
|||
|
||||
import mage.abilities.Ability;
|
||||
import mage.filter.Filter;
|
||||
import mage.filter.predicate.card.OwnerIdPredicate;
|
||||
import mage.filter.predicate.permanent.ControllerIdPredicate;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.Target;
|
||||
import mage.target.TargetPermanent;
|
||||
import mage.target.TargetCard;
|
||||
import mage.util.CardUtil;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -14,21 +15,27 @@ import java.util.UUID;
|
|||
/**
|
||||
* @author notgreat
|
||||
*/
|
||||
public class EachOpponentPermanentTargetsAdjuster extends GenericTargetAdjuster {
|
||||
public class ForEachOpponentTargetsAdjuster extends GenericTargetAdjuster {
|
||||
private final boolean owner;
|
||||
|
||||
/**
|
||||
* Duplicates the permanent target for each opponent.
|
||||
* Filtering of permanent's controllers will be handled inside, so
|
||||
* do not pass a blueprint target with a controller restriction filter/predicate.
|
||||
*/
|
||||
public EachOpponentPermanentTargetsAdjuster() {
|
||||
public ForEachOpponentTargetsAdjuster() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
public ForEachOpponentTargetsAdjuster(boolean owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDefaultTargets(Ability ability) {
|
||||
super.addDefaultTargets(ability);
|
||||
if (!(blueprintTarget instanceof TargetPermanent)) {
|
||||
throw new IllegalArgumentException("EachOpponentPermanentTargetsAdjuster must use Permanent target - " + blueprintTarget);
|
||||
if (blueprintTarget instanceof TargetCard && !owner) {
|
||||
throw new IllegalArgumentException("EachOpponentPermanentTargetsAdjuster has TargetCard but checking for Controller instead of Owner - " + blueprintTarget);
|
||||
}
|
||||
CardUtil.AssertNoControllerOwnerPredicates(blueprintTarget);
|
||||
}
|
||||
|
|
@ -43,8 +50,13 @@ public class EachOpponentPermanentTargetsAdjuster extends GenericTargetAdjuster
|
|||
}
|
||||
Target newTarget = blueprintTarget.copy();
|
||||
Filter filter = newTarget.getFilter();
|
||||
filter.add(new ControllerIdPredicate(opponentId));
|
||||
newTarget.withTargetName(filter.getMessage() + " controlled by " + opponent.getLogName());
|
||||
if (owner) {
|
||||
filter.add(new OwnerIdPredicate(opponentId));
|
||||
newTarget.withTargetName(filter.getMessage() + " (owned by " + opponent.getLogName() + ")");
|
||||
} else {
|
||||
filter.add(new ControllerIdPredicate(opponentId));
|
||||
newTarget.withTargetName(filter.getMessage() + " (controlled by " + opponent.getLogName() + ")");
|
||||
}
|
||||
ability.addTarget(newTarget);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue