diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index cc829bbeb43..dbfc8320c4a 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -95,7 +95,9 @@ public class ComputerUtil { sa.setHostCard(game.getAction().moveToStack(source, sa)); } - sa.resetPaidHash(); + if (sa.isCopied()) { + sa.resetPaidHash(); + } if (sa.getApi() == ApiType.Charm && !sa.isWrapper()) { CharmEffect.makeChoices(sa); diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index b5fd7eea20c..5c086c9ba59 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -213,7 +213,7 @@ public class CardFactory { c.setMadness(original.isMadness()); final SpellAbilityStackInstance si = controller.getGame().getStack().getInstanceFromSpellAbility(sa); - if (si != null) { + if (si != null) { c.setXManaCostPaid(si.getXManaPaid()); } } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index b03e6538b83..291948ab16b 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -471,11 +471,11 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit } // Combined PaidLists - public HashMap getPaidHash() { + public Map getPaidHash() { return paidLists; } - public void setPaidHash(final HashMap hash) { - paidLists = hash; + public void setPaidHash(final Map hash) { + paidLists = Maps.newHashMap(hash); } public CardCollection getPaidList(final String str) { @@ -667,8 +667,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit if (node != this) { sb.append(" "); } + String desc = node.getDescription(); if (node.getHostCard() != null) { - sb.append(TextUtil.fastReplace(node.getDescription(), "CARDNAME", node.getHostCard().getName())); + desc = TextUtil.fastReplace(desc, "CARDNAME", node.getHostCard().getName()); + if (node.getOriginalHost() != null) { + desc = TextUtil.fastReplace(desc, "ORIGINALHOST", node.getOriginalHost().getName()); + } + sb.append(desc); } node = node.getSubAbility(); } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java index 386c128c648..3b56e3903fa 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbilityStackInstance.java @@ -198,8 +198,7 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView { } // Set Cost specific things here - ability.resetPaidHash(); - ability.setPaidHash(new HashMap(paidHash)); + ability.setPaidHash(paidHash); ability.setSplicedCards(splicedCards); ability.getHostCard().setXManaCostPaid(xManaPaid); diff --git a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java index ab992ad528d..0108097f53d 100644 --- a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java +++ b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java @@ -81,12 +81,12 @@ public class WrappedAbility extends Ability { } @Override - public void setPaidHash(final HashMap hash) { + public void setPaidHash(final Map hash) { sa.setPaidHash(hash); } @Override - public HashMap getPaidHash() { + public Map getPaidHash() { return sa.getPaidHash(); } diff --git a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java index 25906056458..e03c8d89251 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java +++ b/forge-gui/src/main/java/forge/player/HumanPlaySpellAbility.java @@ -118,7 +118,9 @@ public class HumanPlaySpellAbility { ability.setHostCard(game.getAction().moveToStack(c, null)); } - ability.resetPaidHash(); + if (!ability.isCopied()) { + ability.resetPaidHash(); + } if (manaTypeConversion) { AbilityUtils.applyManaColorConversion(human, MagicColor.Constant.ANY_TYPE_CONVERSION);