diff --git a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java index 13d36cd4633..c8723830c9a 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityFactory.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityFactory.java @@ -178,7 +178,6 @@ public final class AbilityFactory { return getAbility(type, type.getApiTypeOf(mapParams), mapParams, parseAbilityCost(state, mapParams, type), state, sVarHolder); } - public static Cost parseAbilityCost(final CardState state, Map mapParams, AbilityRecordType type) { Cost abCost = null; if (type != AbilityRecordType.SubAbility) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index bed0905fb50..ed8a1175373 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6229,7 +6229,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return false; } - if (source == null){ + if (source == null) { return true; } diff --git a/forge-game/src/main/java/forge/game/cost/Cost.java b/forge-game/src/main/java/forge/game/cost/Cost.java index fae4d70df52..65e87a3b4ff 100644 --- a/forge-game/src/main/java/forge/game/cost/Cost.java +++ b/forge-game/src/main/java/forge/game/cost/Cost.java @@ -240,8 +240,7 @@ public class Cost implements Serializable { xCantBe0 = true; } else if ("Mandatory".equals(part)) { this.isMandatory = true; - } - else { + } else { CostPart cp = parseCostPart(part, tapCost, untapCost); if (null != cp ) if (cp instanceof CostPartMana ) { @@ -268,7 +267,6 @@ public class Cost implements Serializable { } private static CostPart parseCostPart(String parse, boolean tapCost, boolean untapCost) { - if (parse.startsWith("Mana<")) { final String[] splitStr = TextUtil.split(abCostParse(parse, 1)[0], '\\'); final String restriction = splitStr.length > 1 ? splitStr[1] : null; diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 9090e05852c..a59de27a130 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -3337,7 +3337,6 @@ public class Player extends GameEntity implements Comparable { } return targetPlayer == null || !targetPlayer.equals(sa.getActivatingPlayer()) || !hasKeyword("Spells and abilities you control can't cause you to search your library."); - } public Card getKeywordCard() { diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java b/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java index d1f867fd99d..5008719eb52 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityActivated.java @@ -65,7 +65,7 @@ public abstract class AbilityActivated extends SpellAbility implements Cloneable this.setTargetRestrictions(tgt); } - public boolean isActivatedAbility() { return true; } + public boolean isActivatedAbility() { return !isTrigger(); } /** {@inheritDoc} */ @Override diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 2b6a43a4723..94fd70373c3 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -579,7 +579,7 @@ public class TriggerHandler { sa.setOptionalTrigger(true); decider = AbilityUtils.getDefinedPlayers(host, regtrig.getParam("OptionalDecider"), sa).get(0); } - else if (sa instanceof AbilitySub || !sa.hasParam("Cost") || sa.hasParam("CostMandatory") || sa.getParam("Cost").equals("0")) { + else if (sa instanceof AbilitySub || !sa.hasParam("Cost") || (sa.getPayCosts() != null && sa.getPayCosts().isMandatory()) || sa.getParam("Cost").equals("0")) { isMandatory = true; } else { // triggers with a cost can't be mandatory sa.setOptionalTrigger(true); diff --git a/forge-gui/res/cardsfolder/a/arrogant_poet.txt b/forge-gui/res/cardsfolder/a/arrogant_poet.txt index b950e9def49..27e09b97dec 100644 --- a/forge-gui/res/cardsfolder/a/arrogant_poet.txt +++ b/forge-gui/res/cardsfolder/a/arrogant_poet.txt @@ -2,6 +2,6 @@ Name:Arrogant Poet ManaCost:1 B Types:Creature Human Warlock PT:2/1 -T:Mode$ Attacks | ValidCard$ Card.Self | OptionalDecider$ You | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, you may pay 2 life. If you do, it gains flying until end of turn. +T:Mode$ Attacks | ValidCard$ Card.Self | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, you may pay 2 life. If you do, it gains flying until end of turn. SVar:TrigPump:AB$ Pump | Cost$ PayLife<2> | Defined$ Self | KW$ Flying Oracle:Whenever Arrogant Poet attacks, you may pay 2 life. If you do, it gains flying until end of turn. diff --git a/forge-gui/res/cardsfolder/a/awaken_the_sky_tyrant.txt b/forge-gui/res/cardsfolder/a/awaken_the_sky_tyrant.txt index 8e2f9e8ee47..8065271b7da 100644 --- a/forge-gui/res/cardsfolder/a/awaken_the_sky_tyrant.txt +++ b/forge-gui/res/cardsfolder/a/awaken_the_sky_tyrant.txt @@ -2,7 +2,7 @@ Name:Awaken the Sky Tyrant ManaCost:3 R Types:Enchantment T:Mode$ DamageDone | ValidSource$ Card.OppCtrl | ValidTarget$ You | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When a source an opponent controls deals damage to you, sacrifice CARDNAME. If you do, create a 5/5 red Dragon creature token with flying. -SVar:TrigSac:AB$ Token | TokenAmount$ 1 | TokenScript$ r_5_5_dragon_flying | TokenOwner$ You | Cost$ Sac<1/CARDNAME> | CostMandatory$ True +SVar:TrigSac:AB$ Token | TokenAmount$ 1 | TokenScript$ r_5_5_dragon_flying | TokenOwner$ You | Cost$ Mandatory Sac<1/CARDNAME> SVar:X:Remembered$Amount SVar:Picture:http://www.wizards.com/global/images/magic/general/awaken_the_sky_tyrant.jpg Oracle:When a source an opponent controls deals damage to you, sacrifice Awaken the Sky Tyrant. If you do, create a 5/5 red Dragon creature token with flying. \ No newline at end of file diff --git a/forge-gui/res/cardsfolder/s/standstill.txt b/forge-gui/res/cardsfolder/s/standstill.txt index 5bfc6a1c472..03197655541 100644 --- a/forge-gui/res/cardsfolder/s/standstill.txt +++ b/forge-gui/res/cardsfolder/s/standstill.txt @@ -2,7 +2,7 @@ Name:Standstill ManaCost:1 U Types:Enchantment T:Mode$ SpellCast | ValidActivatingPlayer$ Player | TriggerZones$ Battlefield | Execute$ TrigSac | TriggerDescription$ When a player casts a spell, sacrifice CARDNAME. If you do, each of that player's opponents draws three cards. -SVar:TrigSac:AB$ Draw | NumCards$ 3 | Cost$ Sac<1/CARDNAME> | CostMandatory$ True | Defined$ TriggeredCardOpponent +SVar:TrigSac:AB$ Draw | NumCards$ 3 | Cost$ Mandatory Sac<1/CARDNAME> | Defined$ TriggeredCardOpponent SVar:X:Remembered$Amount SVar:Y:Count$Valid Creature.YouCtrl SVar:Z:Count$Valid Creature.OppCtrl diff --git a/forge-gui/src/main/java/forge/player/HumanCostDecision.java b/forge-gui/src/main/java/forge/player/HumanCostDecision.java index 7968c9b8556..068adbb1e94 100644 --- a/forge-gui/src/main/java/forge/player/HumanCostDecision.java +++ b/forge-gui/src/main/java/forge/player/HumanCostDecision.java @@ -567,7 +567,7 @@ public class HumanCostDecision extends CostDecisionMakerBase { } // for costs declared mandatory, this is only reachable with a valid amount - if (ability.getPayCosts().isMandatory() || (player.canPayLife(c) && player.getController().confirmPayment(cost, Localizer.getInstance().getMessage("lblPayNLifeConfirm", String.valueOf(c)),ability))) { + if (ability.getPayCosts().isMandatory() || (player.canPayLife(c) && player.getController().confirmPayment(cost, Localizer.getInstance().getMessage("lblPayNLifeConfirm", String.valueOf(c)), ability))) { return PaymentDecision.number(c); } return null; @@ -1023,7 +1023,7 @@ public class HumanCostDecision extends CostDecisionMakerBase { if (cost.payCostFromSource()) { if (source.getController() == ability.getActivatingPlayer() && source.isInPlay()) { - return ability.hasParam("CostMandatory") || player.getController().confirmPayment(cost, Localizer.getInstance().getMessage("lblSacrificeCardConfirm", CardTranslation.getTranslatedName(source.getName())), ability) ? PaymentDecision.card(source) : null; + return ability.getPayCosts().isMandatory() || player.getController().confirmPayment(cost, Localizer.getInstance().getMessage("lblSacrificeCardConfirm", CardTranslation.getTranslatedName(source.getName())), ability) ? PaymentDecision.card(source) : null; } return null; } @@ -1059,7 +1059,6 @@ public class HumanCostDecision extends CostDecisionMakerBase { } return PaymentDecision.card(inp.getSelected()); - } @Override