mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 02:08:00 +00:00
Merge remote-tracking branch 'remotes/core/master' into newBranch
This commit is contained in:
@@ -468,7 +468,7 @@ public class ComputerUtilCost {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
extraManaNeeded += Integer.parseInt(snem);
|
extraManaNeeded += Integer.parseInt(parts[0]);
|
||||||
} catch (final NumberFormatException e) {
|
} catch (final NumberFormatException e) {
|
||||||
System.out.println("wrong SpellsNeedExtraMana SVar format on " + c);
|
System.out.println("wrong SpellsNeedExtraMana SVar format on " + c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ public enum CardSplitType
|
|||||||
Transform(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Transformed),
|
Transform(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Transformed),
|
||||||
Meld(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Meld),
|
Meld(FaceSelectionMethod.USE_ACTIVE_FACE, CardStateName.Meld),
|
||||||
Split(FaceSelectionMethod.COMBINE, CardStateName.RightSplit),
|
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) {
|
CardSplitType(FaceSelectionMethod calcMode, CardStateName stateName) {
|
||||||
method = calcMode;
|
method = calcMode;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ public enum CardStateName {
|
|||||||
Meld,
|
Meld,
|
||||||
LeftSplit,
|
LeftSplit,
|
||||||
RightSplit,
|
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 Dash SVar when the Dashed card leaves the battlefield
|
||||||
// Clean up the temporary AtEOT SVar
|
// 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.Lists;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
|
import forge.card.CardStateName;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.card.mana.ManaCostParser;
|
import forge.card.mana.ManaCostParser;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
@@ -101,6 +102,45 @@ public final class GameActionUtil {
|
|||||||
}
|
}
|
||||||
source.turnFaceDownNoUpdate();
|
source.turnFaceDownNoUpdate();
|
||||||
lkicheck = true;
|
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) {
|
if (lkicheck) {
|
||||||
@@ -132,20 +172,6 @@ public final class GameActionUtil {
|
|||||||
newSA = sa.copyWithManaCostReplaced(activator, o.getAltManaCost());
|
newSA = sa.copyWithManaCostReplaced(activator, o.getAltManaCost());
|
||||||
newSA.setBasicSpell(false);
|
newSA.setBasicSpell(false);
|
||||||
changedManaCost = true;
|
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 {
|
} else {
|
||||||
newSA = sa.copy(activator);
|
newSA = sa.copy(activator);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public enum GlobalRuleChange {
|
|||||||
manapoolsDontEmpty ("Mana pools don't empty as steps and phases end."),
|
manapoolsDontEmpty ("Mana pools don't empty as steps and phases end."),
|
||||||
noCycling ("Players can't cycle cards."),
|
noCycling ("Players can't cycle cards."),
|
||||||
noCreatureETBTriggers ("Creatures entering the battlefield don't cause abilities to trigger."),
|
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."),
|
noLegendRule ("The legend rule doesn't apply."),
|
||||||
noPrevention ("Damage can't be prevented."),
|
noPrevention ("Damage can't be prevented."),
|
||||||
/* onlyOneAttackerATurn ("No more than one creature can attack each turn."), */
|
/* 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) {
|
else if (isDoubleFaced() && currentStateName != CardStateName.Transformed) {
|
||||||
return CardStateName.Transformed;
|
return CardStateName.Transformed;
|
||||||
}
|
}
|
||||||
else if (this.isMeldable() && currentStateName != CardStateName.Meld) {
|
else if (isMeldable() && currentStateName != CardStateName.Meld) {
|
||||||
return CardStateName.Meld;
|
return CardStateName.Meld;
|
||||||
}
|
}
|
||||||
|
else if (this.isAdventureCard() && currentStateName != CardStateName.Adventure) {
|
||||||
|
return CardStateName.Adventure;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return CardStateName.Original;
|
return CardStateName.Original;
|
||||||
}
|
}
|
||||||
@@ -803,6 +806,10 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
return getRules() != null && getRules().getSplitType() == CardSplitType.Split;
|
return getRules() != null && getRules().getSplitType() == CardSplitType.Split;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final boolean isAdventureCard() {
|
||||||
|
return hasState(CardStateName.Adventure);
|
||||||
|
}
|
||||||
|
|
||||||
public final boolean isBackSide() {
|
public final boolean isBackSide() {
|
||||||
return backside;
|
return backside;
|
||||||
}
|
}
|
||||||
@@ -1989,7 +1996,19 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
continue;
|
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 (sa.getManaPart() != null) {
|
||||||
if (addedManaStrings.contains(sAbility)) {
|
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
|
// add Facedown abilities from Original state but only if this state is face down
|
||||||
// need CardStateView#getState or might crash in StackOverflow
|
// need CardStateView#getState or might crash in StackOverflow
|
||||||
if ((mana == null || mana == false) && isFaceDown() && state.getView().getState() == CardStateName.FaceDown) {
|
if (isInZone(ZoneType.Battlefield)) {
|
||||||
for (SpellAbility sa : getState(CardStateName.Original).getNonManaAbilities()) {
|
if ((mana == null || mana == false) && isFaceDown() && state.getView().getState() == CardStateName.FaceDown) {
|
||||||
if (sa.isManifestUp() || sa.isMorphUp()) {
|
for (SpellAbility sa : getState(CardStateName.Original).getNonManaAbilities()) {
|
||||||
list.add(sa);
|
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() {
|
public final Player getController() {
|
||||||
if ((currentZone == null) || ((currentZone.getZoneType() != ZoneType.Battlefield) && (currentZone.getZoneType() != ZoneType.Stack))){
|
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.
|
* 108.4. A card doesn’t have a controller unless that card represents a permanent or spell; in those cases,
|
||||||
//everywhere else, just use the owner [108.4a].
|
* 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) {
|
if (owner != null) {
|
||||||
return owner;
|
return owner;
|
||||||
}
|
}
|
||||||
@@ -5731,6 +5779,12 @@ public class Card extends GameEntity implements Comparable<Card> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setSplitStateToPlayAbility(final SpellAbility sa) {
|
public void setSplitStateToPlayAbility(final SpellAbility sa) {
|
||||||
|
if (isAdventureCard()) {
|
||||||
|
if (sa.isAdventure()) {
|
||||||
|
setState(CardStateName.Adventure, true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!isSplitCard()) {
|
if (!isSplitCard()) {
|
||||||
return; // just in case
|
return; // just in case
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -305,6 +305,11 @@ public class CardFactory {
|
|||||||
} else if (c.isMeldable() && cp instanceof PaperCard) {
|
} else if (c.isMeldable() && cp instanceof PaperCard) {
|
||||||
c.setState(CardStateName.Meld, false);
|
c.setState(CardStateName.Meld, false);
|
||||||
c.setImageKey(cp.getImageKey(true));
|
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());
|
c.setSetCode(cp.getEdition());
|
||||||
@@ -325,7 +330,6 @@ public class CardFactory {
|
|||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// ************** Link to different CardFactories *******************
|
// ************** Link to different CardFactories *******************
|
||||||
|
|
||||||
if (state == CardStateName.LeftSplit || state == CardStateName.RightSplit) {
|
if (state == CardStateName.LeftSplit || state == CardStateName.RightSplit) {
|
||||||
for (final SpellAbility sa : card.getSpellAbilities()) {
|
for (final SpellAbility sa : card.getSpellAbilities()) {
|
||||||
if (state == CardStateName.LeftSplit) {
|
if (state == CardStateName.LeftSplit) {
|
||||||
@@ -342,6 +346,9 @@ public class CardFactory {
|
|||||||
} else if (state != CardStateName.Original){
|
} else if (state != CardStateName.Original){
|
||||||
CardFactoryUtil.setupKeywordedAbilities(card);
|
CardFactoryUtil.setupKeywordedAbilities(card);
|
||||||
}
|
}
|
||||||
|
if (state == CardStateName.Adventure) {
|
||||||
|
CardFactoryUtil.setupAdventureAbility(card);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
card.setState(CardStateName.Original, false);
|
card.setState(CardStateName.Original, false);
|
||||||
@@ -728,6 +735,14 @@ public class CardFactory {
|
|||||||
final CardState ret2 = new CardState(out, CardStateName.Flipped);
|
final CardState ret2 = new CardState(out, CardStateName.Flipped);
|
||||||
ret2.copyFrom(in.getState(CardStateName.Flipped, true), false);
|
ret2.copyFrom(in.getState(CardStateName.Flipped, true), false);
|
||||||
result.put(CardStateName.Flipped, ret2);
|
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 {
|
} else {
|
||||||
// in all other cases just copy the current state to original
|
// in all other cases just copy the current state to original
|
||||||
final CardState ret = new CardState(out, CardStateName.Original);
|
final CardState ret = new CardState(out, CardStateName.Original);
|
||||||
|
|||||||
@@ -999,6 +999,9 @@ public class CardFactoryUtil {
|
|||||||
if (sq[0].contains("LifeYourTeamGainedThisTurn")) {
|
if (sq[0].contains("LifeYourTeamGainedThisTurn")) {
|
||||||
return doXMath(cc.getLifeGainedByTeamThisTurn(), m, c);
|
return doXMath(cc.getLifeGainedByTeamThisTurn(), m, c);
|
||||||
}
|
}
|
||||||
|
if (sq[0].contains("LifeYouGainedTimesThisTurn")) {
|
||||||
|
return doXMath(cc.getLifeGainedTimesThisTurn(), m, c);
|
||||||
|
}
|
||||||
if (sq[0].contains("LifeOppsLostThisTurn")) {
|
if (sq[0].contains("LifeOppsLostThisTurn")) {
|
||||||
return doXMath(cc.getOpponentLostLifeThisTurn(), m, c);
|
return doXMath(cc.getOpponentLostLifeThisTurn(), m, c);
|
||||||
}
|
}
|
||||||
@@ -1271,7 +1274,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sq[0].contains("CardControllerTypes")) {
|
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")) {
|
if (sq[0].contains("CardTypes")) {
|
||||||
@@ -4738,4 +4741,30 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
return byClause + StringUtils.join(orClauses, " or ") + ".";
|
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()) {
|
if (card.isSplitCard()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.startsWith("leftcmc") || property.startsWith("rightcmc")) {
|
} else if (property.equals("AdventureCard")) {
|
||||||
int x;
|
if (!card.isAdventureCard()) {
|
||||||
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)) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (property.startsWith("YouCtrl")) {
|
} else if (property.startsWith("YouCtrl")) {
|
||||||
@@ -1358,6 +1340,14 @@ public class CardProperty {
|
|||||||
if (card.isToken()) {
|
if (card.isToken()) {
|
||||||
return false;
|
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")) {
|
} else if (property.startsWith("hasXCost")) {
|
||||||
SpellAbility sa1 = card.getFirstSpellAbility();
|
SpellAbility sa1 = card.getFirstSpellAbility();
|
||||||
if (sa1 != null && !sa1.isXCost()) {
|
if (sa1 != null && !sa1.isXCost()) {
|
||||||
|
|||||||
@@ -225,6 +225,11 @@ public final class CardUtil {
|
|||||||
newCopy.turnFaceDownNoUpdate();
|
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()) {
|
if (in.isCloned()) {
|
||||||
newCopy.addAlternateState(CardStateName.Cloner, false);
|
newCopy.addAlternateState(CardStateName.Cloner, false);
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
private int lifeLostThisTurn = 0;
|
private int lifeLostThisTurn = 0;
|
||||||
private int lifeLostLastTurn = 0;
|
private int lifeLostLastTurn = 0;
|
||||||
private int lifeGainedThisTurn = 0;
|
private int lifeGainedThisTurn = 0;
|
||||||
|
private int lifeGainedTimesThisTurn = 0;
|
||||||
private int lifeGainedByTeamThisTurn = 0;
|
private int lifeGainedByTeamThisTurn = 0;
|
||||||
private int numPowerSurgeLands;
|
private int numPowerSurgeLands;
|
||||||
private int numLibrarySearchedOwn = 0; //The number of times this player has searched his library
|
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);
|
view.updateLife(this);
|
||||||
newLifeSet = true;
|
newLifeSet = true;
|
||||||
lifeGainedThisTurn += lifeGain;
|
lifeGainedThisTurn += lifeGain;
|
||||||
|
lifeGainedTimesThisTurn++;
|
||||||
|
|
||||||
// team mates need to be notified about life gained
|
// team mates need to be notified about life gained
|
||||||
for (final Player p : getTeamMates(true)) {
|
for (final Player p : getTeamMates(true)) {
|
||||||
@@ -2242,6 +2244,10 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
lifeGainedThisTurn = n;
|
lifeGainedThisTurn = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final int getLifeGainedTimesThisTurn() {
|
||||||
|
return lifeGainedTimesThisTurn;
|
||||||
|
}
|
||||||
|
|
||||||
public final int getLifeLostThisTurn() {
|
public final int getLifeLostThisTurn() {
|
||||||
return lifeLostThisTurn;
|
return lifeLostThisTurn;
|
||||||
}
|
}
|
||||||
@@ -2935,6 +2941,7 @@ public class Player extends GameEntity implements Comparable<Player> {
|
|||||||
setLifeLostLastTurn(getLifeLostThisTurn());
|
setLifeLostLastTurn(getLifeLostThisTurn());
|
||||||
setLifeLostThisTurn(0);
|
setLifeLostThisTurn(0);
|
||||||
lifeGainedThisTurn = 0;
|
lifeGainedThisTurn = 0;
|
||||||
|
lifeGainedTimesThisTurn = 0;
|
||||||
lifeGainedByTeamThisTurn = 0;
|
lifeGainedByTeamThisTurn = 0;
|
||||||
setLibrarySearched(0);
|
setLibrarySearched(0);
|
||||||
setNumManaConversion(0);
|
setNumManaConversion(0);
|
||||||
|
|||||||
@@ -100,6 +100,10 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
|
|||||||
if (card.isSplitCard()) {
|
if (card.isSplitCard()) {
|
||||||
CardStateName name = isLeftSplit() ? CardStateName.LeftSplit : CardStateName.RightSplit;
|
CardStateName name = isLeftSplit() ? CardStateName.LeftSplit : CardStateName.RightSplit;
|
||||||
isInstant = card.getState(name).getType().isInstant();
|
isInstant = card.getState(name).getType().isInstant();
|
||||||
|
} else if (isAdventure()) {
|
||||||
|
if (card.hasState(CardStateName.Adventure)) {
|
||||||
|
isInstant = card.getState(CardStateName.Adventure).getType().isInstant();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean lkicheck = false;
|
boolean lkicheck = false;
|
||||||
@@ -130,6 +134,13 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
|
|||||||
}
|
}
|
||||||
card.turnFaceDownNoUpdate();
|
card.turnFaceDownNoUpdate();
|
||||||
lkicheck = true;
|
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.Trigger;
|
||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
import forge.game.trigger.WrappedAbility;
|
import forge.game.trigger.WrappedAbility;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
import forge.util.Expressions;
|
import forge.util.Expressions;
|
||||||
import forge.util.TextUtil;
|
import forge.util.TextUtil;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -118,6 +119,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
|
|
||||||
private boolean basicLandAbility = false;
|
private boolean basicLandAbility = false;
|
||||||
|
|
||||||
|
private boolean adventure = false;
|
||||||
private SplitSide splitSide = null;
|
private SplitSide splitSide = null;
|
||||||
enum SplitSide { LEFT, RIGHT }
|
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) {
|
public void setTriggeringObject(final AbilityKey type, final Object o) {
|
||||||
triggeringObjects.put(type, 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) {
|
public boolean hasTriggeringObject(final AbilityKey type) {
|
||||||
return triggeringObjects.containsKey(type);
|
return triggeringObjects.containsKey(type);
|
||||||
}
|
}
|
||||||
@@ -852,6 +863,12 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
public void setRightSplit() {
|
public void setRightSplit() {
|
||||||
splitSide = SplitSide.RIGHT;
|
splitSide = SplitSide.RIGHT;
|
||||||
}
|
}
|
||||||
|
public boolean isAdventure() {
|
||||||
|
return this.adventure;
|
||||||
|
}
|
||||||
|
public void setAdventure(boolean adventure) {
|
||||||
|
this.adventure = adventure;
|
||||||
|
}
|
||||||
|
|
||||||
public SpellAbility copy() {
|
public SpellAbility copy() {
|
||||||
return copy(hostCard, false);
|
return copy(hostCard, false);
|
||||||
@@ -1045,6 +1062,14 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
return false;
|
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) {
|
if (hasParam("TargetsWithRelatedProperty") && entity instanceof Card) {
|
||||||
final String related = getParam("TargetsWithRelatedProperty");
|
final String related = getParam("TargetsWithRelatedProperty");
|
||||||
final Card c = (Card) entity;
|
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)) {
|
if (hasParam("TargetType") && !topSA.isValid(getParam("TargetType").split(","), getActivatingPlayer(), getHostCard(), this)) {
|
||||||
return false;
|
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();
|
final String splitTargetRestrictions = tgt.getSAValidTargeting();
|
||||||
if (splitTargetRestrictions != null) {
|
if (splitTargetRestrictions != null) {
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
|||||||
|
|
||||||
|
|
||||||
/** The run params. */
|
/** The run params. */
|
||||||
private Map<String, Object> runParams;
|
private Map<AbilityKey, Object> runParams;
|
||||||
|
|
||||||
private TriggerType mode;
|
private TriggerType mode;
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
|||||||
this.id = nextId();
|
this.id = nextId();
|
||||||
this.intrinsic = intrinsic;
|
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.originalMapParams.putAll(params);
|
||||||
this.mapParams.putAll(params);
|
this.mapParams.putAll(params);
|
||||||
this.setHostCard(host);
|
this.setHostCard(host);
|
||||||
@@ -460,8 +460,8 @@ public abstract class Trigger extends TriggerReplacementBase {
|
|||||||
*
|
*
|
||||||
* @return the runParams
|
* @return the runParams
|
||||||
*/
|
*/
|
||||||
public Map<String, Object> getRunParams() {
|
public Object getFromRunParams(AbilityKey key) {
|
||||||
return this.runParams;
|
return this.runParams.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -470,7 +470,7 @@ public abstract class Trigger extends TriggerReplacementBase {
|
|||||||
* @param runParams0
|
* @param runParams0
|
||||||
* the runParams to set
|
* the runParams to set
|
||||||
*/
|
*/
|
||||||
public void setRunParams(final Map<String, Object> runParams0) {
|
public void setRunParams(final Map<AbilityKey, Object> runParams0) {
|
||||||
this.runParams = runParams0;
|
this.runParams = runParams0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class TriggerAbandoned extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Scheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class TriggerAdapt extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,8 +73,8 @@ public class TriggerAttached extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("AttachSource"));
|
sa.setTriggeringObject(AbilityKey.Source, getFromRunParams(AbilityKey.AttachSource));
|
||||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("AttachTarget"));
|
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.AttachTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -85,11 +85,14 @@ public class TriggerAttackerBlocked extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Attacker, getRunParams().get("Attacker"));
|
sa.setTriggeringObjectsFrom(
|
||||||
sa.setTriggeringObject(AbilityKey.Blockers, getRunParams().get("Blockers"));
|
this,
|
||||||
sa.setTriggeringObject(AbilityKey.Defender, getRunParams().get("Defender"));
|
AbilityKey.Attacker,
|
||||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, getRunParams().get("DefendingPlayer"));
|
AbilityKey.Blockers,
|
||||||
sa.setTriggeringObject(AbilityKey.NumBlockers, getRunParams().get("NumBlockers"));
|
AbilityKey.Defender,
|
||||||
|
AbilityKey.DefendingPlayer,
|
||||||
|
AbilityKey.NumBlockers
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -88,8 +88,7 @@ public class TriggerAttackerBlockedByCreature extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Attacker, AbilityKey.Blocker);
|
||||||
sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -70,9 +70,7 @@ public class TriggerAttackerUnblocked extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Attacker, AbilityKey.Defender, AbilityKey.DefendingPlayer);
|
||||||
sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Defender"));
|
|
||||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -85,8 +85,7 @@ public class TriggerAttackerUnblockedOnce extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.AttackingPlayer, AbilityKey.Defenders);
|
||||||
sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -87,8 +87,7 @@ public class TriggerAttackersDeclared extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Attackers, AbilityKey.AttackingPlayer);
|
||||||
sa.setTriggeringObject(AbilityKey.AttackingPlayer, this.getRunParams().get("AttackingPlayer"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -125,10 +125,13 @@ public class TriggerAttacks extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Attacker, this.getRunParams().get("Attacker"));
|
sa.setTriggeringObject(AbilityKey.Defender, getFromRunParams(AbilityKey.Attacked));
|
||||||
sa.setTriggeringObject(AbilityKey.Defender, this.getRunParams().get("Attacked"));
|
sa.setTriggeringObjectsFrom(
|
||||||
sa.setTriggeringObject(AbilityKey.Defenders, this.getRunParams().get("Defenders"));
|
this,
|
||||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
AbilityKey.Attacker,
|
||||||
|
AbilityKey.Defenders,
|
||||||
|
AbilityKey.DefendingPlayer
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class TriggerBecomeMonarch extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -65,8 +65,7 @@ public class TriggerBecomeMonstrous extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.MonstrosityAmount);
|
||||||
sa.setTriggeringObject(AbilityKey.MonstrosityAmount, getRunParams().get("MonstrosityAmount"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class TriggerBecomeRenowned extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -89,9 +89,8 @@ public class TriggerBecomesTarget extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
|
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) getFromRunParams(AbilityKey.SourceSA)).getHostCard());
|
||||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
sa.setTriggeringObjectsFrom(this, AbilityKey.SourceSA, AbilityKey.Target);
|
||||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("Target"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -81,9 +81,8 @@ public class TriggerBecomesTargetOnce extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.SourceSA, this.getRunParams().get("SourceSA"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.SourceSA, AbilityKey.Targets);
|
||||||
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) this.getRunParams().get("SourceSA")).getHostCard());
|
sa.setTriggeringObject(AbilityKey.Source, ((SpellAbility) getFromRunParams(AbilityKey.SourceSA)).getHostCard());
|
||||||
sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("Targets"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ public class TriggerBlockersDeclared extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Blockers, this.getRunParams().get("Blockers"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Blockers, AbilityKey.Attackers);
|
||||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -89,8 +89,7 @@ public class TriggerBlocks extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Blocker, this.getRunParams().get("Blocker"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Blocker, AbilityKey.Attackers);
|
||||||
sa.setTriggeringObject(AbilityKey.Attackers, this.getRunParams().get("Attackers"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -72,8 +72,7 @@ public class TriggerChampioned extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Championed, this.getRunParams().get("Championed"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Championed, AbilityKey.Card);
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public class TriggerChangesController extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ public class TriggerChangesZone extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public class TriggerChangesZoneAll extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
final CardZoneTable table = (CardZoneTable) getRunParams().get("Cards");
|
final CardZoneTable table = (CardZoneTable) getFromRunParams(AbilityKey.Cards);
|
||||||
|
|
||||||
CardCollection allCards = this.filterCards(table);
|
CardCollection allCards = this.filterCards(table);
|
||||||
|
|
||||||
|
|||||||
@@ -121,10 +121,7 @@ public class TriggerCounterAdded extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
if (this.getRunParams().containsKey("Card"))
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
|
||||||
if (this.getRunParams().containsKey("Player"))
|
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class TriggerCounterAddedAll extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
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);
|
Map<GameEntity, Integer> all = this.filterTable(table);
|
||||||
|
|
||||||
|
|||||||
@@ -106,11 +106,8 @@ public class TriggerCounterAddedOnce extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
if (this.getRunParams().containsKey("Card"))
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObject(AbilityKey.Amount, getFromRunParams(AbilityKey.CounterAmount));
|
||||||
if (this.getRunParams().containsKey("Player"))
|
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
|
||||||
sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class TriggerCounterRemoved extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ public class TriggerCounterRemovedOnce extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
sa.setTriggeringObject(AbilityKey.Amount, this.getRunParams().get("CounterAmount"));
|
sa.setTriggeringObject(AbilityKey.Amount, getFromRunParams(AbilityKey.CounterAmount));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -93,10 +93,13 @@ public class TriggerCountered extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(
|
||||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
this,
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
AbilityKey.Card,
|
||||||
sa.setTriggeringObject(AbilityKey.CounteredSA, this.getRunParams().get("CounteredSA"));
|
AbilityKey.Cause,
|
||||||
|
AbilityKey.Player,
|
||||||
|
AbilityKey.CounteredSA
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -39,8 +39,7 @@ public class TriggerCrewed extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Vehicle, this.getRunParams().get("Vehicle"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Vehicle, AbilityKey.Crew);
|
||||||
sa.setTriggeringObject(AbilityKey.Crew, this.getRunParams().get("Crew"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class TriggerCycled extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -106,9 +106,9 @@ public class TriggerDamageDealtOnce extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Source, this.getRunParams().get("DamageSource"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||||
sa.setTriggeringObject(AbilityKey.Targets, this.getRunParams().get("DamageTargets"));
|
sa.setTriggeringObject(AbilityKey.Source, getFromRunParams(AbilityKey.DamageSource));
|
||||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
sa.setTriggeringObject(AbilityKey.Targets, getFromRunParams(AbilityKey.DamageTargets));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -119,11 +119,14 @@ public class TriggerDamageDone extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)getFromRunParams(AbilityKey.DamageSource)));
|
||||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
sa.setTriggeringObjectsFrom(
|
||||||
// This parameter is here because LKI information related to combat doesn't work properly
|
this,
|
||||||
sa.setTriggeringObject(AbilityKey.DefendingPlayer, this.getRunParams().get("DefendingPlayer"));
|
AbilityKey.DamageAmount,
|
||||||
|
// This parameter is here because LKI information related to combat doesn't work properly
|
||||||
|
AbilityKey.DefendingPlayer
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -58,15 +58,9 @@ public class TriggerDamageDoneOnce extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
if (this.getRunParams().containsKey("DamageTarget")) {
|
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
sa.setTriggeringObject(AbilityKey.Sources, getFromRunParams(AbilityKey.DamageSources));
|
||||||
}
|
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||||
if (this.getRunParams().containsKey("DamageSources")) {
|
|
||||||
sa.setTriggeringObject(AbilityKey.Sources, this.getRunParams().get("DamageSources"));
|
|
||||||
}
|
|
||||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -103,9 +103,9 @@ public class TriggerDamagePrevented extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)this.getRunParams().get("DamageSource")));
|
sa.setTriggeringObject(AbilityKey.Source, CardUtil.getLKICopy((Card)getFromRunParams(AbilityKey.DamageSource)));
|
||||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -94,8 +94,8 @@ public class TriggerDamagePreventedOnce extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Target, this.getRunParams().get("DamageTarget"));
|
sa.setTriggeringObject(AbilityKey.Target, getFromRunParams(AbilityKey.DamageTarget));
|
||||||
sa.setTriggeringObject(AbilityKey.DamageAmount, this.getRunParams().get("DamageAmount"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.DamageAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -68,8 +68,7 @@ public class TriggerDestroyed extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Causer);
|
||||||
sa.setTriggeringObject(AbilityKey.Causer, this.getRunParams().get("Causer"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class TriggerDevoured extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Devoured, this.getRunParams().get("Devoured"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Devoured);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -86,8 +86,7 @@ public class TriggerDiscarded extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Cause);
|
||||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -81,8 +81,7 @@ public class TriggerDrawn extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class TriggerEvolved extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ public class TriggerExerted extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class TriggerExiled extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -72,8 +72,7 @@ public class TriggerExploited extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Exploited, this.getRunParams().get("Exploited"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Exploited, AbilityKey.Card);
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class TriggerExplores extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Explorer, this.getRunParams().get("Card"));
|
sa.setTriggeringObject(AbilityKey.Explorer, getFromRunParams(AbilityKey.Card));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class TriggerFight extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Fighter, this.getRunParams().get("Fighter"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Fighter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class TriggerFlippedCoin extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ public class TriggerHandler {
|
|||||||
private void runStateTrigger(final Map<AbilityKey, Object> runParams) {
|
private void runStateTrigger(final Map<AbilityKey, Object> runParams) {
|
||||||
for (final Trigger t: activeTriggers) {
|
for (final Trigger t: activeTriggers) {
|
||||||
if (canRunTrigger(t, TriggerType.Always, runParams)) {
|
if (canRunTrigger(t, TriggerType.Always, runParams)) {
|
||||||
runSingleTrigger(t, toStringMap(runParams));
|
runSingleTrigger(t, runParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -376,7 +376,7 @@ public class TriggerHandler {
|
|||||||
// Static triggers
|
// Static triggers
|
||||||
for (final Trigger t : Lists.newArrayList(activeTriggers)) {
|
for (final Trigger t : Lists.newArrayList(activeTriggers)) {
|
||||||
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
|
||||||
runSingleTrigger(t, toStringMap(runParams));
|
runSingleTrigger(t, runParams);
|
||||||
|
|
||||||
checkStatics = true;
|
checkStatics = true;
|
||||||
}
|
}
|
||||||
@@ -420,7 +420,6 @@ public class TriggerHandler {
|
|||||||
|
|
||||||
final TriggerType mode = wt.getMode();
|
final TriggerType mode = wt.getMode();
|
||||||
final Map<AbilityKey, Object> runParams = wt.getParams();
|
final Map<AbilityKey, Object> runParams = wt.getParams();
|
||||||
final Map<String, Object> stringRunParams = toStringMap(runParams);
|
|
||||||
final List<Trigger> triggers = wt.getTriggers() != null ? wt.getTriggers() : activeTriggers;
|
final List<Trigger> triggers = wt.getTriggers() != null ? wt.getTriggers() : activeTriggers;
|
||||||
|
|
||||||
Card card = null;
|
Card card = null;
|
||||||
@@ -450,7 +449,7 @@ public class TriggerHandler {
|
|||||||
int x = 1 + handlePanharmonicon(t, runParams, player);
|
int x = 1 + handlePanharmonicon(t, runParams, player);
|
||||||
|
|
||||||
for (int i = 0; i < x; ++i) {
|
for (int i = 0; i < x; ++i) {
|
||||||
runSingleTrigger(t, stringRunParams);
|
runSingleTrigger(t, runParams);
|
||||||
}
|
}
|
||||||
checkStatics = true;
|
checkStatics = true;
|
||||||
}
|
}
|
||||||
@@ -459,7 +458,7 @@ public class TriggerHandler {
|
|||||||
for (final Trigger deltrig : delayedTriggersWorkingCopy) {
|
for (final Trigger deltrig : delayedTriggersWorkingCopy) {
|
||||||
if (deltrig.getHostCard().getController().equals(player)) {
|
if (deltrig.getHostCard().getController().equals(player)) {
|
||||||
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
|
||||||
runSingleTrigger(deltrig, stringRunParams);
|
runSingleTrigger(deltrig, runParams);
|
||||||
delayedTriggers.remove(deltrig);
|
delayedTriggers.remove(deltrig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -541,20 +540,34 @@ public class TriggerHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // Torpor Orb check
|
} // 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checks if the conditions are right for a single trigger to go off, and
|
// Checks if the conditions are right for a single trigger to go off, and
|
||||||
// runs it if so.
|
// runs it if so.
|
||||||
// Return true if the trigger went off, false otherwise.
|
// 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();
|
final Map<String, String> triggerParams = regtrig.getMapParams();
|
||||||
|
|
||||||
regtrig.setRunParams(runParams);
|
regtrig.setRunParams(runParams);
|
||||||
|
|
||||||
// All tests passed, execute ability.
|
// All tests passed, execute ability.
|
||||||
if (regtrig instanceof TriggerTapsForMana) {
|
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()) {
|
if (null != abMana && null != abMana.getManaPart()) {
|
||||||
abMana.setUndoable(false);
|
abMana.setUndoable(false);
|
||||||
}
|
}
|
||||||
@@ -562,7 +575,7 @@ public class TriggerHandler {
|
|||||||
|
|
||||||
SpellAbility sa = null;
|
SpellAbility sa = null;
|
||||||
Card host = regtrig.getHostCard();
|
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())) {
|
if (trigCard != null && (host.getId() == trigCard.getId())) {
|
||||||
host = trigCard;
|
host = trigCard;
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class TriggerInvestigated extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class TriggerLandPlayed extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -74,8 +74,7 @@ public class TriggerLifeGained extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.LifeAmount, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -71,8 +71,7 @@ public class TriggerLifeLost extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.LifeAmount, this.getRunParams().get("LifeAmount"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.LifeAmount, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class TriggerLosesGame extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -70,8 +70,7 @@ public class TriggerPayCumulativeUpkeep extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.PayingMana);
|
||||||
sa.setTriggeringObject(AbilityKey.PayingMana, this.getRunParams().get("PayingMana"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class TriggerPayEcho extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -61,8 +61,7 @@ public class TriggerPayLife extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.LifeAmount, getRunParams().get("LifeAmount"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.LifeAmount, AbilityKey.Player);
|
||||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class TriggerPhase extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class TriggerPhaseIn extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class TriggerPhaseOut extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class TriggerPlanarDice extends Trigger {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class TriggerPlaneswalkedFrom extends Trigger {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(final SpellAbility sa) {
|
public void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Cards);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class TriggerPlaneswalkedTo extends Trigger {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Cards, this.getRunParams().get("Cards"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Cards);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -68,8 +68,7 @@ public class TriggerRegenerated extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Cause);
|
||||||
sa.setTriggeringObject(AbilityKey.Cause, this.getRunParams().get("Cause"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class TriggerRevealed extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ public class TriggerSacrificed extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ public class TriggerScry extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public class TriggerSearchedLibrary extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class TriggerSetInMotion extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Scheme, this.getRunParams().get("Scheme"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Scheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ public class TriggerShuffled extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -264,17 +264,20 @@ public class TriggerSpellAbilityCast extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
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);
|
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(castSA);
|
||||||
sa.setTriggeringObject(AbilityKey.Card, castSA.getHostCard());
|
sa.setTriggeringObject(AbilityKey.Card, castSA.getHostCard());
|
||||||
sa.setTriggeringObject(AbilityKey.SpellAbility, castSA);
|
sa.setTriggeringObject(AbilityKey.SpellAbility, castSA);
|
||||||
sa.setTriggeringObject(AbilityKey.StackInstance, si);
|
sa.setTriggeringObject(AbilityKey.StackInstance, si);
|
||||||
sa.setTriggeringObject(AbilityKey.SpellAbilityTargetingCards, (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards());
|
sa.setTriggeringObject(AbilityKey.SpellAbilityTargetingCards, (si != null ? si.getSpellAbility(true) : castSA).getTargets().getTargetCards());
|
||||||
sa.setTriggeringObject(AbilityKey.Player, getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(
|
||||||
sa.setTriggeringObject(AbilityKey.Activator, getRunParams().get("Activator"));
|
this,
|
||||||
sa.setTriggeringObject(AbilityKey.CurrentStormCount, getRunParams().get("CurrentStormCount"));
|
AbilityKey.Player,
|
||||||
sa.setTriggeringObject(AbilityKey.CurrentCastSpells, getRunParams().get("CurrentCastSpells"));
|
AbilityKey.Activator,
|
||||||
sa.setTriggeringObject(AbilityKey.CastSACMC, getRunParams().get("CastSACMC"));
|
AbilityKey.CurrentStormCount,
|
||||||
|
AbilityKey.CurrentCastSpells,
|
||||||
|
AbilityKey.CastSACMC
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public class TriggerSpellAbilityCopy extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
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);
|
final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(copySA);
|
||||||
sa.setTriggeringObject(AbilityKey.Card, copySA.getHostCard());
|
sa.setTriggeringObject(AbilityKey.Card, copySA.getHostCard());
|
||||||
sa.setTriggeringObject(AbilityKey.SpellAbility, copySA);
|
sa.setTriggeringObject(AbilityKey.SpellAbility, copySA);
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class TriggerSurveil extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public class TriggerTaps extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -105,9 +105,7 @@ public class TriggerTapsForMana extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card, AbilityKey.Player, AbilityKey.Produced);
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
|
||||||
sa.setTriggeringObject(AbilityKey.Produced, this.getRunParams().get("Produced"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public class TriggerTransformed extends Trigger {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setTriggeringObjects(SpellAbility sa) {
|
public void setTriggeringObjects(SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Transformer, this.getRunParams().get("Transformer"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Transformer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class TriggerTurnBegin extends Trigger {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Player, this.getRunParams().get("Player"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class TriggerTurnFaceUp extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,8 +73,7 @@ public class TriggerUnattach extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Object, getRunParams().get("Object"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Object, AbilityKey.Attach);
|
||||||
sa.setTriggeringObject(AbilityKey.Attach, getRunParams().get("Attach"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class TriggerUntaps extends Trigger {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
sa.setTriggeringObject(AbilityKey.Card, this.getRunParams().get("Card"));
|
sa.setTriggeringObjectsFrom(this, AbilityKey.Card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ package forge.game.trigger;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
|
||||||
import com.google.common.collect.ListMultimap;
|
import com.google.common.collect.ListMultimap;
|
||||||
|
|
||||||
import forge.game.ability.AbilityKey;
|
import forge.game.ability.AbilityKey;
|
||||||
@@ -65,8 +64,13 @@ public class TriggerVote extends Trigger {
|
|||||||
@Override
|
@Override
|
||||||
public final void setTriggeringObjects(final SpellAbility sa) {
|
public final void setTriggeringObjects(final SpellAbility sa) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final ListMultimap<Object, Player> votes = (ArrayListMultimap<Object, Player>) this.getRunParams().get("AllVotes");
|
FCollection<Player> voters = getVoters(
|
||||||
sa.setTriggeringObject(AbilityKey.OtherVoters, getVoters(this.getHostCard().getController(), votes, true, true));
|
this.getHostCard().getController(),
|
||||||
|
(ListMultimap<Object, Player>) getFromRunParams(AbilityKey.AllVotes),
|
||||||
|
true,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
sa.setTriggeringObject(AbilityKey.OtherVoters, voters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -659,7 +659,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
|
|||||||
public void fizzleTriggersOnStackTargeting(Card c, TriggerType t) {
|
public void fizzleTriggersOnStackTargeting(Card c, TriggerType t) {
|
||||||
for (SpellAbilityStackInstance si : stack) {
|
for (SpellAbilityStackInstance si : stack) {
|
||||||
SpellAbility sa = si.getSpellAbility(false);
|
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) {
|
if (sa instanceof WrappedAbility) {
|
||||||
WrappedAbility wi = (WrappedAbility)sa;
|
WrappedAbility wi = (WrappedAbility)sa;
|
||||||
if (wi.getTrigger().getMode() == t) {
|
if (wi.getTrigger().getMode() == t) {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import forge.screens.match.MatchController;
|
|||||||
import forge.toolbox.FCardPanel;
|
import forge.toolbox.FCardPanel;
|
||||||
import forge.toolbox.FDialog;
|
import forge.toolbox.FDialog;
|
||||||
import forge.toolbox.FOverlay;
|
import forge.toolbox.FOverlay;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.collect.FCollectionView;
|
import forge.util.collect.FCollectionView;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
@@ -281,10 +282,10 @@ public class CardZoom extends FOverlay {
|
|||||||
|
|
||||||
if (currentActivateAction != null) {
|
if (currentActivateAction != null) {
|
||||||
g.fillRect(FDialog.MSG_BACK_COLOR, 0, 0, w, messageHeight);
|
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.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
|
@Override
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
private boolean isAi;
|
private boolean isAi;
|
||||||
|
|
||||||
private final ForgePreferences prefs = FModel.getPreferences();
|
private final ForgePreferences prefs = FModel.getPreferences();
|
||||||
|
private final Localizer localizer = Localizer.getInstance();
|
||||||
private FPref stateSetting = null;
|
private FPref stateSetting = null;
|
||||||
private FOptionPane optionPane;
|
private FOptionPane optionPane;
|
||||||
|
|
||||||
@@ -98,7 +99,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
container.add(deckChooser.lstDecks);
|
container.add(deckChooser.lstDecks);
|
||||||
container.setHeight(FOptionPane.getMaxDisplayObjHeight());
|
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
|
@Override
|
||||||
public void run(Integer result) {
|
public void run(Integer result) {
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
@@ -309,7 +310,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
editor = new FDeckEditor(getEditorType(), generatedDeck, true);
|
editor = new FDeckEditor(getEditorType(), generatedDeck, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
FOptionPane.showErrorDialog("You must select something before you can generate a new deck.");
|
FOptionPane.showErrorDialog(localizer.getMessage("lblMustSelectGenerateNewDeck"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -377,9 +378,10 @@ public class FDeckChooser extends FScreen {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//prompt to duplicate deck if deck doesn't exist already
|
//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?",
|
FOptionPane.showConfirmDialog(selectedDeckType + " " + localizer.getMessage("lblCannotEditDuplicateCustomDeck").replace("%s", deck.getName()),
|
||||||
"Duplicate Deck?", "Duplicate", "Cancel", new Callback<Boolean>() {
|
localizer.getMessage("lblDuplicateDeck"), localizer.getMessage("lblDuplicate"), localizer.getMessage("lblCancel"), new Callback<Boolean>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(Boolean result) {
|
public void run(Boolean result) {
|
||||||
if (result) {
|
if (result) {
|
||||||
@@ -770,16 +772,16 @@ public class FDeckChooser extends FScreen {
|
|||||||
btnViewDeck.setVisible(false);
|
btnViewDeck.setVisible(false);
|
||||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||||
|
|
||||||
btnNewDeck.setText("Generate New Deck");
|
btnNewDeck.setText(localizer.getMessage("lblGenerateNewDeck"));
|
||||||
switch (deckType) {
|
switch (deckType) {
|
||||||
case COLOR_DECK:
|
case COLOR_DECK:
|
||||||
btnRandom.setText("Random Colors");
|
btnRandom.setText(localizer.getMessage("lblRandomColors"));
|
||||||
break;
|
break;
|
||||||
case THEME_DECK:
|
case THEME_DECK:
|
||||||
btnRandom.setText("Random Theme");
|
btnRandom.setText(localizer.getMessage("lblRandomTheme"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
btnRandom.setText("Random Deck");
|
btnRandom.setText(localizer.getMessage("lblRandomDeck"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -789,11 +791,11 @@ public class FDeckChooser extends FScreen {
|
|||||||
btnViewDeck.setVisible(true);
|
btnViewDeck.setVisible(true);
|
||||||
btnRandom.setWidth(btnNewDeck.getWidth());
|
btnRandom.setWidth(btnNewDeck.getWidth());
|
||||||
|
|
||||||
btnNewDeck.setText("New Deck");
|
btnNewDeck.setText(localizer.getMessage("lblNewDeck"));
|
||||||
|
|
||||||
if (lstDecks.getGameType() == GameType.DeckManager) {
|
if (lstDecks.getGameType() == GameType.DeckManager) {
|
||||||
//handle special case of Deck Editor screen where this button will start a game with the deck
|
//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) {
|
switch (selectedDeckType) {
|
||||||
case SCHEME_DECK:
|
case SCHEME_DECK:
|
||||||
@@ -806,7 +808,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
btnRandom.setText("Random Deck");
|
btnRandom.setText(localizer.getMessage("lblRandomDeck"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1063,7 +1065,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
return;
|
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
|
@Override
|
||||||
public void run(final Integer numOpponents) {
|
public void run(final Integer numOpponents) {
|
||||||
if (numOpponents == null) { return; }
|
if (numOpponents == null) { return; }
|
||||||
@@ -1089,7 +1091,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ListChooser<DeckType> chooser = new ListChooser<>(
|
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
|
@Override
|
||||||
public void run(final List<DeckType> allowedDeckTypes) {
|
public void run(final List<DeckType> allowedDeckTypes) {
|
||||||
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
||||||
@@ -1109,7 +1111,7 @@ public class FDeckChooser extends FScreen {
|
|||||||
FThreads.invokeInEdtLater(new Runnable() {
|
FThreads.invokeInEdtLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LoadingOverlay.show("Loading new game...", new Runnable() {
|
LoadingOverlay.show(localizer.getMessage("lblLoadingNewGame"), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, netCat);
|
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) {
|
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
|
@Override
|
||||||
public void run(final Deck aiDeck) {
|
public void run(final Deck aiDeck) {
|
||||||
if (aiDeck == null) { return; }
|
if (aiDeck == null) { return; }
|
||||||
|
|
||||||
LoadingOverlay.show("Loading new game...", new Runnable() {
|
LoadingOverlay.show(localizer.getMessage("lblLoadingNewGame"), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Set<GameType> appliedVariants = new HashSet<>();
|
Set<GameType> appliedVariants = new HashSet<>();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import forge.itemmanager.filters.DeckFormatFilter;
|
|||||||
import forge.itemmanager.filters.TextSearchFilter;
|
import forge.itemmanager.filters.TextSearchFilter;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
import forge.toolbox.FList.CompactModeHandler;
|
import forge.toolbox.FList.CompactModeHandler;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
import com.badlogic.gdx.utils.Align;
|
import com.badlogic.gdx.utils.Align;
|
||||||
@@ -39,7 +40,7 @@ public final class DeckManager extends ItemManager<DeckProxy> implements IHasGam
|
|||||||
public DeckManager(final GameType gt) {
|
public DeckManager(final GameType gt) {
|
||||||
super(DeckProxy.class, true);
|
super(DeckProxy.class, true);
|
||||||
gameType = gt;
|
gameType = gt;
|
||||||
setCaption("Decks");
|
setCaption(Localizer.getInstance().getMessage("lblDecks"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameType getGameType() {
|
public GameType getGameType() {
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import forge.toolbox.FList;
|
|||||||
import forge.toolbox.FList.CompactModeHandler;
|
import forge.toolbox.FList.CompactModeHandler;
|
||||||
import forge.util.ItemPool;
|
import forge.util.ItemPool;
|
||||||
import forge.util.LayoutHelper;
|
import forge.util.LayoutHelper;
|
||||||
|
import forge.util.Localizer;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
@@ -125,7 +126,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
add(btnAdvancedSearchOptions);
|
add(btnAdvancedSearchOptions);
|
||||||
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
btnAdvancedSearchOptions.setSelected(!hideFilters);
|
||||||
if (allowSortChange()) {
|
if (allowSortChange()) {
|
||||||
cbxSortOptions = add(new FComboBox<>("Sort: "));
|
cbxSortOptions = add(new FComboBox<>(Localizer.getInstance().getMessage("lblSort") + ": "));
|
||||||
cbxSortOptions.setFont(FSkinFont.get(12));
|
cbxSortOptions.setFont(FSkinFont.get(12));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -140,7 +141,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
FPopupMenu menu = new FPopupMenu() {
|
FPopupMenu menu = new FPopupMenu() {
|
||||||
@Override
|
@Override
|
||||||
protected void buildMenu() {
|
protected void buildMenu() {
|
||||||
addItem(new FMenuItem("Advanced Search", FSkinImage.SEARCH, new FEventHandler() {
|
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblAdvancedSearch"), FSkinImage.SEARCH, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
if (advancedSearchFilter == null) {
|
if (advancedSearchFilter == null) {
|
||||||
@@ -150,7 +151,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
advancedSearchFilter.edit();
|
advancedSearchFilter.edit();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
addItem(new FMenuItem("Reset Filters", FSkinImage.DELETE, new FEventHandler() {
|
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblResetFilters"), FSkinImage.DELETE, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
resetFilters();
|
resetFilters();
|
||||||
@@ -261,7 +262,7 @@ public abstract class ItemManager<T extends InventoryItem> extends FContainer im
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cbxSortOptions != null) {
|
if (cbxSortOptions != null) {
|
||||||
cbxSortOptions.setText("(none)");
|
cbxSortOptions.setText("(" + Localizer.getInstance().getMessage("lblNone") + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
model.getCascadeManager().reset();
|
model.getCascadeManager().reset();
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import forge.itemmanager.filters.TextSearchFilter;
|
|||||||
import forge.quest.QuestSpellShop;
|
import forge.quest.QuestSpellShop;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
import forge.toolbox.FList.CompactModeHandler;
|
import forge.toolbox.FList.CompactModeHandler;
|
||||||
|
import forge.util.Localizer;
|
||||||
|
|
||||||
|
|
||||||
public class SpellShopManager extends ItemManager<InventoryItem> {
|
public class SpellShopManager extends ItemManager<InventoryItem> {
|
||||||
@@ -29,7 +30,7 @@ public class SpellShopManager extends ItemManager<InventoryItem> {
|
|||||||
|
|
||||||
fnGetPrice = isShop0 ? QuestSpellShop.fnPriceGet : QuestSpellShop.fnPriceSellGet;
|
fnGetPrice = isShop0 ? QuestSpellShop.fnPriceGet : QuestSpellShop.fnPriceSellGet;
|
||||||
if (!isShop0) {
|
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.FEvent.FEventHandler;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
|
import forge.util.Localizer;
|
||||||
|
|
||||||
|
|
||||||
public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T> {
|
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
|
item.setTextRenderer(new TextRenderer()); //ensure symbols are displayed
|
||||||
addItem(item);
|
addItem(item);
|
||||||
}
|
}
|
||||||
addItem(new FMenuItem("Edit Expression", FSkinImage.EDIT, new FEventHandler() {
|
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblEditExpression"), FSkinImage.EDIT, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
edit();
|
edit();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
addItem(new FMenuItem("Remove Filter", FSkinImage.DELETE, new FEventHandler() {
|
addItem(new FMenuItem(Localizer.getInstance().getMessage("lblRemoveFilter"), FSkinImage.DELETE, new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
reset();
|
reset();
|
||||||
@@ -176,7 +177,7 @@ public class AdvancedSearchFilter<T extends InventoryItem> extends ItemFilter<T>
|
|||||||
});
|
});
|
||||||
|
|
||||||
private EditScreen() {
|
private EditScreen() {
|
||||||
super("Advanced Search");
|
super(Localizer.getInstance().getMessage("lblAdvancedSearch"));
|
||||||
Filter filter = new Filter();
|
Filter filter = new Filter();
|
||||||
model.addFilterControl(filter);
|
model.addFilterControl(filter);
|
||||||
scroller.add(filter);
|
scroller.add(filter);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.toolbox.FTextField;
|
|||||||
import forge.toolbox.FEvent.FEventHandler;
|
import forge.toolbox.FEvent.FEventHandler;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FScrollPane;
|
import forge.toolbox.FScrollPane;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -358,7 +359,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
|
|||||||
otherItems = groups.get(groups.size() - 1);
|
otherItems = groups.get(groups.size() - 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
otherItems = new Group("Other");
|
otherItems = new Group(Localizer.getInstance().getMessage("lblOther"));
|
||||||
otherItems.isCollapsed = btnExpandCollapseAll.isAllCollapsed;
|
otherItems.isCollapsed = btnExpandCollapseAll.isAllCollapsed;
|
||||||
groups.add(otherItems);
|
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