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 66fc64cfcbd..012b6effe00 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -295,9 +295,10 @@ public class CardFactory { sa.setRightSplit(); } } + CardFactoryUtil.setupKeywordedAbilities(card); final CardState original = card.getState(CardStateName.Original); original.addNonManaAbilities(card.getCurrentState().getNonManaAbilities()); - original.addIntrinsicKeywords(card.getCurrentState().getIntrinsicKeywordStrings(), false); // Copy 'Fuse' to original side + original.addIntrinsicKeywords(card.getCurrentState().getIntrinsicKeywords()); // Copy 'Fuse' to original side original.getSVars().putAll(card.getCurrentState().getSVars()); // Unfortunately need to copy these to (Effect looks for sVars on execute) } else if (state != CardStateName.Original){ CardFactoryUtil.setupKeywordedAbilities(card); @@ -305,6 +306,10 @@ public class CardFactory { } card.setState(CardStateName.Original, false); + // need to update keyword cache for original spell + if (card.isSplitCard()) { + card.updateKeywordsCache(card.getCurrentState()); + } // ****************************************************************** // ************** Link to different CardFactories ******************* diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index 022c5e0be99..a090562c9a2 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -2999,7 +2999,7 @@ public class CardFactoryUtil { public static void addReplacementEffect(final KeywordInterface inst, final Card card, final boolean intrinsic) { String keyword = inst.getOriginal(); - if (keyword.equals("Aftermath")) { + if (keyword.equals("Aftermath") && card.getCurrentStateName().equals(CardStateName.RightSplit)) { StringBuilder sb = new StringBuilder(); sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile "); sb.append("| ValidStackSa$ Spell.Aftermath | Description$ Aftermath"); @@ -3021,8 +3021,6 @@ public class CardFactoryUtil { re.setOverridingAbility(saExile); - // Aftermath only on Rightsplit - // doesn't make a copy with it inst.addReplacement(re); } else if (keyword.startsWith("Amplify")) { final String[] ampString = keyword.split(":"); @@ -3493,11 +3491,11 @@ public class CardFactoryUtil { inst.addSpellAbility(newSA); } - } else if (keyword.equals("Aftermath")) { + } else if (keyword.equals("Aftermath") && card.getCurrentStateName().equals(CardStateName.RightSplit)) { // Aftermath does modify existing SA, and does not add new one // only target RightSplit of it - final SpellAbility origSA = card.getState(CardStateName.RightSplit).getFirstAbility(); + final SpellAbility origSA = card.getFirstSpellAbility(); origSA.setAftermath(true); origSA.getRestrictions().setZone(ZoneType.Graveyard); // The Exile part is done by the System itself @@ -3742,9 +3740,9 @@ public class CardFactoryUtil { inst.addSpellAbility(sa); - } else if (keyword.startsWith("Fuse")) { + } else if (keyword.startsWith("Fuse") && card.getCurrentStateName().equals(CardStateName.Original)) { final SpellAbility sa = AbilityFactory.buildFusedAbility(card); - card.getState(CardStateName.Original).addNonManaAbility(sa); + card.addSpellAbility(sa); sa.setTemporary(!intrinsic); inst.addSpellAbility(sa); diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index c481ad2c234..d3f7d38698f 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -164,9 +164,6 @@ public class CardState extends GameObject { public final Collection getIntrinsicKeywords() { return intrinsicKeywords.getValues(); } - public final Iterable getIntrinsicKeywordStrings() { - return intrinsicKeywords; - } public final boolean hasIntrinsicKeyword(String k) { return intrinsicKeywords.contains(k); }