From c8db6ba3500e6071a58c9b19da40b0a6e91ca919 Mon Sep 17 00:00:00 2001 From: BetaSteward <betasteward@gmail> Date: Sun, 26 Dec 2010 20:41:40 -0500 Subject: [PATCH] moved {this} and {source} replacement to server --- Mage.Common/src/mage/view/AbilityView.java | 9 +----- Mage.Common/src/mage/view/CardView.java | 30 +++++++++---------- .../src/mage/view/StackAbilityView.java | 9 +----- Mage/src/mage/abilities/Abilities.java | 2 +- Mage/src/mage/abilities/AbilitiesImpl.java | 2 +- Mage/src/mage/abilities/Ability.java | 1 + Mage/src/mage/abilities/AbilityImpl.java | 11 +++++++ .../mage/abilities/TriggeredAbilityImpl.java | 5 +++- .../SacrificeSourceUnlessPaysEffect.java | 18 ++++++----- .../common/TapSourceUnlessPaysEffect.java | 16 +++++----- .../mage/abilities/keyword/LevelAbility.java | 2 +- Mage/src/mage/cards/CardImpl.java | 4 +-- Mage/src/mage/game/stack/StackAbility.java | 5 ++++ 13 files changed, 62 insertions(+), 52 deletions(-) diff --git a/Mage.Common/src/mage/view/AbilityView.java b/Mage.Common/src/mage/view/AbilityView.java index 6e1035101a..44d73318b9 100644 --- a/Mage.Common/src/mage/view/AbilityView.java +++ b/Mage.Common/src/mage/view/AbilityView.java @@ -48,7 +48,7 @@ public class AbilityView extends CardView { this.sourceName = sourceName; this.sourceCard = sourceCard; this.rules = new ArrayList<String>(); - rules.add(formatRule(ability.getRule())); + rules.add(ability.getRule(sourceName)); this.power = ""; this.toughness = ""; this.loyalty = ""; @@ -60,13 +60,6 @@ public class AbilityView extends CardView { this.art = ""; } - @Override - protected String formatRule(String rule) { - String newRule = rule.replace("{this}", this.sourceName); - newRule.replace("{source}", this.sourceName); - return newRule; - } - public CardView getSourceCard() { return this.sourceCard; } diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 4116c28121..4c733d5cdb 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -76,7 +76,7 @@ public class CardView implements Serializable { public CardView(Card card) { this.id = card.getId(); this.name = card.getName(); - this.rules = formatRules(card.getRules()); + this.rules = card.getRules(); if (card instanceof Permanent) { this.power = Integer.toString(card.getPower().getValue()); this.toughness = Integer.toString(card.getToughness().getValue()); @@ -118,7 +118,7 @@ public class CardView implements Serializable { CardView(Token token) { this.id = token.getId(); this.name = token.getName(); - this.rules = formatRules(token.getAbilities().getRules()); + this.rules = token.getAbilities().getRules(this.name); this.power = token.getPower().toString(); this.toughness = token.getToughness().toString(); this.loyalty = token.getLoyalty().toString(); @@ -143,19 +143,19 @@ public class CardView implements Serializable { } } - protected List<String> formatRules(List<String> rules) { - List<String> newRules = new ArrayList<String>(); - for (String rule: rules) { - newRules.add(formatRule(rule)); - } - return newRules; - } - - protected String formatRule(String rule) { - String replace = rule.replace("{this}", this.name); - replace = replace.replace("{source}", this.name); - return replace; - } +// protected List<String> formatRules(List<String> rules) { +// List<String> newRules = new ArrayList<String>(); +// for (String rule: rules) { +// newRules.add(formatRule(rule)); +// } +// return newRules; +// } +// +// protected String formatRule(String rule) { +// String replace = rule.replace("{this}", this.name); +// replace = replace.replace("{source}", this.name); +// return replace; +// } public String getName() { return name; diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index 5beaed5077..d795daa7fc 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -47,7 +47,7 @@ public class StackAbilityView extends CardView { this.sourceName = sourceName; this.sourceCard = sourceCard; this.rules = new ArrayList<String>(); - rules.add(formatRule(ability.getRule())); + rules.add(ability.getRule(sourceName)); this.power = ability.getPower().toString(); this.toughness = ability.getToughness().toString(); this.loyalty = ability.getLoyalty().toString(); @@ -60,13 +60,6 @@ public class StackAbilityView extends CardView { setTargets(ability.getTargets()); } - @Override - protected String formatRule(String rule) { - String newRule = rule.replace("{this}", this.sourceName); - newRule.replace("{source}", this.sourceName); - return newRule; - } - public CardView getSourceCard() { return this.sourceCard; } diff --git a/Mage/src/mage/abilities/Abilities.java b/Mage/src/mage/abilities/Abilities.java index 84fa54f906..373446b455 100644 --- a/Mage/src/mage/abilities/Abilities.java +++ b/Mage/src/mage/abilities/Abilities.java @@ -39,7 +39,7 @@ import mage.filter.FilterAbility; public interface Abilities<T extends Ability> extends List<T>, Serializable { - public List<String> getRules(); + public List<String> getRules(String source); public Abilities<ActivatedAbility> getActivatedAbilities(Zone zone); public Abilities<ActivatedAbility> getActivatedAbilities(Zone zone, FilterAbility filter); public Abilities<ManaAbility> getManaAbilities(Zone zone); diff --git a/Mage/src/mage/abilities/AbilitiesImpl.java b/Mage/src/mage/abilities/AbilitiesImpl.java index ae40e84139..e63ac8d181 100644 --- a/Mage/src/mage/abilities/AbilitiesImpl.java +++ b/Mage/src/mage/abilities/AbilitiesImpl.java @@ -58,7 +58,7 @@ public class AbilitiesImpl<T extends Ability> extends ArrayList<T> implements Ab } @Override - public List<String> getRules() { + public List<String> getRules(String source) { List<String> rules = new ArrayList<String>(); for (T ability:this) { diff --git a/Mage/src/mage/abilities/Ability.java b/Mage/src/mage/abilities/Ability.java index ab37daa535..54c9cc73b2 100644 --- a/Mage/src/mage/abilities/Ability.java +++ b/Mage/src/mage/abilities/Ability.java @@ -73,6 +73,7 @@ public interface Ability extends Serializable { public Zone getZone(); public boolean isUsesStack(); public String getRule(); + public String getRule(String source); public boolean activate(Game game, boolean noMana); public boolean resolve(Game game); public void reset(Game game); diff --git a/Mage/src/mage/abilities/AbilityImpl.java b/Mage/src/mage/abilities/AbilityImpl.java index b8149c4805..fdfe229c7a 100644 --- a/Mage/src/mage/abilities/AbilityImpl.java +++ b/Mage/src/mage/abilities/AbilityImpl.java @@ -302,6 +302,17 @@ public abstract class AbilityImpl<T extends AbilityImpl<T>> implements Ability { return sbRule.toString(); } + @Override + public String getRule(String source) { + return formatRule(getRule(), source); + } + + protected String formatRule(String rule, String source) { + String replace = rule.replace("{this}", source); + replace = replace.replace("{source}", source); + return replace; + } + @Override public void addCost(Cost cost) { if (cost != null) { diff --git a/Mage/src/mage/abilities/TriggeredAbilityImpl.java b/Mage/src/mage/abilities/TriggeredAbilityImpl.java index df530369a2..4aa8a01564 100644 --- a/Mage/src/mage/abilities/TriggeredAbilityImpl.java +++ b/Mage/src/mage/abilities/TriggeredAbilityImpl.java @@ -81,10 +81,13 @@ public abstract class TriggeredAbilityImpl<T extends TriggeredAbilityImpl<T>> ex Player player = game.getPlayer(this.getControllerId()); MageObject object = game.getObject(sourceId); StringBuilder sb = new StringBuilder(); - sb.append("Use ").append(this.getRule()).append("ability"); if (object != null) { + sb.append("Use ").append(this.getRule(object.getName())).append("ability"); sb.append(" from ").append(object.getName()); } + else { + sb.append("Use ").append(this.getRule()).append("ability"); + } sb.append("?"); if (!player.chooseUse(this.effects.get(0).getOutcome(), sb.toString(), game)) { return false; diff --git a/Mage/src/mage/abilities/effects/common/SacrificeSourceUnlessPaysEffect.java b/Mage/src/mage/abilities/effects/common/SacrificeSourceUnlessPaysEffect.java index b8b48c9a84..c95b298dd6 100644 --- a/Mage/src/mage/abilities/effects/common/SacrificeSourceUnlessPaysEffect.java +++ b/Mage/src/mage/abilities/effects/common/SacrificeSourceUnlessPaysEffect.java @@ -30,15 +30,17 @@ public class SacrificeSourceUnlessPaysEffect extends OneShotEffect<SacrificeSour @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - if (player != null && player.chooseUse(Outcome.Benefit, cost.getText() + " or sacrifice {this}?", game)) { - cost.clearPaid(); - if (cost.pay(game, source.getId(), source.getControllerId(), false)) - return true; - } Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) + if (player != null && permanent != null) { + if (player.chooseUse(Outcome.Benefit, cost.getText() + " or sacrifice " + permanent.getName() + "?", game)) { + cost.clearPaid(); + if (cost.pay(game, source.getId(), source.getControllerId(), false)) + return true; + } permanent.sacrifice(source.getSourceId(), game); - return true; + return true; + } + return false; } @Override @@ -48,6 +50,6 @@ public class SacrificeSourceUnlessPaysEffect extends OneShotEffect<SacrificeSour @Override public String getText(Ability source) { - return "sacrifice it unless you pay " + cost.getText(); + return "sacrifice {this} unless you pay " + cost.getText(); } } diff --git a/Mage/src/mage/abilities/effects/common/TapSourceUnlessPaysEffect.java b/Mage/src/mage/abilities/effects/common/TapSourceUnlessPaysEffect.java index 36449a092c..de8d661191 100644 --- a/Mage/src/mage/abilities/effects/common/TapSourceUnlessPaysEffect.java +++ b/Mage/src/mage/abilities/effects/common/TapSourceUnlessPaysEffect.java @@ -57,15 +57,17 @@ public class TapSourceUnlessPaysEffect extends OneShotEffect<TapSourceUnlessPays @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - if (player != null && player.chooseUse(Outcome.Benefit, cost.getText() + " or {this} comes into play tapped?", game)) { - cost.clearPaid(); - if (cost.pay(game, source.getId(), source.getControllerId(), false)) - return true; - } Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) + if (player != null && permanent != null) { + if (player.chooseUse(Outcome.Benefit, cost.getText() + " or " + permanent.getName() + " comes into play tapped?", game)) { + cost.clearPaid(); + if (cost.pay(game, source.getId(), source.getControllerId(), false)) + return true; + } permanent.setTapped(true); - return true; + return true; + } + return false; } @Override diff --git a/Mage/src/mage/abilities/keyword/LevelAbility.java b/Mage/src/mage/abilities/keyword/LevelAbility.java index ec1df74a83..84438ddd4e 100644 --- a/Mage/src/mage/abilities/keyword/LevelAbility.java +++ b/Mage/src/mage/abilities/keyword/LevelAbility.java @@ -93,7 +93,7 @@ public class LevelAbility extends StaticAbility<LevelAbility> { else sb.append("-").append(level2); sb.append(": ").append(power).append("/").append(toughness).append(" "); - for (String rule: abilities.getRules()) { + for (String rule: abilities.getRules("{this}")) { sb.append(rule).append(" "); } return sb.toString(); diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index be6684ac7b..499e916171 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -130,9 +130,9 @@ public abstract class CardImpl<T extends CardImpl<T>> extends MageObjectImpl<T> @Override public List<String> getRules() { - List<String> rules = abilities.getRules(); + List<String> rules = abilities.getRules(this.name); if (cardType.contains(CardType.INSTANT) || cardType.contains(CardType.SORCERY)) { - rules.add(0, getSpellAbility().getRule()); + rules.add(0, getSpellAbility().getRule(this.name)); } return rules; } diff --git a/Mage/src/mage/game/stack/StackAbility.java b/Mage/src/mage/game/stack/StackAbility.java index 2228a4e878..54ddb3d24b 100644 --- a/Mage/src/mage/game/stack/StackAbility.java +++ b/Mage/src/mage/game/stack/StackAbility.java @@ -192,6 +192,11 @@ public class StackAbility implements StackObject, Ability { return ability.getRule(); } + @Override + public String getRule(String source) { + return ability.getRule(source); + } + @Override public void setControllerId(UUID controllerId) { this.controllerId = controllerId;