mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
Merge remote-tracking branch 'core/master' into rollback_Phase_dev
# Conflicts: # forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java # forge-gui-mobile/src/forge/screens/match/MatchController.java # forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java # forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java
This commit is contained in:
@@ -1,5 +1,14 @@
|
||||
package forge.game;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.card.CardStateName;
|
||||
import forge.card.MagicColor;
|
||||
import forge.card.mana.ManaAtom;
|
||||
@@ -16,13 +25,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Expressions;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
/**
|
||||
* Base class for Triggers,ReplacementEffects and StaticAbilities.
|
||||
*
|
||||
@@ -159,15 +161,32 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
* a {@link forge.game.card.Card} object.
|
||||
* @return a boolean.
|
||||
*/
|
||||
public static boolean matchesValid(final Object o, final String[] valids, final Card srcCard) {
|
||||
public boolean matchesValid(final Object o, final String[] valids, final Card srcCard) {
|
||||
if (o instanceof GameObject) {
|
||||
final GameObject c = (GameObject) o;
|
||||
return c.isValid(valids, srcCard.getController(), srcCard, null);
|
||||
return c.isValid(valids, srcCard.getController(), srcCard, this);
|
||||
} else if (o instanceof Iterable<?>) {
|
||||
for (Object o2 : (Iterable<?>)o) {
|
||||
if (matchesValid(o2, valids, srcCard)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean matchesValid(final Object o, final String[] valids) {
|
||||
return matchesValid(o, valids, getHostCard());
|
||||
}
|
||||
|
||||
public boolean matchesValidParam(String param, final Object o) {
|
||||
if (hasParam(param) && !matchesValid(o, getParam(param).split(","))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the suppressed.
|
||||
*
|
||||
@@ -312,7 +331,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
list.addAll(p.getCardsIn(presentZone));
|
||||
}
|
||||
}
|
||||
list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), null);
|
||||
list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), this);
|
||||
|
||||
|
||||
final String rightString = presentCompare.substring(2);
|
||||
@@ -349,7 +368,7 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
}
|
||||
}
|
||||
|
||||
list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), null);
|
||||
list = CardLists.getValidCards(list, sIsPresent.split(","), this.getHostCard().getController(), this.getHostCard(), this);
|
||||
|
||||
final String rightString = presentCompare.substring(2);
|
||||
int right = AbilityUtils.calculateAmount(getHostCard(), rightString, this);
|
||||
@@ -361,32 +380,29 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
}
|
||||
|
||||
if (params.containsKey("CheckDefinedPlayer")) {
|
||||
SpellAbility mockAbility = this.getHostCard().getFirstSpellAbility();
|
||||
mockAbility.setActivatingPlayer(hostController);
|
||||
final String sIsPresent = params.get("CheckDefinedPlayer");
|
||||
int playersize = AbilityUtils.getDefinedPlayers(game.getCardState(this.getHostCard()), sIsPresent,
|
||||
mockAbility).size();
|
||||
int playersize = AbilityUtils.getDefinedPlayers(getHostCard(), sIsPresent, this).size();
|
||||
String comparator = "GE1";
|
||||
if (params.containsKey("DefinedPlayerCompare")) {
|
||||
comparator = params.get("DefinedPlayerCompare");
|
||||
}
|
||||
final String svarOperator = comparator.substring(0, 2);
|
||||
final String svarOperand = comparator.substring(2);
|
||||
final int operandValue = AbilityUtils.calculateAmount(game.getCardState(this.getHostCard()), svarOperand, this);
|
||||
final int operandValue = AbilityUtils.calculateAmount(getHostCard(), svarOperand, this);
|
||||
if (!Expressions.compare(playersize, svarOperator, operandValue)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (params.containsKey("CheckSVar")) {
|
||||
final int sVar = AbilityUtils.calculateAmount(game.getCardState(this.getHostCard()), params.get("CheckSVar"), this);
|
||||
final int sVar = AbilityUtils.calculateAmount(getHostCard(), params.get("CheckSVar"), this);
|
||||
String comparator = "GE1";
|
||||
if (params.containsKey("SVarCompare")) {
|
||||
comparator = params.get("SVarCompare");
|
||||
}
|
||||
final String svarOperator = comparator.substring(0, 2);
|
||||
final String svarOperand = comparator.substring(2);
|
||||
final int operandValue = AbilityUtils.calculateAmount(game.getCardState(this.getHostCard()), svarOperand, this);
|
||||
final int operandValue = AbilityUtils.calculateAmount(getHostCard(), svarOperand, this);
|
||||
if (!Expressions.compare(sVar, svarOperator, operandValue)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import forge.util.Expressions;
|
||||
public class ForgeScript {
|
||||
|
||||
public static boolean cardStateHasProperty(CardState cardState, String property, Player sourceController,
|
||||
Card source, SpellAbility spellAbility) {
|
||||
Card source, CardTraitBase spellAbility) {
|
||||
|
||||
final boolean isColorlessSource = cardState.getCard().hasKeyword("Colorless Damage Source", cardState);
|
||||
final ColorSet colors = cardState.getCard().determineColor(cardState);
|
||||
@@ -125,7 +125,7 @@ public class ForgeScript {
|
||||
|
||||
|
||||
public static boolean spellAbilityHasProperty(SpellAbility sa, String property, Player sourceController,
|
||||
Card source, SpellAbility spellAbility) {
|
||||
Card source, CardTraitBase spellAbility) {
|
||||
if (property.equals("ManaAbility")) {
|
||||
return sa.isManaAbility();
|
||||
} else if (property.equals("nonManaAbility")) {
|
||||
|
||||
@@ -17,6 +17,17 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
@@ -27,11 +38,19 @@ import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Table;
|
||||
import com.google.common.eventbus.EventBus;
|
||||
|
||||
import forge.card.CardRarity;
|
||||
import forge.card.CardStateName;
|
||||
import forge.card.CardType.Supertype;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.combat.Combat;
|
||||
import forge.game.event.Event;
|
||||
import forge.game.event.GameEventGameOutcome;
|
||||
@@ -39,7 +58,11 @@ import forge.game.phase.Phase;
|
||||
import forge.game.phase.PhaseHandler;
|
||||
import forge.game.phase.PhaseType;
|
||||
import forge.game.phase.Untap;
|
||||
import forge.game.player.*;
|
||||
import forge.game.player.IGameEntitiesFactory;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerCollection;
|
||||
import forge.game.player.PlayerView;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.game.replacement.ReplacementHandler;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
@@ -54,10 +77,6 @@ import forge.util.Aggregates;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.Visitor;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
/**
|
||||
* Represents the state of a <i>single game</i>, a new instance is created for each game.
|
||||
*/
|
||||
@@ -1042,15 +1061,15 @@ public class Game {
|
||||
}
|
||||
}
|
||||
|
||||
public int getCounterAddedThisTurn(CounterType cType, String validPlayer, String validCard, Card source, Player sourceController, SpellAbility spellAbility) {
|
||||
public int getCounterAddedThisTurn(CounterType cType, String validPlayer, String validCard, Card source, Player sourceController, CardTraitBase ctb) {
|
||||
int result = 0;
|
||||
if (!countersAddedThisTurn.containsRow(cType)) {
|
||||
return result;
|
||||
}
|
||||
for (Map.Entry<Player, List<Pair<Card, Integer>>> e : countersAddedThisTurn.row(cType).entrySet()) {
|
||||
if (e.getKey().isValid(validPlayer.split(","), sourceController, source, spellAbility)) {
|
||||
if (e.getKey().isValid(validPlayer.split(","), sourceController, source, ctb)) {
|
||||
for (Pair<Card, Integer> p : e.getValue()) {
|
||||
if (p.getKey().isValid(validCard.split(","), sourceController, source, spellAbility)) {
|
||||
if (p.getKey().isValid(validCard.split(","), sourceController, source, ctb)) {
|
||||
result += p.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,25 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.*;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ComparisonChain;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.StaticData;
|
||||
import forge.card.CardStateName;
|
||||
@@ -27,8 +44,23 @@ import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.ability.effects.AttachEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.event.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardFactory;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.card.CounterEnumType;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.event.GameEventCardChangeZone;
|
||||
import forge.game.event.GameEventCardDestroyed;
|
||||
import forge.game.event.GameEventCardStatsChanged;
|
||||
import forge.game.event.GameEventCardTapped;
|
||||
import forge.game.event.GameEventFlipCoin;
|
||||
import forge.game.event.GameEventGameStarted;
|
||||
import forge.game.event.GameEventScry;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
import forge.game.mulligan.MulliganService;
|
||||
import forge.game.player.GameLossReason;
|
||||
@@ -47,12 +79,13 @@ import forge.game.zone.PlayerZoneBattlefield;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.*;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.Expressions;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.ThreadUtil;
|
||||
import forge.util.Visitor;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Methods for common actions performed during a game.
|
||||
@@ -362,10 +395,6 @@ public class GameAction {
|
||||
}
|
||||
}
|
||||
zoneFrom.remove(c);
|
||||
if (!zoneTo.is(ZoneType.Exile) && !zoneTo.is(ZoneType.Stack)) {
|
||||
c.setExiledWith(null);
|
||||
c.setExiledBy(null);
|
||||
}
|
||||
|
||||
// cleanup Encoding
|
||||
if (c.hasEncodedCard()) {
|
||||
@@ -379,6 +408,16 @@ public class GameAction {
|
||||
e.removeEncodedCard(c);
|
||||
}
|
||||
}
|
||||
|
||||
if (!zoneTo.is(ZoneType.Exile) && !zoneTo.is(ZoneType.Stack)) {
|
||||
Card with = c.getExiledWith();
|
||||
if (with != null) {
|
||||
with.removeUntilLeavesBattlefield(c);
|
||||
}
|
||||
|
||||
c.setExiledWith(null);
|
||||
c.setExiledBy(null);
|
||||
}
|
||||
}
|
||||
|
||||
// if an adventureCard is put from Stack somewhere else, need to reset to Original State
|
||||
@@ -1143,7 +1182,7 @@ public class GameAction {
|
||||
}
|
||||
|
||||
if (c.hasKeyword("The number of loyalty counters on CARDNAME is equal to the number of Beebles you control.")) {
|
||||
int beeble = CardLists.getValidCardCount(game.getCardsIn(ZoneType.Battlefield), "Beeble.YouCtrl", c.getController(), c);
|
||||
int beeble = CardLists.getValidCardCount(game.getCardsIn(ZoneType.Battlefield), "Beeble.YouCtrl", c.getController(), c, null);
|
||||
int loyal = c.getCounters(CounterEnumType.LOYALTY);
|
||||
if (loyal < beeble) {
|
||||
GameEntityCounterTable counterTable = new GameEntityCounterTable();
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
@@ -27,8 +31,13 @@ import forge.card.mana.ManaCostParser;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.ApiType;
|
||||
import forge.game.card.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardFactoryUtil;
|
||||
import forge.game.card.CardPlayOption;
|
||||
import forge.game.card.CardPlayOption.PayManaCost;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.cost.Cost;
|
||||
import forge.game.keyword.Keyword;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
@@ -37,7 +46,14 @@ import forge.game.player.PlayerController;
|
||||
import forge.game.replacement.ReplacementEffect;
|
||||
import forge.game.replacement.ReplacementHandler;
|
||||
import forge.game.replacement.ReplacementLayer;
|
||||
import forge.game.spellability.*;
|
||||
import forge.game.spellability.AbilityManaPart;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.AlternativeCost;
|
||||
import forge.game.spellability.OptionalCost;
|
||||
import forge.game.spellability.OptionalCostValue;
|
||||
import forge.game.spellability.Spell;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityRestriction;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
import forge.game.trigger.TriggerType;
|
||||
@@ -45,10 +61,6 @@ import forge.game.zone.ZoneType;
|
||||
import forge.util.Lang;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
||||
@@ -17,6 +17,12 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
@@ -37,12 +43,6 @@ import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
|
||||
public abstract class GameEntity extends GameObject implements IIdentifiable {
|
||||
protected final int id;
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.google.common.collect.Table;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
public class GameEntityCounterTable extends ForwardingTable<GameEntity, CounterType, Integer> {
|
||||
@@ -63,7 +62,7 @@ public class GameEntityCounterTable extends ForwardingTable<GameEntity, CounterT
|
||||
return result;
|
||||
}
|
||||
|
||||
public Map<GameEntity, Integer> filterTable(CounterType type, String valid, Card host, SpellAbility sa) {
|
||||
public Map<GameEntity, Integer> filterTable(CounterType type, String valid, Card host, CardTraitBase sa) {
|
||||
Map<GameEntity, Integer> result = Maps.newHashMap();
|
||||
|
||||
for (Map.Entry<GameEntity, Integer> e : column(type).entrySet()) {
|
||||
|
||||
@@ -17,6 +17,24 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
@@ -36,13 +54,6 @@ import forge.util.FileUtil;
|
||||
import forge.util.storage.StorageBase;
|
||||
import forge.util.storage.StorageReaderRecursiveFolderWithUserFolder;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
|
||||
public class GameFormat implements Comparable<GameFormat> {
|
||||
private final String name;
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import forge.game.event.IGameEventVisitor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Observable;
|
||||
|
||||
import forge.game.event.IGameEventVisitor;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* GameLog class.
|
||||
|
||||
@@ -22,7 +22,7 @@ public abstract class GameObject {
|
||||
* @param spellAbility
|
||||
* @return true, if is valid
|
||||
*/
|
||||
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source, SpellAbility spellAbility) {
|
||||
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source, CardTraitBase spellAbility) {
|
||||
for (final String restriction : restrictions) {
|
||||
if (this.isValid(restriction, sourceController, source, spellAbility)) {
|
||||
return true;
|
||||
@@ -43,7 +43,7 @@ public abstract class GameObject {
|
||||
* @param spellAbility
|
||||
* @return true, if is valid
|
||||
*/
|
||||
public boolean isValid(final String restriction, final Player sourceController, final Card source, SpellAbility spellAbility) {
|
||||
public boolean isValid(final String restriction, final Player sourceController, final Card source, CardTraitBase spellAbility) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public abstract class GameObject {
|
||||
* @param spellAbility
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean hasProperty(final String property, final Player sourceController, final Card source, SpellAbility spellAbility) {
|
||||
public boolean hasProperty(final String property, final Player sourceController, final Card source, CardTraitBase spellAbility) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,6 @@ import com.google.common.base.Predicate;
|
||||
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
|
||||
/**
|
||||
@@ -33,7 +32,7 @@ import forge.game.spellability.SpellAbility;
|
||||
*/
|
||||
public final class GameObjectPredicates {
|
||||
|
||||
public static final Predicate<GameObject> restriction(final String[] restrictions, final Player sourceController, final Card source, final SpellAbility spellAbility) {
|
||||
public static final Predicate<GameObject> restriction(final String[] restrictions, final Player sourceController, final Card source, final CardTraitBase spellAbility) {
|
||||
return new Predicate<GameObject>() {
|
||||
@Override
|
||||
public boolean apply(final GameObject c) {
|
||||
|
||||
@@ -17,7 +17,15 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.LobbyPlayer;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerOutcome;
|
||||
@@ -26,10 +34,6 @@ import forge.game.player.PlayerView;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* GameInfo class.
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.util.Set;
|
||||
|
||||
import com.google.common.base.Enums;
|
||||
import com.google.common.base.Function;
|
||||
|
||||
import forge.StaticData;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package forge.game;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.LobbyPlayer;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameOutcome.AnteResult;
|
||||
@@ -19,8 +22,6 @@ import forge.trackable.TrackableObject;
|
||||
import forge.trackable.TrackableProperty;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GameView extends TrackableObject {
|
||||
private static final long serialVersionUID = 8522884512960961528L;
|
||||
|
||||
|
||||
@@ -1,6 +1,22 @@
|
||||
package forge.game;
|
||||
|
||||
import com.google.common.collect.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.HashMultiset;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Multiset;
|
||||
import com.google.common.eventbus.EventBus;
|
||||
|
||||
import forge.LobbyPlayer;
|
||||
@@ -20,12 +36,9 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class Match {
|
||||
private final List<RegisteredPlayer> players;
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package forge.game;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
/**
|
||||
* Represents the planar dice for Planechase games.
|
||||
*
|
||||
|
||||
@@ -17,19 +17,18 @@
|
||||
*/
|
||||
package forge.game;
|
||||
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
|
||||
import forge.game.player.Player;
|
||||
import forge.game.staticability.StaticAbility;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.staticability.StaticAbility;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* StaticEffect class.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package forge.game.ability;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.card.Card;
|
||||
import forge.game.cost.Cost;
|
||||
import forge.game.spellability.AbilityActivated;
|
||||
import forge.game.spellability.AbilityManaPart;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class AbilityApiBased extends AbilityActivated {
|
||||
private final SpellAbilityEffect effect;
|
||||
|
||||
|
||||
@@ -17,9 +17,13 @@
|
||||
*/
|
||||
package forge.game.ability;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.card.CardStateName;
|
||||
import forge.game.CardTraitBase;
|
||||
import forge.game.IHasSVars;
|
||||
@@ -27,15 +31,16 @@ import forge.game.ability.effects.CharmEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardState;
|
||||
import forge.game.cost.Cost;
|
||||
import forge.game.spellability.*;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityCondition;
|
||||
import forge.game.spellability.SpellAbilityRestriction;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.FileSection;
|
||||
import io.sentry.Sentry;
|
||||
import io.sentry.event.BreadcrumbBuilder;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* AbilityFactory class.
|
||||
|
||||
@@ -61,6 +61,7 @@ public enum AbilityKey {
|
||||
EffectOnly("EffectOnly"),
|
||||
Exploited("Exploited"),
|
||||
Explorer("Explorer"),
|
||||
ExtraTurn("ExtraTurn"),
|
||||
Event("Event"),
|
||||
Fighter("Fighter"),
|
||||
Fighters("Fighters"),
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
package forge.game.ability;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -18,9 +28,15 @@ import forge.game.CardTraitBase;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.TriggerReplacementBase;
|
||||
import forge.game.ability.AbilityFactory.AbilityRecordType;
|
||||
import forge.game.card.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardFactoryUtil;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.cost.Cost;
|
||||
import forge.game.keyword.Keyword;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
@@ -30,7 +46,13 @@ import forge.game.mana.ManaCostBeingPaid;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerCollection;
|
||||
import forge.game.player.PlayerPredicates;
|
||||
import forge.game.spellability.*;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.Spell;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityRestriction;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.spellability.SpellPermanent;
|
||||
import forge.game.spellability.TargetChoices;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
@@ -42,15 +64,6 @@ import forge.util.collect.FCollectionView;
|
||||
import io.sentry.Sentry;
|
||||
import io.sentry.event.BreadcrumbBuilder;
|
||||
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class AbilityUtils {
|
||||
private final static ImmutableList<String> cmpList = ImmutableList.of("LT", "LE", "EQ", "GE", "GT", "NE");
|
||||
@@ -86,7 +99,7 @@ public class AbilityUtils {
|
||||
// But then we only need update one function at a time once the casting is
|
||||
// everywhere.
|
||||
// Probably will move to One function solution sometime in the future
|
||||
public static CardCollection getDefinedCards(final Card hostCard, final String def, final SpellAbility sa) {
|
||||
public static CardCollection getDefinedCards(final Card hostCard, final String def, final CardTraitBase sa) {
|
||||
CardCollection cards = new CardCollection();
|
||||
String defined = (def == null) ? "Self" : applyAbilityTextChangeEffects(def, sa); // default to Self
|
||||
final String[] incR = defined.split("\\.", 2);
|
||||
@@ -101,7 +114,11 @@ public class AbilityUtils {
|
||||
c = game.getCardState(hostCard);
|
||||
}
|
||||
else if (defined.equals("OriginalHost")) {
|
||||
c = sa.getRootAbility().getOriginalHost();
|
||||
if (sa instanceof SpellAbility) {
|
||||
c = ((SpellAbility)sa).getRootAbility().getOriginalHost();
|
||||
} else {
|
||||
c = sa.getOriginalHost();
|
||||
}
|
||||
}
|
||||
else if (defined.equals("EffectSource")) {
|
||||
if (hostCard.isEmblem() || hostCard.getType().hasSubtype("Effect")) {
|
||||
@@ -129,10 +146,12 @@ public class AbilityUtils {
|
||||
}
|
||||
else if (defined.equals("Enchanted")) {
|
||||
c = hostCard.getEnchantingCard();
|
||||
if ((c == null) && (sa != null) && (sa.getRootAbility() != null)
|
||||
&& (sa.getRootAbility().getPaidList("Sacrificed") != null)
|
||||
&& !sa.getRootAbility().getPaidList("Sacrificed").isEmpty()) {
|
||||
c = sa.getRootAbility().getPaidList("Sacrificed").get(0).getEnchantingCard();
|
||||
if (c == null && sa instanceof SpellAbility) {
|
||||
SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
CardCollection sacrificed = root.getPaidList("Sacrificed");
|
||||
if (sacrificed != null && !sacrificed.isEmpty()) {
|
||||
c = sacrificed.getFirst().getEnchantingCard();
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (defined.endsWith("OfLibrary")) {
|
||||
@@ -144,26 +163,26 @@ public class AbilityUtils {
|
||||
return cards;
|
||||
}
|
||||
}
|
||||
else if (defined.equals("Targeted")) {
|
||||
final SpellAbility saTargeting = sa.getSATargetingCard();
|
||||
else if (defined.equals("Targeted") && sa instanceof SpellAbility) {
|
||||
final SpellAbility saTargeting = ((SpellAbility)sa).getSATargetingCard();
|
||||
if (saTargeting != null) {
|
||||
Iterables.addAll(cards, saTargeting.getTargets().getTargetCards());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("ThisTargetedCard")) { // do not add parent targeted
|
||||
if (sa != null && sa.getTargets() != null) {
|
||||
Iterables.addAll(cards, sa.getTargets().getTargetCards());
|
||||
else if (defined.equals("ThisTargetedCard") && sa instanceof SpellAbility) { // do not add parent targeted
|
||||
if (((SpellAbility)sa).getTargets() != null) {
|
||||
Iterables.addAll(cards, ((SpellAbility)sa).getTargets().getTargetCards());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("ParentTarget")) {
|
||||
final SpellAbility parent = sa.getParentTargetingCard();
|
||||
else if (defined.equals("ParentTarget") && sa instanceof SpellAbility) {
|
||||
final SpellAbility parent = ((SpellAbility)sa).getParentTargetingCard();
|
||||
if (parent != null) {
|
||||
Iterables.addAll(cards, parent.getTargets().getTargetCards());
|
||||
}
|
||||
|
||||
}
|
||||
else if (defined.startsWith("Triggered") && (sa != null)) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
else if (defined.startsWith("Triggered") && sa instanceof SpellAbility) {
|
||||
final SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
if (defined.contains("LKICopy")) { //Triggered*LKICopy
|
||||
int lkiPosition = defined.indexOf("LKICopy");
|
||||
AbilityKey type = AbilityKey.fromString(defined.substring(9, lkiPosition));
|
||||
@@ -192,8 +211,8 @@ public class AbilityUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (defined.startsWith("Replaced") && (sa != null)) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
else if (defined.startsWith("Replaced") && sa instanceof SpellAbility) {
|
||||
final SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
AbilityKey type = AbilityKey.fromString(defined.substring(8));
|
||||
final Object crd = root.getReplacingObject(type);
|
||||
|
||||
@@ -239,8 +258,8 @@ public class AbilityUtils {
|
||||
cards.add((Card) o);
|
||||
}
|
||||
}
|
||||
} else if (defined.equals("DelayTriggerRememberedLKI")) {
|
||||
SpellAbility root = sa.getRootAbility();
|
||||
} else if (defined.equals("DelayTriggerRememberedLKI") && sa instanceof SpellAbility) {
|
||||
SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
if (root != null) {
|
||||
for (Object o : root.getTriggerRemembered()) {
|
||||
if (o instanceof Card) {
|
||||
@@ -250,8 +269,8 @@ public class AbilityUtils {
|
||||
} else {
|
||||
System.err.println("Warning: couldn't find trigger SA in the chain of SpellAbility " + sa);
|
||||
}
|
||||
} else if (defined.equals("DelayTriggerRemembered")) {
|
||||
SpellAbility root = sa.getRootAbility();
|
||||
} else if (defined.equals("DelayTriggerRemembered") && sa instanceof SpellAbility) {
|
||||
SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
if (root != null) {
|
||||
for (Object o : root.getTriggerRemembered()) {
|
||||
if (o instanceof Card) {
|
||||
@@ -313,31 +332,36 @@ public class AbilityUtils {
|
||||
}
|
||||
} else {
|
||||
CardCollection list = null;
|
||||
if (defined.startsWith("SacrificedCards")) {
|
||||
list = sa.getRootAbility().getPaidList("SacrificedCards");
|
||||
} else if (defined.startsWith("Sacrificed")) {
|
||||
list = sa.getRootAbility().getPaidList("Sacrificed");
|
||||
} else if (defined.startsWith("Revealed")) {
|
||||
list = sa.getRootAbility().getPaidList("Revealed");
|
||||
} else if (defined.startsWith("DiscardedCards")) {
|
||||
list = sa.getRootAbility().getPaidList("DiscardedCards");
|
||||
} else if (defined.startsWith("Discarded")) {
|
||||
list = sa.getRootAbility().getPaidList("Discarded");
|
||||
} else if (defined.startsWith("ExiledCards")) {
|
||||
list = sa.getRootAbility().getPaidList("ExiledCards");
|
||||
} else if (defined.startsWith("Exiled")) {
|
||||
list = sa.getRootAbility().getPaidList("Exiled");
|
||||
} else if (defined.startsWith("Milled")) {
|
||||
list = sa.getRootAbility().getPaidList("Milled");
|
||||
} else if (defined.startsWith("TappedCards")) {
|
||||
list = sa.getRootAbility().getPaidList("TappedCards");
|
||||
} else if (defined.startsWith("Tapped")) {
|
||||
list = sa.getRootAbility().getPaidList("Tapped");
|
||||
} else if (defined.startsWith("UntappedCards")) {
|
||||
list = sa.getRootAbility().getPaidList("UntappedCards");
|
||||
} else if (defined.startsWith("Untapped")) {
|
||||
list = sa.getRootAbility().getPaidList("Untapped");
|
||||
} else if (defined.startsWith("Valid ")) {
|
||||
if (sa instanceof SpellAbility) {
|
||||
SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
if (defined.startsWith("SacrificedCards")) {
|
||||
list = root.getPaidList("SacrificedCards");
|
||||
} else if (defined.startsWith("Sacrificed")) {
|
||||
list = root.getPaidList("Sacrificed");
|
||||
} else if (defined.startsWith("Revealed")) {
|
||||
list = root.getPaidList("Revealed");
|
||||
} else if (defined.startsWith("DiscardedCards")) {
|
||||
list = root.getPaidList("DiscardedCards");
|
||||
} else if (defined.startsWith("Discarded")) {
|
||||
list = root.getPaidList("Discarded");
|
||||
} else if (defined.startsWith("ExiledCards")) {
|
||||
list = root.getPaidList("ExiledCards");
|
||||
} else if (defined.startsWith("Exiled")) {
|
||||
list = root.getPaidList("Exiled");
|
||||
} else if (defined.startsWith("Milled")) {
|
||||
list = root.getPaidList("Milled");
|
||||
} else if (defined.startsWith("TappedCards")) {
|
||||
list = root.getPaidList("TappedCards");
|
||||
} else if (defined.startsWith("Tapped")) {
|
||||
list = root.getPaidList("Tapped");
|
||||
} else if (defined.startsWith("UntappedCards")) {
|
||||
list = root.getPaidList("UntappedCards");
|
||||
} else if (defined.startsWith("Untapped")) {
|
||||
list = root.getPaidList("Untapped");
|
||||
}
|
||||
}
|
||||
|
||||
if (defined.startsWith("Valid ")) {
|
||||
String validDefined = defined.substring("Valid ".length());
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), validDefined.split(","), hostCard.getController(), hostCard, sa);
|
||||
} else if (defined.startsWith("ValidAll ")) {
|
||||
@@ -348,8 +372,6 @@ public class AbilityUtils {
|
||||
String zone = s[0].substring("Valid".length());
|
||||
String validDefined = s[1];
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.smartValueOf(zone)), validDefined.split(","), hostCard.getController(), hostCard, sa);
|
||||
} else {
|
||||
return cards;
|
||||
}
|
||||
|
||||
if (list != null) {
|
||||
@@ -806,7 +828,7 @@ public class AbilityUtils {
|
||||
* a {@link forge.game.spellability.SpellAbility} object.
|
||||
* @return a {@link java.util.ArrayList} object.
|
||||
*/
|
||||
public static FCollection<GameObject> getDefinedObjects(final Card card, final String def, final SpellAbility sa) {
|
||||
public static FCollection<GameObject> getDefinedObjects(final Card card, final String def, final CardTraitBase sa) {
|
||||
final FCollection<GameObject> objects = new FCollection<>();
|
||||
final String defined = (def == null) ? "Self" : def;
|
||||
|
||||
@@ -816,7 +838,7 @@ public class AbilityUtils {
|
||||
return objects;
|
||||
}
|
||||
|
||||
public static FCollection<GameEntity> getDefinedEntities(final Card card, final String def, final SpellAbility sa) {
|
||||
public static FCollection<GameEntity> getDefinedEntities(final Card card, final String def, final CardTraitBase sa) {
|
||||
final FCollection<GameEntity> objects = new FCollection<>();
|
||||
final String defined = (def == null) ? "Self" : def;
|
||||
|
||||
@@ -965,32 +987,32 @@ public class AbilityUtils {
|
||||
* a {@link forge.game.spellability.SpellAbility} object.
|
||||
* @return a {@link java.util.ArrayList} object.
|
||||
*/
|
||||
public static PlayerCollection getDefinedPlayers(final Card card, final String def, final SpellAbility sa) {
|
||||
public static PlayerCollection getDefinedPlayers(final Card card, final String def, final CardTraitBase sa) {
|
||||
final PlayerCollection players = new PlayerCollection();
|
||||
final String defined = (def == null) ? "You" : applyAbilityTextChangeEffects(def, sa);
|
||||
final Game game = card == null ? null : card.getGame();
|
||||
|
||||
final Player player = sa == null ? card.getController() : sa.getActivatingPlayer();
|
||||
final Player player = sa instanceof SpellAbility ? ((SpellAbility)sa).getActivatingPlayer() : card.getController();
|
||||
|
||||
if (defined.equals("TargetedOrController")) {
|
||||
players.addAll(getDefinedPlayers(card, "Targeted", sa));
|
||||
players.addAll(getDefinedPlayers(card, "TargetedController", sa));
|
||||
}
|
||||
else if (defined.equals("Targeted") || defined.equals("TargetedPlayer")) {
|
||||
final SpellAbility saTargeting = sa.getSATargetingPlayer();
|
||||
else if ((defined.equals("Targeted") || defined.equals("TargetedPlayer")) && sa instanceof SpellAbility) {
|
||||
final SpellAbility saTargeting = ((SpellAbility)sa).getSATargetingPlayer();
|
||||
if (saTargeting != null) {
|
||||
players.addAll(saTargeting.getTargets().getTargetPlayers());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("ParentTarget")) {
|
||||
final SpellAbility parent = sa.getParentTargetingPlayer();
|
||||
else if (defined.equals("ParentTarget") && sa instanceof SpellAbility) {
|
||||
final SpellAbility parent = ((SpellAbility)sa).getParentTargetingPlayer();
|
||||
if (parent != null) {
|
||||
players.addAll(parent.getTargets().getTargetPlayers());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("ThisTargetedPlayer")) { // do not add parent targeted
|
||||
if (sa != null && sa.getTargets() != null) {
|
||||
Iterables.addAll(players, sa.getTargets().getTargetPlayers());
|
||||
else if (defined.equals("ThisTargetedPlayer") && sa instanceof SpellAbility) { // do not add parent targeted
|
||||
if (((SpellAbility)sa).getTargets() != null) {
|
||||
Iterables.addAll(players, ((SpellAbility)sa).getTargets().getTargetPlayers());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("TargetedController")) {
|
||||
@@ -1006,11 +1028,11 @@ public class AbilityUtils {
|
||||
players.add(c.getOwner());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("TargetedAndYou")) {
|
||||
final SpellAbility saTargeting = sa.getSATargetingPlayer();
|
||||
else if (defined.equals("TargetedAndYou") && sa instanceof SpellAbility) {
|
||||
final SpellAbility saTargeting = ((SpellAbility)sa).getSATargetingPlayer();
|
||||
if (saTargeting != null) {
|
||||
players.addAll(saTargeting.getTargets().getTargetPlayers());
|
||||
players.add(sa.getActivatingPlayer());
|
||||
players.add(((SpellAbility)sa).getActivatingPlayer());
|
||||
}
|
||||
}
|
||||
else if (defined.equals("ParentTargetedController")) {
|
||||
@@ -1024,8 +1046,8 @@ public class AbilityUtils {
|
||||
else if (defined.startsWith("Remembered")) {
|
||||
addPlayer(card.getRemembered(), defined, players);
|
||||
}
|
||||
else if (defined.startsWith("DelayTriggerRemembered")) {
|
||||
SpellAbility root = sa.getRootAbility();
|
||||
else if (defined.startsWith("DelayTriggerRemembered") && sa instanceof SpellAbility) {
|
||||
SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
if (root != null) {
|
||||
addPlayer(root.getTriggerRemembered(), defined, players);
|
||||
} else {
|
||||
@@ -1042,12 +1064,12 @@ public class AbilityUtils {
|
||||
players.add(rem.getOwner());
|
||||
}
|
||||
}
|
||||
else if (defined.startsWith("Triggered")) {
|
||||
else if (defined.startsWith("Triggered") && sa instanceof SpellAbility) {
|
||||
String defParsed = defined.endsWith("AndYou") ? defined.substring(0, defined.indexOf("AndYou")) : defined;
|
||||
if (defined.endsWith("AndYou")) {
|
||||
players.add(sa.getActivatingPlayer());
|
||||
players.add(((SpellAbility)sa).getActivatingPlayer());
|
||||
}
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
final SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
Object o = null;
|
||||
if (defParsed.endsWith("Controller")) {
|
||||
String triggeringType = defParsed.substring(9);
|
||||
@@ -1108,8 +1130,8 @@ public class AbilityUtils {
|
||||
players.addAll(player.getOpponents());
|
||||
players.removeAll(getDefinedPlayers(card, defined.substring(6), sa));
|
||||
}
|
||||
else if (defined.startsWith("Replaced")) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
else if (defined.startsWith("Replaced") && sa instanceof SpellAbility) {
|
||||
final SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
Object o = null;
|
||||
if (defined.endsWith("Controller")) {
|
||||
String replacingType = defined.substring(8);
|
||||
@@ -1252,7 +1274,7 @@ public class AbilityUtils {
|
||||
* @return a {@link java.util.ArrayList} object.
|
||||
*/
|
||||
public static FCollection<SpellAbility> getDefinedSpellAbilities(final Card card, final String def,
|
||||
final SpellAbility sa) {
|
||||
final CardTraitBase sa) {
|
||||
final FCollection<SpellAbility> sas = new FCollection<>();
|
||||
final String defined = (def == null) ? "Self" : applyAbilityTextChangeEffects(def, sa); // default to Self
|
||||
final Game game = card.getGame();
|
||||
@@ -1261,14 +1283,14 @@ public class AbilityUtils {
|
||||
|
||||
// TODO - this probably needs to be fleshed out a bit, but the basics
|
||||
// work
|
||||
if (defined.equals("Self")) {
|
||||
s = sa;
|
||||
if (defined.equals("Self") && sa instanceof SpellAbility) {
|
||||
s = (SpellAbility)sa;
|
||||
}
|
||||
else if (defined.equals("Parent")) {
|
||||
s = sa.getRootAbility();
|
||||
else if (defined.equals("Parent") && sa instanceof SpellAbility) {
|
||||
s = ((SpellAbility)sa).getRootAbility();
|
||||
}
|
||||
else if (defined.equals("Targeted")) {
|
||||
final SpellAbility saTargeting = sa.getSATargetingSA();
|
||||
else if (defined.equals("Targeted") && sa instanceof SpellAbility) {
|
||||
final SpellAbility saTargeting = ((SpellAbility)sa).getSATargetingSA();
|
||||
if (saTargeting != null) {
|
||||
for (SpellAbility targetSpell : saTargeting.getTargets().getTargetSpells()) {
|
||||
SpellAbilityStackInstance stackInstance = game.getStack().getInstanceFromSpellAbility(targetSpell);
|
||||
@@ -1284,8 +1306,8 @@ public class AbilityUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (defined.startsWith("Triggered")) {
|
||||
final SpellAbility root = sa.getRootAbility();
|
||||
else if (defined.startsWith("Triggered") && sa instanceof SpellAbility) {
|
||||
final SpellAbility root = ((SpellAbility)sa).getRootAbility();
|
||||
|
||||
final String triggeringType = defined.substring(9);
|
||||
final Object o = root.getTriggeringObject(AbilityKey.fromString(triggeringType));
|
||||
@@ -1584,6 +1606,7 @@ public class AbilityUtils {
|
||||
final String s2 = AbilityUtils.applyAbilityTextChangeEffects(s, ctb);
|
||||
final String[] l = s2.split("/");
|
||||
final String expr = CardFactoryUtil.extractOperators(s2);
|
||||
final Player player = ctb instanceof SpellAbility ? ((SpellAbility)ctb).getActivatingPlayer() : ctb.getHostCard().getController();
|
||||
|
||||
final String[] sq;
|
||||
sq = l[0].split("\\.");
|
||||
@@ -1781,13 +1804,6 @@ public class AbilityUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if (l[0].startsWith("CountersAddedThisTurn")) {
|
||||
final String[] parts = l[0].split(" ");
|
||||
CounterType cType = CounterType.getType(parts[1]);
|
||||
|
||||
return CardFactoryUtil.doXMath(game.getCounterAddedThisTurn(cType, parts[2], parts[3], c, sa.getActivatingPlayer(), sa), expr, c);
|
||||
}
|
||||
|
||||
if (sq[0].startsWith("CastTotalManaSpent")) {
|
||||
return CardFactoryUtil.doXMath(c.getCastSA() != null ? c.getCastSA().getTotalManaSpent() : 0, expr, c);
|
||||
}
|
||||
@@ -1804,12 +1820,13 @@ public class AbilityUtils {
|
||||
return CardFactoryUtil.doXMath(v, expr, c);
|
||||
}
|
||||
}
|
||||
if (ctb instanceof TriggerReplacementBase) {
|
||||
|
||||
if (ctb instanceof CardTraitBase) {
|
||||
if (l[0].startsWith("CountersAddedThisTurn")) {
|
||||
final String[] parts = l[0].split(" ");
|
||||
CounterType cType = CounterType.getType(parts[1]);
|
||||
|
||||
return CardFactoryUtil.doXMath(game.getCounterAddedThisTurn(cType, parts[2], parts[3], c, ctb.getHostCard().getController(), null), expr, c);
|
||||
return CardFactoryUtil.doXMath(game.getCounterAddedThisTurn(cType, parts[2], parts[3], c, player, ctb), expr, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package forge.game.ability;
|
||||
|
||||
|
||||
import forge.game.ability.effects.*;
|
||||
import forge.util.ReflectionUtil;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.effects.*;
|
||||
import forge.util.ReflectionUtil;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
@@ -153,9 +153,9 @@ public enum ApiType {
|
||||
SetLife (LifeSetEffect.class),
|
||||
SetState (SetStateEffect.class),
|
||||
Shuffle (ShuffleEffect.class),
|
||||
SkipPhase (SkipPhaseEffect.class),
|
||||
SkipTurn (SkipTurnEffect.class),
|
||||
StoreSVar (StoreSVarEffect.class),
|
||||
StoreMap (StoreMapEffect.class),
|
||||
Subgame (SubgameEffect.class),
|
||||
Surveil (SurveilEffect.class),
|
||||
SwitchBlock (SwitchBlockEffect.class),
|
||||
|
||||
@@ -4,22 +4,23 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import forge.card.MagicColor;
|
||||
import forge.util.TextUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Table;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.card.CardType;
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardFactoryUtil;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.combat.Combat;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerCollection;
|
||||
@@ -35,6 +36,7 @@ import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
/**
|
||||
@@ -613,4 +615,32 @@ public abstract class SpellAbilityEffect {
|
||||
}
|
||||
return combatChanged;
|
||||
}
|
||||
|
||||
protected static GameCommand untilHostLeavesPlayCommand(final CardZoneTable triggerList, final Card hostCard) {
|
||||
final Game game = hostCard.getGame();
|
||||
hostCard.addUntilLeavesBattlefield(triggerList.allCards());
|
||||
return new GameCommand() {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
CardZoneTable untilTable = new CardZoneTable();
|
||||
for (Table.Cell<ZoneType, ZoneType, CardCollection> cell : triggerList.cellSet()) {
|
||||
for (Card c : cell.getValue()) {
|
||||
// better check if card didn't changed zones again?
|
||||
Card newCard = c.getZone().getCards().get(c);
|
||||
if (newCard == null || !newCard.equalsWithTimestamp(c)) {
|
||||
continue;
|
||||
}
|
||||
// no cause there?
|
||||
Card movedCard = game.getAction().moveTo(cell.getRowKey(), newCard, null);
|
||||
untilTable.put(cell.getColumnKey(), cell.getRowKey(), movedCard);
|
||||
}
|
||||
}
|
||||
untilTable.triggerChangesZoneAll(game);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.ability.effects.ChangeZoneAllEffect;
|
||||
import forge.game.ability.effects.ChangeZoneEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -7,8 +9,6 @@ import forge.game.cost.Cost;
|
||||
import forge.game.spellability.AbilityStatic;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class StaticAbilityApiBased extends AbilityStatic {
|
||||
|
||||
private final SpellAbilityEffect effect;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -8,10 +10,8 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.Map;
|
||||
import forge.util.Localizer;
|
||||
|
||||
public class AbandonEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardLists;
|
||||
@@ -7,16 +14,9 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.List;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
public class ActivateAbilityEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.phase.ExtraPhase;
|
||||
import forge.game.phase.PhaseHandler;
|
||||
import forge.game.phase.PhaseType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
@@ -13,32 +20,55 @@ public class AddPhaseEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
boolean isTopsy = sa.getActivatingPlayer().hasKeyword("The phases of your turn are reversed.");
|
||||
PhaseHandler phaseHandler = sa.getActivatingPlayer().getGame().getPhaseHandler();
|
||||
PhaseType extra = PhaseType.smartValueOf(sa.getParam("ExtraPhase"));
|
||||
PhaseType currentPhase = phaseHandler.getPhase();
|
||||
|
||||
PhaseType after;
|
||||
// Check for World at War - may need to be moved to SpellAbilityCondition later?
|
||||
if (sa.hasParam("BeforeFirstPostCombatMainEnd")) {
|
||||
if (!phaseHandler.beforeFirstPostCombatMainEnd()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
PhaseType afterPhase;
|
||||
if (sa.hasParam("AfterPhase")) {
|
||||
after = PhaseType.smartValueOf(sa.getParam("AfterPhase"));
|
||||
afterPhase = PhaseType.smartValueOf(sa.getParam("AfterPhase"));
|
||||
}
|
||||
else {
|
||||
// If "AfterPhase" param is missing it means the added Phase comes after this Phase
|
||||
after = phaseHandler.getPhase();
|
||||
// If "AfterPhase" param is missing it means the added Phase comes afterPhase this Phase
|
||||
afterPhase = currentPhase;
|
||||
}
|
||||
phaseHandler.addExtraPhase(after, extra);
|
||||
|
||||
|
||||
// The original next phase following afterPhase
|
||||
PhaseType nextPhase = PhaseType.getNext(afterPhase, isTopsy);
|
||||
List<PhaseType> extraPhaseList = new ArrayList<>();
|
||||
|
||||
// Insert ExtraPhase
|
||||
String extra = sa.getParam("ExtraPhase");
|
||||
if (extra.equals("Beginning")) {
|
||||
extraPhaseList.addAll(PhaseType.PHASE_GROUPS.get(0));
|
||||
} else if (extra.equals("Combat")) {
|
||||
extraPhaseList.addAll(PhaseType.PHASE_GROUPS.get(2));
|
||||
} else { // Currently no effect will add End Phase
|
||||
extraPhaseList.add(PhaseType.smartValueOf(extra));
|
||||
}
|
||||
|
||||
// Insert FollowedBy
|
||||
if (sa.hasParam("FollowedBy")) {
|
||||
String followedBy = sa.getParam("FollowedBy");
|
||||
PhaseType followingExtra;
|
||||
if ("ThisPhase".equals(followedBy)) {
|
||||
followingExtra = phaseHandler.getPhase();
|
||||
} else {
|
||||
followingExtra = PhaseType.smartValueOf(followedBy);
|
||||
}
|
||||
PhaseType followingAfter = extra.equals(PhaseType.COMBAT_BEGIN) ? PhaseType.COMBAT_END : extra;
|
||||
if (sa.hasParam("AdditionalBeginningPhase")) {
|
||||
followingAfter = extra.equals(PhaseType.UNTAP) ? PhaseType.DRAW : extra;
|
||||
}
|
||||
phaseHandler.addExtraPhase(followingAfter, followingExtra);
|
||||
// Currently all FollowedBy are Main2 phase, which has no step
|
||||
PhaseType followingExtra = PhaseType.smartValueOf(sa.getParam("FollowedBy"));
|
||||
extraPhaseList.add(followingExtra);
|
||||
}
|
||||
|
||||
ExtraPhase extraPhase = phaseHandler.addExtraPhase(afterPhase, extraPhaseList, nextPhase);
|
||||
|
||||
if (sa.hasParam("ExtraPhaseDelayedTrigger")) {
|
||||
final Trigger delTrig = TriggerHandler.parseTrigger(sa.getSVar(sa.getParam("ExtraPhaseDelayedTrigger")), sa.getHostCard(), true);
|
||||
SpellAbility overridingSA = AbilityFactory.getAbility(sa.getSVar(sa.getParam("ExtraPhaseDelayedTriggerExcute")), sa.getHostCard());
|
||||
overridingSA.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
delTrig.setOverridingAbility(overridingSA);
|
||||
extraPhase.addTrigger(delTrig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -10,8 +12,6 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AddTurnEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
@@ -57,6 +57,7 @@ public class AddTurnEffect extends SpellAbilityEffect {
|
||||
}
|
||||
if (sa.hasParam("SkipUntap")) {
|
||||
extra.setSkipUntap(true);
|
||||
extra.setSkipUntapSA(sa);
|
||||
}
|
||||
if (sa.hasParam("NoSchemes")) {
|
||||
extra.setCantSetSchemesInMotion(true);
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.card.CardType;
|
||||
import forge.game.Game;
|
||||
@@ -12,12 +18,6 @@ import forge.game.event.GameEventCardStatsChanged;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
public class AnimateAllEffect extends AnimateEffectBase {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.CardType;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -8,11 +13,6 @@ import forge.game.card.CardUtil;
|
||||
import forge.game.event.GameEventCardStatsChanged;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class AnimateEffect extends AnimateEffectBase {
|
||||
|
||||
|
||||
@@ -17,6 +17,10 @@
|
||||
*/
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.card.CardType;
|
||||
import forge.card.mana.ManaCost;
|
||||
@@ -37,10 +41,6 @@ import forge.game.staticability.StaticAbility;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public abstract class AnimateEffectBase extends SpellAbilityEffect {
|
||||
public static void doAnimate(final Card c, final SpellAbility sa, final Integer power, final Integer toughness,
|
||||
final CardType addType, final CardType removeType, final String colors,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
@@ -15,12 +17,10 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.List;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
public class AttachEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
@@ -199,7 +199,7 @@ public class AttachEffect extends SpellAbilityEffect {
|
||||
final FCollection<Player> players = new FCollection<>();
|
||||
|
||||
for (Player player : game.getPlayers()) {
|
||||
if (player.isValid(tgt.getValidTgts(), aura.getActivatingPlayer(), source, null)) {
|
||||
if (player.isValid(tgt.getValidTgts(), aura.getActivatingPlayer(), source, aura)) {
|
||||
players.add(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -13,10 +17,6 @@ import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
@@ -41,7 +41,7 @@ public class BalanceEffect extends SpellAbilityEffect {
|
||||
|
||||
for(int i = 0; i < players.size(); i++) {
|
||||
// Find the minimum of each Valid per player
|
||||
validCards.add(CardLists.getValidCards(players.get(i).getCardsIn(zone), valid, activator, source));
|
||||
validCards.add(CardLists.getValidCards(players.get(i).getCardsIn(zone), valid, activator, source, sa));
|
||||
min = Math.min(min, validCards.get(i).size());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -8,13 +15,6 @@ import forge.game.event.GameEventCombatChanged;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class BecomesBlockedEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,8 +10,8 @@ import forge.game.player.Player;
|
||||
import forge.game.player.PlayerActionConfirmMode;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
public class BidLifeEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -7,17 +14,11 @@ import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.combat.Combat;
|
||||
import forge.game.event.GameEventCombatChanged;
|
||||
import forge.game.Game;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import forge.util.Lang;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class BlockEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -8,8 +10,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BondEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -12,16 +19,9 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
public class ChangeCombatantsEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
@@ -15,12 +21,6 @@ import forge.game.zone.MagicStack;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
|
||||
@@ -13,8 +13,8 @@ import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.event.GameEventCardStatsChanged;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
public class ChangeTextEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
@@ -8,18 +11,20 @@ import forge.game.GameActionUtil;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Lang;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
@@ -37,6 +42,11 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
//if host is not on the battlefield don't apply
|
||||
if (sa.hasParam("UntilHostLeavesPlay") && !sa.getHostCard().isInPlay()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final ZoneType destination = ZoneType.smartValueOf(sa.getParam("Destination"));
|
||||
final List<ZoneType> origin = ZoneType.listValueOf(sa.getParam("Origin"));
|
||||
|
||||
@@ -74,7 +84,7 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (origin.contains(ZoneType.Library) && sa.hasParam("Search") && sa.getActivatingPlayer().canSearchLibraryWith(sa, null)) {
|
||||
CardCollection libCards = CardLists.getValidCards(cards, "Card.inZoneLibrary", sa.getActivatingPlayer(), source);
|
||||
CardCollection libCards = CardLists.getValidCards(cards, "Card.inZoneLibrary", sa.getActivatingPlayer(), source, sa);
|
||||
CardCollection libCardsYouOwn = CardLists.filterControlledBy(libCards, sa.getActivatingPlayer());
|
||||
if (!libCardsYouOwn.isEmpty()) { // Only searching one's own library would fire Archive Trap's altcost
|
||||
sa.getActivatingPlayer().incLibrarySearched();
|
||||
@@ -88,7 +98,7 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
game.getTriggerHandler().runTrigger(TriggerType.SearchedLibrary, runParams, false);
|
||||
}
|
||||
if (origin.contains(ZoneType.Hand) && sa.hasParam("Search")) {
|
||||
CardCollection handCards = CardLists.filterControlledBy(CardLists.getValidCards(cards, "Card.inZoneHand", sa.getActivatingPlayer(), source),
|
||||
CardCollection handCards = CardLists.filterControlledBy(CardLists.getValidCards(cards, "Card.inZoneHand", sa.getActivatingPlayer(), source, sa),
|
||||
sa.getActivatingPlayer().getOpponents());
|
||||
if (!handCards.isEmpty()) {
|
||||
sa.getActivatingPlayer().getController().reveal(handCards, ZoneType.Hand, handCards.get(0).getOwner());
|
||||
@@ -260,6 +270,10 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
|
||||
triggerList.triggerChangesZoneAll(game);
|
||||
|
||||
if (sa.hasParam("UntilHostLeavesPlay")) {
|
||||
source.addLeavesPlayCommand(untilHostLeavesPlayCommand(triggerList, source));
|
||||
}
|
||||
|
||||
// if Shuffle parameter exists, and any amount of cards were owned by
|
||||
// that player, then shuffle that library
|
||||
if (sa.hasParam("Shuffle")) {
|
||||
@@ -270,5 +284,4 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -15,7 +21,15 @@ import forge.game.GameLogEntryType;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.card.CardView;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.event.GameEventCombatChanged;
|
||||
import forge.game.player.DelayedReveal;
|
||||
import forge.game.player.Player;
|
||||
@@ -31,17 +45,12 @@ import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.MessageUtil;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -409,6 +418,11 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
public void resolve(SpellAbility sa) {
|
||||
//if host is not on the battlefield don't apply
|
||||
if (sa.hasParam("UntilHostLeavesPlay") && !sa.getHostCard().isInPlay()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isHidden(sa) && !sa.hasParam("Ninjutsu")) {
|
||||
changeHiddenOriginResolve(sa);
|
||||
} else {
|
||||
@@ -578,7 +592,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("AttachedTo")) {
|
||||
CardCollection list = AbilityUtils.getDefinedCards(hostCard, sa.getParam("AttachedTo"), sa);
|
||||
if (list.isEmpty()) {
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), gameCard.getController(), gameCard);
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), gameCard.getController(), gameCard, sa);
|
||||
}
|
||||
if (!list.isEmpty()) {
|
||||
Map<String, Object> params = Maps.newHashMap();
|
||||
@@ -711,7 +725,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
movedCard.addCounter(cType, cAmount, player, true, counterTable);
|
||||
}
|
||||
|
||||
if (sa.hasParam("ExileFaceDown")) {
|
||||
if (sa.hasParam("ExileFaceDown") || sa.hasParam("FaceDown")) {
|
||||
movedCard.turnFaceDown(true);
|
||||
}
|
||||
if (sa.hasParam("Foretold")) {
|
||||
@@ -744,7 +758,6 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (remember != null) {
|
||||
hostCard.addRemembered(movedCard);
|
||||
// addRememberedFromCardState ?
|
||||
@@ -797,9 +810,13 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
triggerList.triggerChangesZoneAll(game);
|
||||
counterTable.triggerCountersPutAll(game);
|
||||
|
||||
|
||||
if (sa.hasParam("AtEOT") && !triggerList.isEmpty()) {
|
||||
registerDelayedTrigger(sa, sa.getParam("AtEOT"), triggerList.allCards());
|
||||
}
|
||||
if (sa.hasParam("UntilHostLeavesPlay")) {
|
||||
hostCard.addLeavesPlayCommand(untilHostLeavesPlayCommand(triggerList, hostCard));
|
||||
}
|
||||
|
||||
// for things like Gaea's Blessing
|
||||
if (destination.equals(ZoneType.Library) && sa.hasParam("Shuffle") && "True".equals(sa.getParam("Shuffle"))) {
|
||||
@@ -1096,7 +1113,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
if (totalcmc != null) {
|
||||
if (totcmc >= 0) {
|
||||
fetchList = CardLists.getValidCards(fetchList, "Card.cmcLE" + totcmc, source.getController(), source);
|
||||
fetchList = CardLists.getValidCards(fetchList, "Card.cmcLE" + totcmc, source.getController(), source, sa);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1205,7 +1222,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
if (sa.hasParam("AttachedTo")) {
|
||||
CardCollection list = AbilityUtils.getDefinedCards(source, sa.getParam("AttachedTo"), sa);
|
||||
if (list.isEmpty()) {
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), c.getController(), c);
|
||||
list = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield), sa.getParam("AttachedTo"), c.getController(), c, sa);
|
||||
}
|
||||
if (!list.isEmpty()) {
|
||||
Card attachedTo = null;
|
||||
@@ -1388,6 +1405,10 @@ public class ChangeZoneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
triggerList.triggerChangesZoneAll(game);
|
||||
|
||||
if (sa.hasParam("UntilHostLeavesPlay")) {
|
||||
source.addLeavesPlayCommand(untilHostLeavesPlayCommand(triggerList, source));
|
||||
}
|
||||
|
||||
// remove Controlled While Searching
|
||||
if (controlTimestamp != null) {
|
||||
player.removeController(controlTimestamp);
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -12,10 +16,6 @@ import forge.util.Aggregates;
|
||||
import forge.util.Lang;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
public class CharmEffect extends SpellAbilityEffect {
|
||||
|
||||
public static List<AbilitySub> makePossibleOptions(final SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.card.CardType;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -19,10 +23,6 @@ import forge.util.Aggregates;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseCardEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -24,12 +30,6 @@ import forge.util.Aggregates;
|
||||
import forge.util.ComparableOp;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseCardNameEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
@@ -99,7 +99,7 @@ public class ChooseCardNameEffect extends SpellAbilityEffect {
|
||||
}
|
||||
} else if (chooseFromDefined) {
|
||||
CardCollection choices = AbilityUtils.getDefinedCards(host, sa.getParam("ChooseFromDefinedCards"), sa);
|
||||
choices = CardLists.getValidCards(choices, valid, host.getController(), host);
|
||||
choices = CardLists.getValidCards(choices, valid, host.getController(), host, sa);
|
||||
List<ICardFace> faces = Lists.newArrayList();
|
||||
// get Card
|
||||
for (final Card c : choices) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -9,10 +13,6 @@ import forge.game.spellability.TargetRestrictions;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseColorEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,8 +9,8 @@ import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerController.BinaryChoiceType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
public class ChooseDirectionEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -10,8 +13,6 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Aggregates;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseGenericEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -9,12 +14,8 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -8,10 +10,8 @@ import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
public class ChoosePlayerEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -10,14 +14,9 @@ import forge.game.card.CardLists;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseSourceEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
@@ -36,7 +35,6 @@ public class ChooseSourceEffect extends SpellAbilityEffect {
|
||||
final Card host = sa.getHostCard();
|
||||
final Game game = sa.getActivatingPlayer().getGame();
|
||||
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
final List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
|
||||
CardCollection stackSources = new CardCollection();
|
||||
@@ -85,11 +83,11 @@ public class ChooseSourceEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
if (sa.hasParam("Choices")) {
|
||||
permanentSources = CardLists.getValidCards(permanentSources, sa.getParam("Choices"), host.getController(), host);
|
||||
permanentSources = CardLists.getValidCards(permanentSources, sa.getParam("Choices"), host.getController(), host, sa);
|
||||
|
||||
stackSources = CardLists.getValidCards(stackSources, sa.getParam("Choices"), host.getController(), host);
|
||||
referencedSources = CardLists.getValidCards(referencedSources, sa.getParam("Choices"), host.getController(), host);
|
||||
commandZoneSources = CardLists.getValidCards(commandZoneSources, sa.getParam("Choices"), host.getController(), host);
|
||||
stackSources = CardLists.getValidCards(stackSources, sa.getParam("Choices"), host.getController(), host, sa);
|
||||
referencedSources = CardLists.getValidCards(referencedSources, sa.getParam("Choices"), host.getController(), host, sa);
|
||||
commandZoneSources = CardLists.getValidCards(commandZoneSources, sa.getParam("Choices"), host.getController(), host, sa);
|
||||
}
|
||||
if (sa.hasParam("TargetControls")) {
|
||||
permanentSources = CardLists.filterControlledBy(permanentSources, tgtPlayers.get(0));
|
||||
@@ -133,7 +131,7 @@ public class ChooseSourceEffect extends SpellAbilityEffect {
|
||||
|
||||
for (final Player p : tgtPlayers) {
|
||||
final CardCollection chosen = new CardCollection();
|
||||
if (tgt == null || p.canBeTargetedBy(sa)) {
|
||||
if (!sa.usesTargeting() || p.canBeTargetedBy(sa)) {
|
||||
for (int i = 0; i < validAmount; i++) {
|
||||
final String choiceTitle = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseSource") + " ";
|
||||
Card o = null;
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.security.InvalidParameterException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import forge.card.CardType;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import java.security.InvalidParameterException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ChooseTypeEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import forge.game.GameAction;
|
||||
import forge.game.GameLogEntryType;
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -14,8 +16,6 @@ import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class ClashEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.event.GameEventCardStatsChanged;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardFactory;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.event.GameEventCardStatsChanged;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Localizer;
|
||||
|
||||
public class CloneEffect extends SpellAbilityEffect {
|
||||
// TODO update this method
|
||||
|
||||
@@ -81,7 +84,7 @@ public class CloneEffect extends SpellAbilityEffect {
|
||||
}
|
||||
}
|
||||
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host);
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host, sa);
|
||||
|
||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseaCard") + " ";
|
||||
cardToCopy = activator.getController().chooseSingleEntityForEffect(choices, sa, title, false, null);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
@@ -11,8 +13,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class ControlExchangeEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -9,10 +13,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
|
||||
public class ControlExchangeVariantEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ControlGainVariantEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
CardCollection tgtCards = CardLists.getValidCards(game.getCardsIn(ZoneType.Battlefield),
|
||||
sa.getParam("AllValid"), source.getController(), source);
|
||||
sa.getParam("AllValid"), source.getController(), source, sa);
|
||||
|
||||
if ("NextPlayerInChosenDirection".equals(controller) && (source.getChosenDirection() != null) ) {// Aminatou, the Fateshifter
|
||||
for (final Player p : players) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -8,8 +10,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Lang;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -10,8 +13,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.SpellAbilityStackInstance;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ControlSpellEffect extends SpellAbilityEffect {
|
||||
/* (non-Javadoc)
|
||||
* @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility)
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
@@ -22,15 +27,10 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.PaperCard;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.PredicateString.StringOp;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.PredicateString.StringOp;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.mutable.MutableBoolean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CopyPermanentEffect extends TokenEffectBase {
|
||||
|
||||
@@ -136,7 +136,7 @@ public class CopyPermanentEffect extends TokenEffectBase {
|
||||
|
||||
// For Mimic Vat with mutated creature, need to choose one imprinted card
|
||||
CardCollectionView choices = sa.hasParam("Defined") ? getDefinedCardsOrTargeted(sa) : game.getCardsIn(ZoneType.Battlefield);
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host);
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host, sa);
|
||||
if (!choices.isEmpty()) {
|
||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseaCard");
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
@@ -17,12 +21,8 @@ import forge.game.player.Player;
|
||||
import forge.game.replacement.ReplacementType;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import forge.util.Localizer;
|
||||
|
||||
|
||||
public class CopySpellAbilityEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameLogEntryType;
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -14,12 +20,6 @@ import forge.game.spellability.SpellPermanent;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class CounterEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -13,14 +19,8 @@ import forge.game.player.Player;
|
||||
import forge.game.player.PlayerController;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
public class CountersMoveEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
@@ -13,10 +15,8 @@ import forge.game.player.PlayerController;
|
||||
import forge.game.player.PlayerPredicates;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.collect.FCollection;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
public class CountersProliferateEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -51,7 +51,7 @@ public class CountersPutAllEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
CardCollectionView cards = game.getCardsIn(zone);
|
||||
cards = CardLists.getValidCards(cards, valid, host.getController(), sa.getHostCard());
|
||||
cards = CardLists.getValidCards(cards, valid, host.getController(), sa.getHostCard(), sa);
|
||||
|
||||
if (sa.usesTargeting()) {
|
||||
final Player pl = sa.getTargets().getFirstTargetedPlayer();
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
@@ -18,10 +24,10 @@ import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardFactoryUtil;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates;
|
||||
import forge.game.card.CardPredicates.Presets;
|
||||
import forge.game.card.CardUtil;
|
||||
import forge.game.card.CounterEnumType;
|
||||
import forge.game.card.CounterType;
|
||||
import forge.game.card.CardPredicates.Presets;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerActionConfirmMode;
|
||||
import forge.game.player.PlayerController;
|
||||
@@ -32,14 +38,8 @@ import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import forge.util.Localizer;
|
||||
|
||||
public class CountersPutEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -15,12 +21,6 @@ import forge.game.zone.ZoneType;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* API for adding to or subtracting from existing counters on a target.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -11,10 +15,6 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
public class CountersRemoveAllEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
@@ -52,7 +52,7 @@ public class CountersRemoveAllEffect extends SpellAbilityEffect {
|
||||
final Game game = sa.getActivatingPlayer().getGame();
|
||||
|
||||
CardCollectionView cards = game.getCardsIn(zone);
|
||||
cards = CardLists.getValidCards(cards, valid, sa.getHostCard().getController(), sa.getHostCard());
|
||||
cards = CardLists.getValidCards(cards, valid, sa.getHostCard().getController(), sa.getHostCard(), sa);
|
||||
|
||||
if (sa.usesTargeting()) {
|
||||
final Player pl = sa.getTargets().getFirstTargetedPlayer();
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -15,14 +23,6 @@ import forge.game.zone.Zone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
public class CountersRemoveEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
@@ -13,8 +15,6 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DamageAllEffect extends DamageBaseEffect {
|
||||
/* (non-Javadoc)
|
||||
* @see forge.game.ability.SpellAbilityEffect#getStackDescription(forge.game.spellability.SpellAbility)
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
@@ -21,10 +25,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class DamageDealEffect extends DamageBaseEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
import forge.game.GameObject;
|
||||
@@ -13,8 +15,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.collect.FCollectionView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DamageEachEffect extends DamageBaseEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -66,7 +66,7 @@ public class DamageEachEffect extends DamageBaseEffect {
|
||||
|
||||
FCollectionView<Card> sources = game.getCardsIn(ZoneType.Battlefield);
|
||||
if (sa.hasParam("ValidCards")) {
|
||||
sources = CardLists.getValidCards(sources, sa.getParam("ValidCards"), card.getController(), card);
|
||||
sources = CardLists.getValidCards(sources, sa.getParam("ValidCards"), card.getController(), card, sa);
|
||||
}
|
||||
|
||||
final List<GameObject> tgts = getTargets(sa, "DefinedPlayers");
|
||||
|
||||
@@ -1,13 +1,5 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
@@ -16,6 +8,14 @@ import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.keyword.KeywordInterface;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
public class DebuffEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.phase.PhaseHandler;
|
||||
@@ -8,8 +10,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Lang;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DeclareCombatantsEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
@@ -15,8 +17,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class DelayedTriggerEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameActionUtil;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -10,12 +16,6 @@ import forge.game.card.CardZoneTable;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
public class DestroyEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameActionUtil;
|
||||
@@ -21,13 +25,11 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class DigEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -135,7 +137,7 @@ public class DigEffect extends SpellAbilityEffect {
|
||||
}
|
||||
else if (sa.hasParam("RevealValid")) {
|
||||
final String revealValid = sa.getParam("RevealValid");
|
||||
final CardCollection toReveal = CardLists.getValidCards(top, revealValid, host.getController(), host);
|
||||
final CardCollection toReveal = CardLists.getValidCards(top, revealValid, host.getController(), host, sa);
|
||||
if (!toReveal.isEmpty()) {
|
||||
game.getAction().reveal(toReveal, host.getController());
|
||||
if (sa.hasParam("RememberRevealed")) {
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -11,10 +14,8 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.PlayerZone;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.*;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
public class DigUntilEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,29 +1,32 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameActionUtil;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.*;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollection;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardLists;
|
||||
import forge.game.card.CardPredicates.Presets;
|
||||
import forge.game.card.CardZoneTable;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.PlayerActionConfirmMode;
|
||||
import forge.game.player.PlayerPredicates;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import forge.util.Lang;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
public class DiscardEffect extends SpellAbilityEffect {
|
||||
|
||||
@@ -179,7 +182,7 @@ public class DiscardEffect extends SpellAbilityEffect {
|
||||
if (!p.canDiscardBy(sa)) {
|
||||
continue;
|
||||
}
|
||||
CardCollectionView dPHand = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), "Card.IsNotRemembered", p, source);
|
||||
CardCollectionView dPHand = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), "Card.IsNotRemembered", p, source, sa);
|
||||
if (dPHand.size() > 1) {
|
||||
dPHand = GameActionUtil.orderCardsByTheirOwners(game, dPHand, ZoneType.Graveyard, sa);
|
||||
}
|
||||
@@ -207,7 +210,7 @@ public class DiscardEffect extends SpellAbilityEffect {
|
||||
|
||||
if (runDiscard) {
|
||||
final String valid = sa.hasParam("DiscardValid") ? sa.getParam("DiscardValid") : "Card";
|
||||
List<Card> list = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), valid, source.getController(), source);
|
||||
List<Card> list = CardLists.getValidCards(p.getCardsIn(ZoneType.Hand), valid, source.getController(), source, sa);
|
||||
list = CardLists.filter(list, Presets.NON_TOKEN);
|
||||
CardCollection toDiscard = new CardCollection();
|
||||
for (int i = 0; i < numCards; i++) {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.mana.Mana;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class DrainManaEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -10,8 +12,6 @@ import forge.game.spellability.TargetRestrictions;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DrawEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
protected String getStackDescription(SpellAbility sa) {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.GameCommand;
|
||||
import forge.ImageKeys;
|
||||
import forge.game.Game;
|
||||
@@ -21,13 +28,6 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.collect.FCollection;
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@ import forge.game.card.CardCollectionView;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
import forge.util.Localizer;
|
||||
|
||||
public class EncodeEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
@@ -10,8 +12,6 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class EndTurnEffect extends SpellAbilityEffect {
|
||||
|
||||
// *************************************************************************
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntityCounterTable;
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -17,8 +20,6 @@ import forge.game.zone.ZoneType;
|
||||
import forge.util.Lang;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ExploreEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.Game;
|
||||
@@ -12,11 +15,8 @@ import forge.game.player.Player;
|
||||
import forge.game.replacement.ReplacementType;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.CardTranslation;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import forge.util.Localizer;
|
||||
|
||||
public class FightEffect extends DamageBaseEffect {
|
||||
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import forge.game.GameObject;
|
||||
import forge.game.ability.AbilityKey;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -11,13 +16,8 @@ import forge.game.player.PlayerController;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.util.MyRandom;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import forge.util.MyRandom;
|
||||
|
||||
public class FlipCoinEffect extends SpellAbilityEffect {
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.GameLossReason;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GameLossEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
@@ -13,8 +15,6 @@ import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerHandler;
|
||||
import forge.game.trigger.TriggerType;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class ImmediateTriggerEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LifeExchangeEffect extends SpellAbilityEffect {
|
||||
|
||||
// *************************************************************************
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -8,8 +10,6 @@ import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LifeExchangeVariantEffect extends SpellAbilityEffect {
|
||||
|
||||
// *************************************************************************
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Lang;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LifeGainEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.player.Player;
|
||||
@@ -7,9 +10,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class LifeSetEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import static forge.util.TextUtil.toManaString;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.MagicColor;
|
||||
import forge.card.mana.ManaAtom;
|
||||
@@ -18,12 +24,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static forge.util.TextUtil.toManaString;
|
||||
|
||||
public class ManaEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.card.ColorSet;
|
||||
import forge.card.MagicColor;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -10,10 +14,6 @@ import forge.game.spellability.AbilityManaPart;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class ManaReflectedEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -33,7 +33,7 @@ public class ManifestEffect extends SpellAbilityEffect {
|
||||
}
|
||||
CardCollection choices = new CardCollection(game.getCardsIn(choiceZone));
|
||||
if (sa.hasParam("Choices")) {
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, source);
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, source, sa);
|
||||
}
|
||||
if (choices.isEmpty()) {
|
||||
continue;
|
||||
|
||||
@@ -10,10 +10,9 @@ import forge.game.card.CardZoneTable;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
|
||||
import forge.util.Lang;
|
||||
import forge.util.TextUtil;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.TextUtil;
|
||||
|
||||
public class MillEffect extends SpellAbilityEffect {
|
||||
@Override
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
@@ -17,10 +22,6 @@ import forge.game.zone.ZoneType;
|
||||
import forge.util.Aggregates;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
public class MultiplePilesEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -80,7 +81,7 @@ public class MultiplePilesEffect extends SpellAbilityEffect {
|
||||
} else {
|
||||
pool = new CardCollection(p.getCardsIn(zone));
|
||||
}
|
||||
pool = CardLists.getValidCards(pool, valid, source.getController(), source);
|
||||
pool = CardLists.getValidCards(pool, valid, source.getController(), source, sa);
|
||||
|
||||
List<CardCollectionView> pileList = Lists.newArrayList();
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -10,8 +12,6 @@ import forge.game.player.PlayerCollection;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class MustAttackEffect extends SpellAbilityEffect {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import forge.game.Game;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
@@ -11,12 +17,6 @@ import forge.game.spellability.SpellAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
public class MustBlockEffect extends SpellAbilityEffect {
|
||||
|
||||
@Override
|
||||
@@ -41,7 +41,7 @@ public class MustBlockEffect extends SpellAbilityEffect {
|
||||
}
|
||||
|
||||
CardCollectionView choices = game.getCardsIn(ZoneType.Battlefield);
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host);
|
||||
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host, sa);
|
||||
if (!choices.isEmpty()) {
|
||||
String title = sa.hasParam("ChoiceTitle") ? sa.getParam("ChoiceTitle") : Localizer.getInstance().getMessage("lblChooseaCard") +" ";
|
||||
Map<String, Object> params = Maps.newHashMap();
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user