Merge remote-tracking branch 'remotes/core/master' into newBranch

This commit is contained in:
Anthony Calosa
2019-09-23 14:49:29 +08:00
198 changed files with 1992 additions and 350 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -9,6 +9,7 @@ public enum CardStateName {
Meld,
LeftSplit,
RightSplit,
Adventure,
;

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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."), */

View File

@@ -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 doesnt 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 doesnt have one (because its 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 objects 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
}

View File

@@ -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);

View File

@@ -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);
}
}

View File

@@ -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()) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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} */

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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} */

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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<>();

View File

@@ -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() {

View File

@@ -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();

View File

@@ -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"));
}
}

View File

@@ -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);

View File

@@ -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