diff --git a/src/main/java/forge/card/abilityfactory/SpellEffect.java b/src/main/java/forge/card/abilityfactory/SpellEffect.java index 32758998f91..7e87fb04c66 100644 --- a/src/main/java/forge/card/abilityfactory/SpellEffect.java +++ b/src/main/java/forge/card/abilityfactory/SpellEffect.java @@ -83,19 +83,29 @@ import forge.game.player.Player; } protected List getTargetPlayers(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, false); + return getTargetPlayers(sa, params, false, true); } protected List getTargetPlayersEmptyAsDefault(SpellAbility sa, final Map params) { - return getTargetPlayers(sa, params, true); + return getTargetPlayers(sa, params, true, true); + } + + protected List getDefinedPlayersBeforeTargetOnes(SpellAbility sa, final Map params) { + return getTargetPlayers(sa, params, false, false); } + // Each AF used its own preference in choosing target players: + // Some checked target first and params["Defined"] then - @see targetIsPreferred + // Some wanted empty list when params["Defined"] was not set - @see wantEmptyAsDefault + // Poor me had to gather it all in a single place private final static List emptyPlayerList = Collections.unmodifiableList(new ArrayList()); - private List getTargetPlayers(SpellAbility sa, final Map params, final boolean wantEmptyAsDefault) { + private List getTargetPlayers(SpellAbility sa, final Map params, final boolean wantEmptyAsDefault, final boolean targetIsPreferred) { final Target tgt = sa.getTarget(); final String defined = params.get("Defined"); - if ( tgt != null ) return tgt.getTargetPlayers(); - if ( StringUtils.isEmpty(defined) && wantEmptyAsDefault ) return emptyPlayerList; + if ( tgt != null && ( targetIsPreferred || ( StringUtils.isEmpty(defined) && !wantEmptyAsDefault ) ) ) + return tgt.getTargetPlayers(); + if ( StringUtils.isEmpty(defined) && wantEmptyAsDefault ) + return emptyPlayerList; return AbilityFactory.getDefinedPlayers(sa.getSourceCard(), defined, sa); } diff --git a/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java b/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java index f21f9e17ed8..917bf17e089 100644 --- a/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java +++ b/src/main/java/forge/card/abilityfactory/effects/DrawEffect.java @@ -24,7 +24,7 @@ public class DrawEffect extends SpellEffect { sb.append(conditionDesc).append(" "); } - final List tgtPlayers = getTargetPlayers(sa, params); + final List tgtPlayers = getDefinedPlayersBeforeTargetOnes(sa, params); if (!tgtPlayers.isEmpty()) { @@ -68,7 +68,7 @@ public class DrawEffect extends SpellEffect { final boolean optional = params.containsKey("OptionalDecider"); final boolean slowDraw = params.containsKey("NextUpkeep"); - for (final Player p : getTargetPlayers(sa, params)) { + for (final Player p : getDefinedPlayersBeforeTargetOnes(sa, params)) { if ((tgt == null) || p.canBeTargetedBy(sa)) { if (optional) { if (p.isComputer()) {