diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 49f0303b1ab..5a727c16f44 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -212,7 +212,7 @@ public class Card extends GameEntity implements Comparable { private TreeMap tempControllers = new TreeMap(); private String text = ""; - private Cost echoCost = null; + private String echoCost = ""; private Cost madnessCost = null; private Cost miracleCost = null; private String chosenType = ""; @@ -1413,11 +1413,11 @@ public class Card extends GameEntity implements Comparable { * @param s * a {@link java.lang.String} object. */ - public final void setEchoCost(final Cost s) { + public final void setEchoCost(final String s) { this.echoCost = s; } - public final Cost getEchoCost() { + public final String getEchoCost() { return this.echoCost; } diff --git a/src/main/java/forge/card/ability/AbilityUtils.java b/src/main/java/forge/card/ability/AbilityUtils.java index 880c9fb6a3a..bc92025c56d 100644 --- a/src/main/java/forge/card/ability/AbilityUtils.java +++ b/src/main/java/forge/card/ability/AbilityUtils.java @@ -886,7 +886,7 @@ public class AbilityUtils { } } } - } else if (defined.startsWith("NonReplaced")) { + } else if (defined.startsWith("Non")) { players.addAll(game.getPlayers()); players.removeAll(getDefinedPlayers(card, defined.substring(3), sa)); } else if (defined.equals("EnchantedController")) { diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 24de139e9cc..3d8b8177290 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -2222,7 +2222,7 @@ public class CardFactoryUtil { final String[] k = card.getKeyword().get(echoPos).split(":"); final String manacost = k[1]; - card.setEchoCost(new Cost(manacost, false)); + card.setEchoCost(manacost); final Command intoPlay = new Command() { @@ -3190,7 +3190,7 @@ public class CardFactoryUtil { card.setSVar("CascadeCleanup", "DB$ Cleanup | ClearRemembered$ True | ClearImprinted$ True"); final Trigger cascadeTrigger = TriggerHandler.parseTrigger(trigScript.toString(), card, true); - card.addTrigger(cascadeTrigger);; + card.addTrigger(cascadeTrigger); } // Cascade } diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java index cccb26403a9..f182091a5ee 100644 --- a/src/main/java/forge/game/phase/Upkeep.java +++ b/src/main/java/forge/game/phase/Upkeep.java @@ -29,6 +29,7 @@ import forge.CardPredicates; import forge.Singletons; import forge.CardPredicates.Presets; import forge.CounterType; +import forge.card.ability.AbilityFactory; import forge.card.cardfactory.CardFactoryUtil; import forge.card.cost.Cost; import forge.card.mana.ManaCost; @@ -170,17 +171,12 @@ public class Upkeep extends Phase { if (c.hasStartOfKeyword("(Echo unpaid)")) { final StringBuilder sb = new StringBuilder(); sb.append("Echo for ").append(c).append("\n"); + + String effect = "AB$ Sacrifice | Cost$ 0 | SacValid$ Self | " + + "UnlessPayer$ You | UnlessCost$ " + c.getEchoCost(); - final Ability sacAbility = new Ability(c, ManaCost.ZERO) { - @Override - public void resolve() { - Cost cost = c.getEchoCost(); - boolean hasPaid = c.getController().getController().payManaOptional(c, cost, this, "Echo for " + c, ManaPaymentPurpose.Echo); - - if (!hasPaid) - game.getAction().sacrifice(c, this);; - } - }; + SpellAbility sacAbility = AbilityFactory.getAbility(effect, c); + sacAbility.setTrigger(true); sacAbility.setActivatingPlayer(c.getController()); sacAbility.setStackDescription(sb.toString()); sacAbility.setDescription(sb.toString());