mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 17:58:01 +00:00
Merge remote-tracking branch 'remotes/core/master' into newBranch
This commit is contained in:
@@ -468,7 +468,7 @@ public class ComputerUtilCost {
|
||||
continue;
|
||||
|
||||
try {
|
||||
extraManaNeeded += Integer.parseInt(snem);
|
||||
extraManaNeeded += Integer.parseInt(parts[0]);
|
||||
} catch (final NumberFormatException e) {
|
||||
System.out.println("wrong SpellsNeedExtraMana SVar format on " + c);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ public enum CardSplitType
|
||||
Transform(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Transformed),
|
||||
Meld(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Meld),
|
||||
Split(FaceSelectionMethod.COMBINE, CardStateName.RightSplit),
|
||||
Flip(FaceSelectionMethod.USE_PRIMARY_FACE, CardStateName.Flipped);
|
||||
Flip(FaceSelectionMethod.USE_PRIMARY_FACE, CardStateName.Flipped),
|
||||
Adventure(FaceSelectionMethod.USE_PRIMARY_FACE, CardStateName.Adventure);
|
||||
|
||||
CardSplitType(FaceSelectionMethod calcMode, CardStateName stateName) {
|
||||
method = calcMode;
|
||||
|
||||
@@ -9,6 +9,7 @@ public enum CardStateName {
|
||||
Meld,
|
||||
LeftSplit,
|
||||
RightSplit,
|
||||
Adventure,
|
||||
|
||||
;
|
||||
|
||||
|
||||
@@ -146,6 +146,10 @@ public class GameAction {
|
||||
}
|
||||
}
|
||||
|
||||
// if an adventureCard is put from Stack somewhere else, need to reset to Original State
|
||||
if (c.isAdventureCard() && (zoneFrom.is(ZoneType.Stack) || !zoneTo.is(ZoneType.Stack))) {
|
||||
c.setState(CardStateName.Original, true);
|
||||
}
|
||||
|
||||
// Clean up the temporary Dash SVar when the Dashed card leaves the battlefield
|
||||
// Clean up the temporary AtEOT SVar
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import forge.card.CardStateName;
|
||||
import forge.card.mana.ManaCost;
|
||||
import forge.card.mana.ManaCostParser;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
@@ -101,6 +102,45 @@ public final class GameActionUtil {
|
||||
}
|
||||
source.turnFaceDownNoUpdate();
|
||||
lkicheck = true;
|
||||
} else if (sa.isAdventure() && !source.isInZone(ZoneType.Battlefield)) {
|
||||
if (!source.isLKI()) {
|
||||
source = CardUtil.getLKICopy(source);
|
||||
}
|
||||
|
||||
source.setState(CardStateName.Adventure, false);
|
||||
|
||||
// need to reset CMC
|
||||
source.setLKICMC(-1);
|
||||
source.setLKICMC(source.getCMC());
|
||||
lkicheck = true;
|
||||
} else if (source.isSplitCard() && (sa.isLeftSplit() || sa.isRightSplit())) {
|
||||
if (!source.isLKI()) {
|
||||
source = CardUtil.getLKICopy(source);
|
||||
}
|
||||
if (sa.isLeftSplit()) {
|
||||
if (!source.hasState(CardStateName.LeftSplit)) {
|
||||
source.addAlternateState(CardStateName.LeftSplit, false);
|
||||
source.getState(CardStateName.LeftSplit).copyFrom(
|
||||
sa.getHostCard().getState(CardStateName.LeftSplit), true);
|
||||
}
|
||||
|
||||
source.setState(CardStateName.LeftSplit, false);
|
||||
}
|
||||
|
||||
if (sa.isRightSplit()) {
|
||||
if (!source.hasState(CardStateName.RightSplit)) {
|
||||
source.addAlternateState(CardStateName.RightSplit, false);
|
||||
source.getState(CardStateName.RightSplit).copyFrom(
|
||||
sa.getHostCard().getState(CardStateName.RightSplit), true);
|
||||
}
|
||||
|
||||
source.setState(CardStateName.RightSplit, false);
|
||||
}
|
||||
|
||||
// need to reset CMC
|
||||
source.setLKICMC(-1);
|
||||
source.setLKICMC(source.getCMC());
|
||||
lkicheck = true;
|
||||
}
|
||||
|
||||
if (lkicheck) {
|
||||
@@ -132,20 +172,6 @@ public final class GameActionUtil {
|
||||
newSA = sa.copyWithManaCostReplaced(activator, o.getAltManaCost());
|
||||
newSA.setBasicSpell(false);
|
||||
changedManaCost = true;
|
||||
if (host.hasSVar("AsForetoldSplitCMCHack")) {
|
||||
// TODO: This is a temporary workaround for As Foretold interaction with split cards, better solution needed.
|
||||
if (sa.isLeftSplit()) {
|
||||
int leftCMC = sa.getHostCard().getCMC(Card.SplitCMCMode.LeftSplitCMC);
|
||||
if (leftCMC > host.getCounters(CounterType.TIME)) {
|
||||
continue;
|
||||
}
|
||||
} else if (sa.isRightSplit()) {
|
||||
int rightCMC = sa.getHostCard().getCMC(Card.SplitCMCMode.RightSplitCMC);
|
||||
if (rightCMC > host.getCounters(CounterType.TIME)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
newSA = sa.copy(activator);
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ public enum GlobalRuleChange {
|
||||
manapoolsDontEmpty ("Mana pools don't empty as steps and phases end."),
|
||||
noCycling ("Players can't cycle cards."),
|
||||
noCreatureETBTriggers ("Creatures entering the battlefield don't cause abilities to trigger."),
|
||||
noCreatureDyingTriggers ("Creatures dying don't cause abilities to trigger."),
|
||||
noLegendRule ("The legend rule doesn't apply."),
|
||||
noPrevention ("Damage can't be prevented."),
|
||||
/* onlyOneAttackerATurn ("No more than one creature can attack each turn."), */
|
||||
|
||||
@@ -351,9 +351,12 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
else if (isDoubleFaced() && currentStateName != CardStateName.Transformed) {
|
||||
return CardStateName.Transformed;
|
||||
}
|
||||
else if (this.isMeldable() && currentStateName != CardStateName.Meld) {
|
||||
else if (isMeldable() && currentStateName != CardStateName.Meld) {
|
||||
return CardStateName.Meld;
|
||||
}
|
||||
else if (this.isAdventureCard() && currentStateName != CardStateName.Adventure) {
|
||||
return CardStateName.Adventure;
|
||||
}
|
||||
else {
|
||||
return CardStateName.Original;
|
||||
}
|
||||
@@ -803,6 +806,10 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
return getRules() != null && getRules().getSplitType() == CardSplitType.Split;
|
||||
}
|
||||
|
||||
public final boolean isAdventureCard() {
|
||||
return hasState(CardStateName.Adventure);
|
||||
}
|
||||
|
||||
public final boolean isBackSide() {
|
||||
return backside;
|
||||
}
|
||||
@@ -1989,7 +1996,19 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
continue;
|
||||
}
|
||||
|
||||
final String sAbility = formatSpellAbility(sa);
|
||||
String sAbility = formatSpellAbility(sa);
|
||||
|
||||
// add Adventure to AbilityText
|
||||
if (sa.isAdventure() && state.getView().getState().equals(CardStateName.Original)) {
|
||||
StringBuilder sbSA = new StringBuilder();
|
||||
sbSA.append("Adventure — ").append(getState(CardStateName.Adventure).getName());
|
||||
if (sa.getPayCosts() != null) {
|
||||
sbSA.append(" ").append(sa.getPayCosts().toSimpleString());
|
||||
}
|
||||
sbSA.append(": ");
|
||||
sbSA.append(sAbility);
|
||||
sAbility = sbSA.toString();
|
||||
}
|
||||
|
||||
if (sa.getManaPart() != null) {
|
||||
if (addedManaStrings.contains(sAbility)) {
|
||||
@@ -2397,10 +2416,21 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
|
||||
// add Facedown abilities from Original state but only if this state is face down
|
||||
// need CardStateView#getState or might crash in StackOverflow
|
||||
if ((mana == null || mana == false) && isFaceDown() && state.getView().getState() == CardStateName.FaceDown) {
|
||||
for (SpellAbility sa : getState(CardStateName.Original).getNonManaAbilities()) {
|
||||
if (sa.isManifestUp() || sa.isMorphUp()) {
|
||||
list.add(sa);
|
||||
if (isInZone(ZoneType.Battlefield)) {
|
||||
if ((mana == null || mana == false) && isFaceDown() && state.getView().getState() == CardStateName.FaceDown) {
|
||||
for (SpellAbility sa : getState(CardStateName.Original).getNonManaAbilities()) {
|
||||
if (sa.isManifestUp() || sa.isMorphUp()) {
|
||||
list.add(sa);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Adenture may only be cast not from Battlefield
|
||||
if (isAdventureCard() && state.getView().getState() == CardStateName.Original) {
|
||||
for (SpellAbility sa : getState(CardStateName.Adventure).getSpellAbilities()) {
|
||||
if (mana == null || mana == sa.isManaAbility()) {
|
||||
list.add(sa);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2692,9 +2722,27 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
|
||||
public final Player getController() {
|
||||
if ((currentZone == null) || ((currentZone.getZoneType() != ZoneType.Battlefield) && (currentZone.getZoneType() != ZoneType.Stack))){
|
||||
//only permanents and spells have controllers [108.4],
|
||||
//so a card really only has a controller while it's on the stack or battlefield.
|
||||
//everywhere else, just use the owner [108.4a].
|
||||
/*
|
||||
* 108.4. A card doesn’t have a controller unless that card represents a permanent or spell; in those cases,
|
||||
* its controller is determined by the rules for permanents or spells. See rules 110.2 and 112.2.
|
||||
* 108.4a If anything asks for the controller of a card that doesn’t have one (because it’s not a permanent
|
||||
* or spell), use its owner instead.
|
||||
*
|
||||
* Control, Controller: "Control" is the system that determines who gets to use an object in the game.
|
||||
* An object's "controller" is the player who currently controls it. See rule 108.4.
|
||||
*
|
||||
* 400.6. If an object would move from one zone to another, determine what event is moving the object.
|
||||
* If the object is moving to a public zone and its owner will be able to look at it in that zone,
|
||||
* its owner looks at it to see if it has any abilities that would affect the move.
|
||||
* If the object is moving to the battlefield, each other player who will be able to look at it in that
|
||||
* zone does so. Then any appropriate replacement effects, whether they come from that object or from
|
||||
* elsewhere, are applied to that event. If any effects or rules try to do two or more contradictory or
|
||||
* mutually exclusive things to a particular object, that object’s CONTROLLER—or its OWNER
|
||||
* IF IT HAS NO CONTROLLER—chooses which effect to apply, and what that effect does.
|
||||
*/
|
||||
if (controller != null) {
|
||||
return controller; // if there's a controller we return this
|
||||
}
|
||||
if (owner != null) {
|
||||
return owner;
|
||||
}
|
||||
@@ -5731,6 +5779,12 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
}
|
||||
|
||||
public void setSplitStateToPlayAbility(final SpellAbility sa) {
|
||||
if (isAdventureCard()) {
|
||||
if (sa.isAdventure()) {
|
||||
setState(CardStateName.Adventure, true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!isSplitCard()) {
|
||||
return; // just in case
|
||||
}
|
||||
|
||||
@@ -305,6 +305,11 @@ public class CardFactory {
|
||||
} else if (c.isMeldable() && cp instanceof PaperCard) {
|
||||
c.setState(CardStateName.Meld, false);
|
||||
c.setImageKey(cp.getImageKey(true));
|
||||
} else if (c.isAdventureCard()) {
|
||||
c.setState(CardStateName.Adventure, false);
|
||||
c.setImageKey(originalPicture);
|
||||
c.setSetCode(cp.getEdition());
|
||||
c.setRarity(cp.getRarity());
|
||||
}
|
||||
|
||||
c.setSetCode(cp.getEdition());
|
||||
@@ -325,7 +330,6 @@ public class CardFactory {
|
||||
|
||||
// ******************************************************************
|
||||
// ************** Link to different CardFactories *******************
|
||||
|
||||
if (state == CardStateName.LeftSplit || state == CardStateName.RightSplit) {
|
||||
for (final SpellAbility sa : card.getSpellAbilities()) {
|
||||
if (state == CardStateName.LeftSplit) {
|
||||
@@ -342,6 +346,9 @@ public class CardFactory {
|
||||
} else if (state != CardStateName.Original){
|
||||
CardFactoryUtil.setupKeywordedAbilities(card);
|
||||
}
|
||||
if (state == CardStateName.Adventure) {
|
||||
CardFactoryUtil.setupAdventureAbility(card);
|
||||
}
|
||||
}
|
||||
|
||||
card.setState(CardStateName.Original, false);
|
||||
@@ -728,6 +735,14 @@ public class CardFactory {
|
||||
final CardState ret2 = new CardState(out, CardStateName.Flipped);
|
||||
ret2.copyFrom(in.getState(CardStateName.Flipped, true), false);
|
||||
result.put(CardStateName.Flipped, ret2);
|
||||
} else if (in.isAdventureCard()) {
|
||||
final CardState ret1 = new CardState(out, CardStateName.Original);
|
||||
ret1.copyFrom(in.getState(CardStateName.Original, true), false);
|
||||
result.put(CardStateName.Original, ret1);
|
||||
|
||||
final CardState ret2 = new CardState(out, CardStateName.Adventure);
|
||||
ret2.copyFrom(in.getState(CardStateName.Adventure, true), false);
|
||||
result.put(CardStateName.Adventure, ret2);
|
||||
} else {
|
||||
// in all other cases just copy the current state to original
|
||||
final CardState ret = new CardState(out, CardStateName.Original);
|
||||
|
||||
@@ -999,6 +999,9 @@ public class CardFactoryUtil {
|
||||
if (sq[0].contains("LifeYourTeamGainedThisTurn")) {
|
||||
return doXMath(cc.getLifeGainedByTeamThisTurn(), m, c);
|
||||
}
|
||||
if (sq[0].contains("LifeYouGainedTimesThisTurn")) {
|
||||
return doXMath(cc.getLifeGainedTimesThisTurn(), m, c);
|
||||
}
|
||||
if (sq[0].contains("LifeOppsLostThisTurn")) {
|
||||
return doXMath(cc.getOpponentLostLifeThisTurn(), m, c);
|
||||
}
|
||||
@@ -1271,7 +1274,7 @@ public class CardFactoryUtil {
|
||||
}
|
||||
|
||||
if (sq[0].contains("CardControllerTypes")) {
|
||||
return doXMath(getCardTypesFromList(cc.getCardsIn(ZoneType.smartValueOf(sq[1]))), m, c);
|
||||
return doXMath(getCardTypesFromList(cc.getCardsIn(ZoneType.listValueOf(sq[1]))), m, c);
|
||||
}
|
||||
|
||||
if (sq[0].contains("CardTypes")) {
|
||||
@@ -4738,4 +4741,30 @@ public class CardFactoryUtil {
|
||||
}
|
||||
return byClause + StringUtils.join(orClauses, " or ") + ".";
|
||||
}
|
||||
|
||||
public static void setupAdventureAbility(Card card) {
|
||||
if (card.getCurrentStateName() != CardStateName.Adventure) {
|
||||
return;
|
||||
}
|
||||
SpellAbility sa = card.getFirstSpellAbility();
|
||||
if (sa == null) {
|
||||
return;
|
||||
}
|
||||
sa.setAdventure(true);
|
||||
|
||||
String abExile = "DB$ ChangeZone | Defined$ Self | Origin$ Stack | Destination$ Exile | StackDescription$ None";
|
||||
|
||||
AbilitySub saExile = (AbilitySub)AbilityFactory.getAbility(abExile, card);
|
||||
|
||||
String abEffect = "DB$ Effect | RememberObjects$ Self | StaticAbilities$ Play | ExileOnMoved$ Exile | Duration$ Permanent | ConditionDefined$ Self | ConditionPresent$ Card.nonCopiedSpell";
|
||||
AbilitySub saEffect = (AbilitySub)AbilityFactory.getAbility(abEffect, card);
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Mode$ Continuous | MayPlay$ True | EffectZone$ Command | Affected$ Card.IsRemembered+nonAdventure");
|
||||
sb.append(" | AffectedZone$ Exile | Description$ You may cast the card.");
|
||||
saEffect.setSVar("Play", sb.toString());
|
||||
|
||||
saExile.setSubAbility(saEffect);
|
||||
sa.appendSubAbility(saExile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,26 +107,8 @@ public class CardProperty {
|
||||
if (card.isSplitCard()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("leftcmc") || property.startsWith("rightcmc")) {
|
||||
int x;
|
||||
int y = 0;
|
||||
String rhs = "";
|
||||
|
||||
if (property.startsWith("leftcmc")) {
|
||||
rhs = property.substring(9);
|
||||
y = card.getCMC(Card.SplitCMCMode.LeftSplitCMC);
|
||||
} else if (property.startsWith("rightcmc")) {
|
||||
rhs = property.substring(10);
|
||||
y = card.getCMC(Card.SplitCMCMode.RightSplitCMC);
|
||||
}
|
||||
|
||||
try {
|
||||
x = Integer.parseInt(rhs);
|
||||
} catch (final NumberFormatException e) {
|
||||
x = AbilityUtils.calculateAmount(source, rhs, spellAbility);
|
||||
}
|
||||
|
||||
if (!Expressions.compare(y, property, x)) {
|
||||
} else if (property.equals("AdventureCard")) {
|
||||
if (!card.isAdventureCard()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("YouCtrl")) {
|
||||
@@ -1358,6 +1340,14 @@ public class CardProperty {
|
||||
if (card.isToken()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("copiedSpell")) {
|
||||
if (!card.isCopiedSpell()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("nonCopiedSpell")) {
|
||||
if (card.isCopiedSpell()) {
|
||||
return false;
|
||||
}
|
||||
} else if (property.startsWith("hasXCost")) {
|
||||
SpellAbility sa1 = card.getFirstSpellAbility();
|
||||
if (sa1 != null && !sa1.isXCost()) {
|
||||
|
||||
@@ -225,6 +225,11 @@ public final class CardUtil {
|
||||
newCopy.turnFaceDownNoUpdate();
|
||||
}
|
||||
|
||||
if (in.isAdventureCard() && in.getFaceupCardStateName().equals(CardStateName.Original)) {
|
||||
newCopy.addAlternateState(CardStateName.Adventure, false);
|
||||
newCopy.getState(CardStateName.Adventure).copyFrom(in.getState(CardStateName.Adventure), true);
|
||||
}
|
||||
|
||||
/*
|
||||
if (in.isCloned()) {
|
||||
newCopy.addAlternateState(CardStateName.Cloner, false);
|
||||
|
||||
@@ -93,6 +93,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
private int lifeLostThisTurn = 0;
|
||||
private int lifeLostLastTurn = 0;
|
||||
private int lifeGainedThisTurn = 0;
|
||||
private int lifeGainedTimesThisTurn = 0;
|
||||
private int lifeGainedByTeamThisTurn = 0;
|
||||
private int numPowerSurgeLands;
|
||||
private int numLibrarySearchedOwn = 0; //The number of times this player has searched his library
|
||||
@@ -440,6 +441,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
view.updateLife(this);
|
||||
newLifeSet = true;
|
||||
lifeGainedThisTurn += lifeGain;
|
||||
lifeGainedTimesThisTurn++;
|
||||
|
||||
// team mates need to be notified about life gained
|
||||
for (final Player p : getTeamMates(true)) {
|
||||
@@ -2242,6 +2244,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
lifeGainedThisTurn = n;
|
||||
}
|
||||
|
||||
public final int getLifeGainedTimesThisTurn() {
|
||||
return lifeGainedTimesThisTurn;
|
||||
}
|
||||
|
||||
public final int getLifeLostThisTurn() {
|
||||
return lifeLostThisTurn;
|
||||
}
|
||||
@@ -2935,6 +2941,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
||||
setLifeLostLastTurn(getLifeLostThisTurn());
|
||||
setLifeLostThisTurn(0);
|
||||
lifeGainedThisTurn = 0;
|
||||
lifeGainedTimesThisTurn = 0;
|
||||
lifeGainedByTeamThisTurn = 0;
|
||||
setLibrarySearched(0);
|
||||
setNumManaConversion(0);
|
||||
|
||||
@@ -100,6 +100,10 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
|
||||
if (card.isSplitCard()) {
|
||||
CardStateName name = isLeftSplit() ? CardStateName.LeftSplit : CardStateName.RightSplit;
|
||||
isInstant = card.getState(name).getType().isInstant();
|
||||
} else if (isAdventure()) {
|
||||
if (card.hasState(CardStateName.Adventure)) {
|
||||
isInstant = card.getState(CardStateName.Adventure).getType().isInstant();
|
||||
}
|
||||
}
|
||||
|
||||
boolean lkicheck = false;
|
||||
@@ -130,6 +134,13 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
|
||||
}
|
||||
card.turnFaceDownNoUpdate();
|
||||
lkicheck = true;
|
||||
} else if (isAdventure()) {
|
||||
if (!card.isLKI()) {
|
||||
card = CardUtil.getLKICopy(card);
|
||||
}
|
||||
|
||||
card.setState(CardStateName.Adventure, false);
|
||||
lkicheck = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ import forge.game.staticability.StaticAbility;
|
||||
import forge.game.trigger.Trigger;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.trigger.WrappedAbility;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.util.Expressions;
|
||||
import forge.util.TextUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -118,6 +119,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
|
||||
private boolean basicLandAbility = false;
|
||||
|
||||
private boolean adventure = false;
|
||||
private SplitSide splitSide = null;
|
||||
enum SplitSide { LEFT, RIGHT }
|
||||
|
||||
@@ -565,6 +567,15 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
public void setTriggeringObject(final AbilityKey type, final Object o) {
|
||||
triggeringObjects.put(type, o);
|
||||
}
|
||||
public void setTriggeringObjectsFrom(final Trigger trigger, final AbilityKey... types) {
|
||||
int typesLength = types.length;
|
||||
for (int i = 0; i < typesLength; i += 1) {
|
||||
AbilityKey type = types[i];
|
||||
triggeringObjects.put(type, trigger.getFromRunParams(type));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean hasTriggeringObject(final AbilityKey type) {
|
||||
return triggeringObjects.containsKey(type);
|
||||
}
|
||||
@@ -852,6 +863,12 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
public void setRightSplit() {
|
||||
splitSide = SplitSide.RIGHT;
|
||||
}
|
||||
public boolean isAdventure() {
|
||||
return this.adventure;
|
||||
}
|
||||
public void setAdventure(boolean adventure) {
|
||||
this.adventure = adventure;
|
||||
}
|
||||
|
||||
public SpellAbility copy() {
|
||||
return copy(hostCard, false);
|
||||
@@ -1045,6 +1062,14 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (hasParam("TargetsWithControllerProperty") && entity instanceof Card) {
|
||||
final String prop = getParam("TargetsWithControllerProperty");
|
||||
final Card c = (Card) entity;
|
||||
if (prop.equals("cmcLECardsInGraveyard")
|
||||
&& c.getCMC() > c.getController().getCardsIn(ZoneType.Graveyard).size()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (hasParam("TargetsWithRelatedProperty") && entity instanceof Card) {
|
||||
final String related = getParam("TargetsWithRelatedProperty");
|
||||
final Card c = (Card) entity;
|
||||
@@ -1587,6 +1612,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
if (hasParam("TargetType") && !topSA.isValid(getParam("TargetType").split(","), getActivatingPlayer(), getHostCard(), this)) {
|
||||
return false;
|
||||
}
|
||||
if (hasParam("TargetsWithControllerProperty")) {
|
||||
final String prop = getParam("TargetsWithControllerProperty");
|
||||
if (prop.equals("cmcLECardsInGraveyard")
|
||||
&& topSA.getHostCard().getCMC() > topSA.getActivatingPlayer().getCardsIn(ZoneType.Graveyard).size()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
final String splitTargetRestrictions = tgt.getSAValidTargeting();
|
||||
if (splitTargetRestrictions != null) {
|
||||
|
||||
@@ -66,7 +66,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
|
||||
|
||||
/** The run params. */
|
||||
private Map<String, Object> runParams;
|
||||
private Map<AbilityKey, Object> runParams;
|
||||
|
||||
private TriggerType mode;
|
||||
|
||||
@@ -122,7 +122,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
this.id = nextId();
|
||||
this.intrinsic = intrinsic;
|
||||
|
||||
this.setRunParams(new HashMap<>()); // TODO: Consider whether this can be null instead, for performance reasons.
|
||||
this.setRunParams(AbilityKey.newMap()); // TODO: Consider whether this can be null instead, for performance reasons.
|
||||
this.originalMapParams.putAll(params);
|
||||
this.mapParams.putAll(params);
|
||||
this.setHostCard(host);
|
||||
@@ -460,8 +460,8 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
*
|
||||
* @return the runParams
|
||||
*/
|
||||
public Map<String, Object> getRunParams() {
|
||||
return this.runParams;
|
||||
public Object getFromRunParams(AbilityKey key) {
|
||||
return this.runParams.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -470,7 +470,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
||||
* @param runParams0
|
||||
* the runParams to set
|
||||
*/
|
||||
public void setRunParams(final Map<String, Object> runParams0) {
|
||||
public void setRunParams(final Map<AbilityKey, Object> runParams0) {
|
||||
this.runParams = runParams0;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TriggerAbandoned extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Scheme);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -64,7 +64,7 @@ public class TriggerAdapt extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -73,8 +73,8 @@ public class TriggerAttached extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("AttachSource"));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("AttachTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, getFromRunParams(AbilityKey.AttachSource));
|
||||
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.AttachTarget));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -85,11 +85,14 @@ public class TriggerAttackerBlocked extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Blockers, getRunParams().get("Blockers"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, getRunParams().get("Defender"));
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.NumBlockers, getRunParams().get("NumBlockers"));
|
||||
sa.setTriggeringObjectsFrom(
|
||||
this,
|
||||
AbilityKey.Attacker,
|
||||
AbilityKey.Blockers,
|
||||
AbilityKey.Defender,
|
||||
AbilityKey.DefendingPlayer,
|
||||
AbilityKey.NumBlockers
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -88,8 +88,7 @@ public class TriggerAttackerBlockedByCreature extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Attacker, AbilityKey.Blocker);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,9 +70,7 @@ public class TriggerAttackerUnblocked extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Defender"));
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Attacker, AbilityKey.Defender, AbilityKey.DefendingPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -85,8 +85,7 @@ public class TriggerAttackerUnblockedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.AttackingPlayer, AbilityKey.Defenders);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -87,8 +87,7 @@ public class TriggerAttackersDeclared extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Attackers, AbilityKey.AttackingPlayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -125,10 +125,13 @@ public class TriggerAttacks extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Attacked"));
|
||||
sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Defender, getFromRunParams(AbilityKey.Attacked));
|
||||
sa.setTriggeringObjectsFrom(
|
||||
this,
|
||||
AbilityKey.Attacker,
|
||||
AbilityKey.Defenders,
|
||||
AbilityKey.DefendingPlayer
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -36,7 +36,7 @@ public class TriggerBecomeMonarch extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -65,8 +65,7 @@ public class TriggerBecomeMonstrous extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.MonstrosityAmount, getRunParams().get("MonstrosityAmount"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.MonstrosityAmount);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TriggerBecomeRenowned extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -89,9 +89,8 @@ public class TriggerBecomesTarget extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("Target"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) getFromRunParams(AbilityKey.SourceSA)).getHostCard());
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.SourceSA, AbilityKey.Target);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -81,9 +81,8 @@ public class TriggerBecomesTargetOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("Targets"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.SourceSA, AbilityKey.Targets);
|
||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) getFromRunParams(AbilityKey.SourceSA)).getHostCard());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,8 +52,7 @@ public class TriggerBlockersDeclared extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Blockers, this.getRunParams().get("Blockers"));
|
||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Blockers, AbilityKey.Attackers);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -89,8 +89,7 @@ public class TriggerBlocks extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
|
||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Blocker, AbilityKey.Attackers);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,8 +72,7 @@ public class TriggerChampioned extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Championed, this.getRunParams().get("Championed"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Championed, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -71,7 +71,7 @@ public class TriggerChangesController extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -218,7 +218,7 @@ public class TriggerChangesZone extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,7 +23,7 @@ public class TriggerChangesZoneAll extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
final CardZoneTable table = (CardZoneTable) getRunParams().get("Cards");
|
||||
final CardZoneTable table = (CardZoneTable) getFromRunParams(AbilityKey.Cards);
|
||||
|
||||
CardCollection allCards = this.filterCards(table);
|
||||
|
||||
|
||||
@@ -121,10 +121,7 @@ public class TriggerCounterAdded extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
if (this.getRunParams().containsKey("Card"))
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
if (this.getRunParams().containsKey("Player"))
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,7 +25,7 @@ public class TriggerCounterAddedAll extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
final GameEntityCounterTable table = (GameEntityCounterTable) getRunParams().get("Objects");
|
||||
final GameEntityCounterTable table = (GameEntityCounterTable) getFromRunParams(AbilityKey.Objects);
|
||||
|
||||
Map<GameEntity, Integer> all = this.filterTable(table);
|
||||
|
||||
|
||||
@@ -106,11 +106,8 @@ public class TriggerCounterAddedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
if (this.getRunParams().containsKey("Card"))
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
if (this.getRunParams().containsKey("Player"))
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||
sa.setTriggeringObject(AbilityKey.Amount, getFromRunParams(AbilityKey.CounterAmount));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -83,7 +83,7 @@ public class TriggerCounterRemoved extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -74,8 +74,8 @@ public class TriggerCounterRemovedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
sa.setTriggeringObject(AbilityKey.Amount, getFromRunParams(AbilityKey.CounterAmount));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -93,10 +93,13 @@ public class TriggerCountered extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.CounteredSA, this.getRunParams().get("CounteredSA"));
|
||||
sa.setTriggeringObjectsFrom(
|
||||
this,
|
||||
AbilityKey.Card,
|
||||
AbilityKey.Cause,
|
||||
AbilityKey.Player,
|
||||
AbilityKey.CounteredSA
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -39,8 +39,7 @@ public class TriggerCrewed extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Vehicle, this.getRunParams().get("Vehicle"));
|
||||
sa.setTriggeringObject(AbilityKey.Crew, this.getRunParams().get("Crew"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Vehicle, AbilityKey.Crew);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,7 +50,7 @@ public class TriggerCycled extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -106,9 +106,9 @@ public class TriggerDamageDealtOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("DamageSource"));
|
||||
sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("DamageTargets"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||
sa.setTriggeringObject(AbilityKey.Source, getFromRunParams(AbilityKey.DamageSource));
|
||||
sa.setTriggeringObject(AbilityKey.Targets, getFromRunParams(AbilityKey.DamageTargets));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -119,11 +119,14 @@ public class TriggerDamageDone extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
// This parameter is here because LKI information related to combat doesn't work properly
|
||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)getFromRunParams(AbilityKey.DamageSource)));
|
||||
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||
sa.setTriggeringObjectsFrom(
|
||||
this,
|
||||
AbilityKey.DamageAmount,
|
||||
// This parameter is here because LKI information related to combat doesn't work properly
|
||||
AbilityKey.DefendingPlayer
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -58,15 +58,9 @@ public class TriggerDamageDoneOnce extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
if (this.getRunParams().containsKey("DamageTarget")) {
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
}
|
||||
if (this.getRunParams().containsKey("DamageSources")) {
|
||||
sa.setTriggeringObject(AbilityKey.Sources, this.getRunParams().get("DamageSources"));
|
||||
}
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
|
||||
|
||||
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||
sa.setTriggeringObject(AbilityKey.Sources, getFromRunParams(AbilityKey.DamageSources));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -103,9 +103,9 @@ public class TriggerDamagePrevented extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)getFromRunParams(AbilityKey.DamageSource)));
|
||||
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -94,8 +94,8 @@ public class TriggerDamagePreventedOnce extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -68,8 +68,7 @@ public class TriggerDestroyed extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Causer, this.getRunParams().get("Causer"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Causer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -61,7 +61,7 @@ public class TriggerDevoured extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Devoured, this.getRunParams().get("Devoured"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Devoured);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -86,8 +86,7 @@ public class TriggerDiscarded extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Cause);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -81,8 +81,7 @@ public class TriggerDrawn extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -62,7 +62,7 @@ public class TriggerEvolved extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,8 +33,7 @@ public class TriggerExerted extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -97,7 +97,7 @@ public class TriggerExiled extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,8 +72,7 @@ public class TriggerExploited extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Exploited, this.getRunParams().get("Exploited"));
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Exploited, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -62,7 +62,7 @@ public class TriggerExplores extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Explorer, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Explorer, getFromRunParams(AbilityKey.Card));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TriggerFight extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Fighter, this.getRunParams().get("Fighter"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Fighter);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,7 +70,7 @@ public class TriggerFlippedCoin extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -338,7 +338,7 @@ public class TriggerHandler {
|
||||
private void runStateTrigger(final Map<AbilityKey, Object> runParams) {
|
||||
for (final Trigger t: activeTriggers) {
|
||||
if (canRunTrigger(t, TriggerType.Always, runParams)) {
|
||||
runSingleTrigger(t, toStringMap(runParams));
|
||||
runSingleTrigger(t, runParams);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -376,7 +376,7 @@ public class TriggerHandler {
|
||||
// Static triggers
|
||||
for (final Trigger t : Lists.newArrayList(activeTriggers)) {
|
||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||
runSingleTrigger(t, toStringMap(runParams));
|
||||
runSingleTrigger(t, runParams);
|
||||
|
||||
checkStatics = true;
|
||||
}
|
||||
@@ -420,7 +420,6 @@ public class TriggerHandler {
|
||||
|
||||
final TriggerType mode = wt.getMode();
|
||||
final Map<AbilityKey, Object> runParams = wt.getParams();
|
||||
final Map<String, Object> stringRunParams = toStringMap(runParams);
|
||||
final List<Trigger> triggers = wt.getTriggers() != null ? wt.getTriggers() : activeTriggers;
|
||||
|
||||
Card card = null;
|
||||
@@ -450,7 +449,7 @@ public class TriggerHandler {
|
||||
int x = 1 + handlePanharmonicon(t, runParams, player);
|
||||
|
||||
for (int i = 0; i < x; ++i) {
|
||||
runSingleTrigger(t, stringRunParams);
|
||||
runSingleTrigger(t, runParams);
|
||||
}
|
||||
checkStatics = true;
|
||||
}
|
||||
@@ -459,7 +458,7 @@ public class TriggerHandler {
|
||||
for (final Trigger deltrig : delayedTriggersWorkingCopy) {
|
||||
if (deltrig.getHostCard().getController().equals(player)) {
|
||||
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
||||
runSingleTrigger(deltrig, stringRunParams);
|
||||
runSingleTrigger(deltrig, runParams);
|
||||
delayedTriggers.remove(deltrig);
|
||||
}
|
||||
}
|
||||
@@ -541,20 +540,34 @@ public class TriggerHandler {
|
||||
}
|
||||
}
|
||||
} // Torpor Orb check
|
||||
|
||||
if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureDyingTriggers)
|
||||
&& !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) {
|
||||
if (runParams.get(AbilityKey.Destination) instanceof String && runParams.get(AbilityKey.Origin) instanceof String) {
|
||||
final String dest = (String) runParams.get(AbilityKey.Destination);
|
||||
final String origin = (String) runParams.get(AbilityKey.Origin);
|
||||
if (dest.equals("Graveyard") && origin.equals("Battlefield") && runParams.get(AbilityKey.Card) instanceof Card) {
|
||||
final Card card = (Card) runParams.get(AbilityKey.Card);
|
||||
if (card.isCreature()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Checks if the conditions are right for a single trigger to go off, and
|
||||
// runs it if so.
|
||||
// Return true if the trigger went off, false otherwise.
|
||||
private void runSingleTrigger(final Trigger regtrig, final Map<String, Object> runParams) {
|
||||
private void runSingleTrigger(final Trigger regtrig, final Map<AbilityKey, Object> runParams) {
|
||||
final Map<String, String> triggerParams = regtrig.getMapParams();
|
||||
|
||||
regtrig.setRunParams(runParams);
|
||||
|
||||
// All tests passed, execute ability.
|
||||
if (regtrig instanceof TriggerTapsForMana) {
|
||||
final SpellAbility abMana = (SpellAbility) runParams.get("AbilityMana");
|
||||
final SpellAbility abMana = (SpellAbility) runParams.get(AbilityKey.AbilityMana);
|
||||
if (null != abMana && null != abMana.getManaPart()) {
|
||||
abMana.setUndoable(false);
|
||||
}
|
||||
@@ -562,7 +575,7 @@ public class TriggerHandler {
|
||||
|
||||
SpellAbility sa = null;
|
||||
Card host = regtrig.getHostCard();
|
||||
final Card trigCard = regtrig.getRunParams().containsKey("Card") ? (Card)regtrig.getRunParams().get("Card") : null;
|
||||
final Card trigCard = (Card) regtrig.getFromRunParams(AbilityKey.Card);
|
||||
|
||||
if (trigCard != null && (host.getId() == trigCard.getId())) {
|
||||
host = trigCard;
|
||||
|
||||
@@ -60,7 +60,7 @@ public class TriggerInvestigated extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -52,7 +52,7 @@ public class TriggerLandPlayed extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -74,8 +74,7 @@ public class TriggerLifeGained extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.LifeAmount, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -71,8 +71,7 @@ public class TriggerLifeLost extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.LifeAmount, this.getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.LifeAmount, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -39,7 +39,7 @@ public class TriggerLosesGame extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,8 +70,7 @@ public class TriggerPayCumulativeUpkeep extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.PayingMana, this.getRunParams().get("PayingMana"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.PayingMana);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -70,7 +70,7 @@ public class TriggerPayEcho extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -61,8 +61,7 @@ public class TriggerPayLife extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.LifeAmount, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -60,7 +60,7 @@ public class TriggerPhase extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,7 +28,7 @@ public class TriggerPhaseIn extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -36,7 +36,7 @@ public class TriggerPhaseOut extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -56,7 +56,7 @@ public class TriggerPlanarDice extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -53,7 +53,7 @@ public class TriggerPlaneswalkedFrom extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Cards);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -53,7 +53,7 @@ public class TriggerPlaneswalkedTo extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Cards);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -68,8 +68,7 @@ public class TriggerRegenerated extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Cause);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,7 +32,7 @@ public class TriggerRevealed extends Trigger {
|
||||
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -126,7 +126,7 @@ public class TriggerSacrificed extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -62,7 +62,7 @@ public class TriggerScry extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -74,7 +74,7 @@ public class TriggerSearchedLibrary extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -77,7 +77,7 @@ public class TriggerSetInMotion extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Scheme);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -74,7 +74,7 @@ public class TriggerShuffled extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -264,17 +264,20 @@ public class TriggerSpellAbilityCast extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
final SpellAbility castSA = (SpellAbility) getRunParams().get("CastSA");
|
||||
final SpellAbility castSA = (SpellAbility) getFromRunParams(AbilityKey.CastSA);
|
||||
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(castSA);
|
||||
sa.setTriggeringObject(AbilityKey.Card, castSA.getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.SpellAbility, castSA);
|
||||
sa.setTriggeringObject(AbilityKey.StackInstance, si);
|
||||
sa.setTriggeringObject(AbilityKey.SpellAbilityTargetingCards, (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards());
|
||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Activator, getRunParams().get("Activator"));
|
||||
sa.setTriggeringObject(AbilityKey.CurrentStormCount, getRunParams().get("CurrentStormCount"));
|
||||
sa.setTriggeringObject(AbilityKey.CurrentCastSpells, getRunParams().get("CurrentCastSpells"));
|
||||
sa.setTriggeringObject(AbilityKey.CastSACMC, getRunParams().get("CastSACMC"));
|
||||
sa.setTriggeringObjectsFrom(
|
||||
this,
|
||||
AbilityKey.Player,
|
||||
AbilityKey.Activator,
|
||||
AbilityKey.CurrentStormCount,
|
||||
AbilityKey.CurrentCastSpells,
|
||||
AbilityKey.CastSACMC
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -91,7 +91,7 @@ public class TriggerSpellAbilityCopy extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
final SpellAbility copySA = (SpellAbility) getRunParams().get("CopySA");
|
||||
final SpellAbility copySA = (SpellAbility) getFromRunParams(AbilityKey.CopySA);
|
||||
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(copySA);
|
||||
sa.setTriggeringObject(AbilityKey.Card, copySA.getHostCard());
|
||||
sa.setTriggeringObject(AbilityKey.SpellAbility, copySA);
|
||||
|
||||
@@ -56,7 +56,7 @@ public class TriggerSurveil extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
|
||||
@@ -78,7 +78,7 @@ public class TriggerTaps extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -105,9 +105,7 @@ public class TriggerTapsForMana extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObject(AbilityKey.Produced, this.getRunParams().get("Produced"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player, AbilityKey.Produced);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -59,7 +59,7 @@ public class TriggerTransformed extends Trigger {
|
||||
*/
|
||||
@Override
|
||||
public void setTriggeringObjects(SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Transformer, this.getRunParams().get("Transformer"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Transformer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,7 +21,7 @@ public class TriggerTurnBegin extends Trigger {
|
||||
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -61,7 +61,7 @@ public class TriggerTurnFaceUp extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -73,8 +73,7 @@ public class TriggerUnattach extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Object, getRunParams().get("Object"));
|
||||
sa.setTriggeringObject(AbilityKey.Attach, getRunParams().get("Attach"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Object, AbilityKey.Attach);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -67,7 +67,7 @@ public class TriggerUntaps extends Trigger {
|
||||
/** {@inheritDoc} */
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
||||
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,7 +20,6 @@ package forge.game.trigger;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.ListMultimap;
|
||||
|
||||
import forge.game.ability.AbilityKey;
|
||||
@@ -65,8 +64,13 @@ public class TriggerVote extends Trigger {
|
||||
@Override
|
||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final ListMultimap<Object, Player> votes = (ArrayListMultimap<Object, Player>) this.getRunParams().get("AllVotes");
|
||||
sa.setTriggeringObject(AbilityKey.OtherVoters, getVoters(this.getHostCard().getController(), votes, true, true));
|
||||
FCollection<Player> voters = getVoters(
|
||||
this.getHostCard().getController(),
|
||||
(ListMultimap<Object, Player>) getFromRunParams(AbilityKey.AllVotes),
|
||||
true,
|
||||
true
|
||||
);
|
||||
sa.setTriggeringObject(AbilityKey.OtherVoters, voters);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -659,7 +659,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
||||
public void fizzleTriggersOnStackTargeting(Card c, TriggerType t) {
|
||||
for (SpellAbilityStackInstance si : stack) {
|
||||
SpellAbility sa = si.getSpellAbility(false);
|
||||
if (sa.getTriggeringObjects().containsKey("Target") && sa.getTriggeringObjects().get("Target").equals(c)) {
|
||||
if (sa.getTriggeringObjects().containsKey(AbilityKey.Target) && sa.getTriggeringObjects().get(AbilityKey.Target).equals(c)) {
|
||||
if (sa instanceof WrappedAbility) {
|
||||
WrappedAbility wi = (WrappedAbility)sa;
|
||||
if (wi.getTrigger().getMode() == t) {
|
||||
|
||||
@@ -27,6 +27,7 @@ import forge.screens.match.MatchController;
|
||||
import forge.toolbox.FCardPanel;
|
||||
import forge.toolbox.FDialog;
|
||||
import forge.toolbox.FOverlay;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.collect.FCollectionView;
|
||||
import forge.util.Utils;
|
||||
|
||||
@@ -281,10 +282,10 @@ public class CardZoom extends FOverlay {
|
||||
|
||||
if (currentActivateAction != null) {
|
||||
g.fillRect(FDialog.MSG_BACK_COLOR, 0, 0, w, messageHeight);
|
||||
g.drawText("Swipe up to " + currentActivateAction, FDialog.MSG_FONT, FDialog.MSG_FORE_COLOR, 0, 0, w, messageHeight, false, Align.center, true);
|
||||
g.drawText(Localizer.getInstance().getMessage("lblSwipeUpTo").replace("%s", currentActivateAction), FDialog.MSG_FONT, FDialog.MSG_FORE_COLOR, 0, 0, w, messageHeight, false, Align.center, true);
|
||||
}
|
||||
g.fillRect(FDialog.MSG_BACK_COLOR, 0, h - messageHeight, w, messageHeight);
|
||||
g.drawText("Swipe down to switch to " + (zoomMode ? "detail" : "picture") + " view", FDialog.MSG_FONT, FDialog.MSG_FORE_COLOR, 0, h - messageHeight, w, messageHeight, false, Align.center, true);
|
||||
g.drawText(zoomMode ? Localizer.getInstance().getMessage("lblSwipeDownDetailView") : Localizer.getInstance().getMessage("lblSwipeDownPictureView"), FDialog.MSG_FONT, FDialog.MSG_FORE_COLOR, 0, h - messageHeight, w, messageHeight, false, Align.center, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -73,6 +73,7 @@ public class FDeckChooser extends FScreen {
|
||||
private boolean isAi;
|
||||
|
||||
private final ForgePreferences prefs = FModel.getPreferences();
|
||||
private final Localizer localizer = Localizer.getInstance();
|
||||
private FPref stateSetting = null;
|
||||
private FOptionPane optionPane;
|
||||
|
||||
@@ -98,7 +99,7 @@ public class FDeckChooser extends FScreen {
|
||||
container.add(deckChooser.lstDecks);
|
||||
container.setHeight(FOptionPane.getMaxDisplayObjHeight());
|
||||
|
||||
deckChooser.optionPane = new FOptionPane(null, null, title, null, container, ImmutableList.of("OK", "Cancel"), 0, new Callback<Integer>() {
|
||||
deckChooser.optionPane = new FOptionPane(null, null, title, null, container, ImmutableList.of(Localizer.getInstance().getMessage("lblOK"), Localizer.getInstance().getMessage("lblCancel")), 0, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(Integer result) {
|
||||
if (result == 0) {
|
||||
@@ -309,7 +310,7 @@ public class FDeckChooser extends FScreen {
|
||||
editor = new FDeckEditor(getEditorType(), generatedDeck, true);
|
||||
}
|
||||
else {
|
||||
FOptionPane.showErrorDialog("You must select something before you can generate a new deck.");
|
||||
FOptionPane.showErrorDialog(localizer.getMessage("lblMustSelectGenerateNewDeck"));
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@@ -377,9 +378,10 @@ public class FDeckChooser extends FScreen {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//prompt to duplicate deck if deck doesn't exist already
|
||||
FOptionPane.showConfirmDialog(selectedDeckType + " cannot be edited directly. Would you like to duplicate " + deck.getName() + " for editing as a custom user deck?",
|
||||
"Duplicate Deck?", "Duplicate", "Cancel", new Callback<Boolean>() {
|
||||
FOptionPane.showConfirmDialog(selectedDeckType + " " + localizer.getMessage("lblCannotEditDuplicateCustomDeck").replace("%s", deck.getName()),
|
||||
localizer.getMessage("lblDuplicateDeck"), localizer.getMessage("lblDuplicate"), localizer.getMessage("lblCancel"), new Callback<Boolean>() {
|
||||
@Override
|
||||
public void run(Boolean result) {
|
||||
if (result) {
|
||||
@@ -770,16 +772,16 @@ public class FDeckChooser extends FScreen {
|
||||
btnViewDeck.setVisible(false);
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
|
||||
btnNewDeck.setText("Generate New Deck");
|
||||
btnNewDeck.setText(localizer.getMessage("lblGenerateNewDeck"));
|
||||
switch (deckType) {
|
||||
case COLOR_DECK:
|
||||
btnRandom.setText("Random Colors");
|
||||
btnRandom.setText(localizer.getMessage("lblRandomColors"));
|
||||
break;
|
||||
case THEME_DECK:
|
||||
btnRandom.setText("Random Theme");
|
||||
btnRandom.setText(localizer.getMessage("lblRandomTheme"));
|
||||
break;
|
||||
default:
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setText(localizer.getMessage("lblRandomDeck"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -789,11 +791,11 @@ public class FDeckChooser extends FScreen {
|
||||
btnViewDeck.setVisible(true);
|
||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||
|
||||
btnNewDeck.setText("New Deck");
|
||||
btnNewDeck.setText(localizer.getMessage("lblNewDeck"));
|
||||
|
||||
if (lstDecks.getGameType() == GameType.DeckManager) {
|
||||
//handle special case of Deck Editor screen where this button will start a game with the deck
|
||||
btnRandom.setText("Test Deck");
|
||||
btnRandom.setText(localizer.getMessage("lblTestDeck"));
|
||||
|
||||
switch (selectedDeckType) {
|
||||
case SCHEME_DECK:
|
||||
@@ -806,7 +808,7 @@ public class FDeckChooser extends FScreen {
|
||||
}
|
||||
}
|
||||
else {
|
||||
btnRandom.setText("Random Deck");
|
||||
btnRandom.setText(localizer.getMessage("lblRandomDeck"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1063,7 +1065,7 @@ public class FDeckChooser extends FScreen {
|
||||
return;
|
||||
}
|
||||
|
||||
GuiChoose.getInteger("How many opponents are you willing to face?", 1, 50, new Callback<Integer>() {
|
||||
GuiChoose.getInteger(localizer.getMessage("lblHowManyOpponents"), 1, 50, new Callback<Integer>() {
|
||||
@Override
|
||||
public void run(final Integer numOpponents) {
|
||||
if (numOpponents == null) { return; }
|
||||
@@ -1089,7 +1091,7 @@ public class FDeckChooser extends FScreen {
|
||||
}
|
||||
|
||||
ListChooser<DeckType> chooser = new ListChooser<>(
|
||||
"Choose allowed deck types for opponents", 0, deckTypes.size(), deckTypes, null, new Callback<List<DeckType>>() {
|
||||
localizer.getMessage("lblChooseAllowedDeckTypeOpponents"), 0, deckTypes.size(), deckTypes, null, new Callback<List<DeckType>>() {
|
||||
@Override
|
||||
public void run(final List<DeckType> allowedDeckTypes) {
|
||||
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
||||
@@ -1109,7 +1111,7 @@ public class FDeckChooser extends FScreen {
|
||||
FThreads.invokeInEdtLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
LoadingOverlay.show("Loading new game...", new Runnable() {
|
||||
LoadingOverlay.show(localizer.getMessage("lblLoadingNewGame"), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, netCat);
|
||||
@@ -1135,12 +1137,12 @@ public class FDeckChooser extends FScreen {
|
||||
}
|
||||
|
||||
private void testVariantDeck(final Deck userDeck, final GameType variant) {
|
||||
promptForDeck("Select Opponent's Deck", variant, true, new Callback<Deck>() {
|
||||
promptForDeck(localizer.getMessage("lblSelectOpponentDeck"), variant, true, new Callback<Deck>() {
|
||||
@Override
|
||||
public void run(final Deck aiDeck) {
|
||||
if (aiDeck == null) { return; }
|
||||
|
||||
LoadingOverlay.show("Loading new game...", new Runnable() {
|
||||
LoadingOverlay.show(localizer.getMessage("lblLoadingNewGame"), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Set<GameType> appliedVariants = new HashSet<>();
|
||||
|
||||
@@ -18,6 +18,7 @@ import forge.itemmanager.filters.DeckFormatFilter;
|
||||
import forge.itemmanager.filters.TextSearchFilter;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.Utils;
|
||||
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
@@ -39,7 +40,7 @@ public final class DeckManager extends ItemManager<DeckProxy> implements IHasGam
|
||||
public DeckManager(final GameType gt) {
|
||||
super(DeckProxy.class, true);
|
||||
gameType = gt;
|
||||
setCaption("Decks");
|
||||
setCaption(Localizer.getInstance().getMessage("lblDecks"));
|
||||
}
|
||||
|
||||
public GameType getGameType() {
|
||||
|
||||
@@ -53,6 +53,7 @@ import forge.toolbox.FList;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
import forge.util.ItemPool;
|
||||
import forge.util.LayoutHelper;
|
||||
import forge.util.Localizer;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
@@ -125,7 +126,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
add(btnAdvancedSearchOptions);
|
||||
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
||||
if (allowSortChange()) {
|
||||
cbxSortOptions = add(new FComboBox<>("Sort: "));
|
||||
cbxSortOptions = add(new FComboBox<>(Localizer.getInstance().getMessage("lblSort") + ": "));
|
||||
cbxSortOptions.setFont(FSkinFont.get(12));
|
||||
}
|
||||
else {
|
||||
@@ -140,7 +141,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
FPopupMenu menu = new FPopupMenu() {
|
||||
@Override
|
||||
protected void buildMenu() {
|
||||
addItem(new FMenuItem("Advanced Search", FSkinImage.SEARCH, new FEventHandler() {
|
||||
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblAdvancedSearch"), FSkinImage.SEARCH, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
if (advancedSearchFilter == null) {
|
||||
@@ -150,7 +151,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
advancedSearchFilter.edit();
|
||||
}
|
||||
}));
|
||||
addItem(new FMenuItem("Reset Filters", FSkinImage.DELETE, new FEventHandler() {
|
||||
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblResetFilters"), FSkinImage.DELETE, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
resetFilters();
|
||||
@@ -261,7 +262,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
||||
}
|
||||
|
||||
if (cbxSortOptions != null) {
|
||||
cbxSortOptions.setText("(none)");
|
||||
cbxSortOptions.setText("(" + Localizer.getInstance().getMessage("lblNone") + ")");
|
||||
}
|
||||
|
||||
model.getCascadeManager().reset();
|
||||
|
||||
@@ -19,6 +19,7 @@ import forge.itemmanager.filters.TextSearchFilter;
|
||||
import forge.quest.QuestSpellShop;
|
||||
import forge.toolbox.FList;
|
||||
import forge.toolbox.FList.CompactModeHandler;
|
||||
import forge.util.Localizer;
|
||||
|
||||
|
||||
public class SpellShopManager extends ItemManager<InventoryItem> {
|
||||
@@ -29,7 +30,7 @@ public class SpellShopManager extends ItemManager<InventoryItem> {
|
||||
|
||||
fnGetPrice = isShop0 ? QuestSpellShop.fnPriceGet : QuestSpellShop.fnPriceSellGet;
|
||||
if (!isShop0) {
|
||||
setCaption("Cards");
|
||||
setCaption(Localizer.getInstance().getMessage("lblCards"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ import forge.toolbox.FTextField;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.util.Callback;
|
||||
import forge.util.Localizer;
|
||||
|
||||
|
||||
public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
|
||||
@@ -126,13 +127,13 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
|
||||
item.setTextRenderer(new TextRenderer()); //ensure symbols are displayed
|
||||
addItem(item);
|
||||
}
|
||||
addItem(new FMenuItem("Edit Expression", FSkinImage.EDIT, new FEventHandler() {
|
||||
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblEditExpression"), FSkinImage.EDIT, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
edit();
|
||||
}
|
||||
}));
|
||||
addItem(new FMenuItem("Remove Filter", FSkinImage.DELETE, new FEventHandler() {
|
||||
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblRemoveFilter"), FSkinImage.DELETE, new FEventHandler() {
|
||||
@Override
|
||||
public void handleEvent(FEvent e) {
|
||||
reset();
|
||||
@@ -176,7 +177,7 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
|
||||
});
|
||||
|
||||
private EditScreen() {
|
||||
super("Advanced Search");
|
||||
super(Localizer.getInstance().getMessage("lblAdvancedSearch"));
|
||||
Filter filter = new Filter();
|
||||
model.addFilterControl(filter);
|
||||
scroller.add(filter);
|
||||
|
||||
@@ -30,6 +30,7 @@ import forge.toolbox.FTextField;
|
||||
import forge.toolbox.FEvent.FEventHandler;
|
||||
import forge.toolbox.FLabel;
|
||||
import forge.toolbox.FScrollPane;
|
||||
import forge.util.Localizer;
|
||||
import forge.util.Utils;
|
||||
|
||||
import java.util.*;
|
||||
@@ -358,7 +359,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
||||
otherItems = groups.get(groups.size() - 1);
|
||||
}
|
||||
else {
|
||||
otherItems = new Group("Other");
|
||||
otherItems = new Group(Localizer.getInstance().getMessage("lblOther"));
|
||||
otherItems.isCollapsed = btnExpandCollapseAll.isAllCollapsed;
|
||||
groups.add(otherItems);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user