Merge branch 'AftermathFix' into 'master'

CardFactory: fixed keywords for SplitCards

See merge request core-developers/forge!239
This commit is contained in:
Sol
2018-02-20 02:42:39 +00:00
3 changed files with 11 additions and 11 deletions

View File

@@ -295,9 +295,10 @@ public class CardFactory {
sa.setRightSplit(); sa.setRightSplit();
} }
} }
CardFactoryUtil.setupKeywordedAbilities(card);
final CardState original = card.getState(CardStateName.Original); final CardState original = card.getState(CardStateName.Original);
original.addNonManaAbilities(card.getCurrentState().getNonManaAbilities()); 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) original.getSVars().putAll(card.getCurrentState().getSVars()); // Unfortunately need to copy these to (Effect looks for sVars on execute)
} else if (state != CardStateName.Original){ } else if (state != CardStateName.Original){
CardFactoryUtil.setupKeywordedAbilities(card); CardFactoryUtil.setupKeywordedAbilities(card);
@@ -305,6 +306,10 @@ public class CardFactory {
} }
card.setState(CardStateName.Original, false); card.setState(CardStateName.Original, false);
// need to update keyword cache for original spell
if (card.isSplitCard()) {
card.updateKeywordsCache(card.getCurrentState());
}
// ****************************************************************** // ******************************************************************
// ************** Link to different CardFactories ******************* // ************** Link to different CardFactories *******************

View File

@@ -2999,7 +2999,7 @@ public class CardFactoryUtil {
public static void addReplacementEffect(final KeywordInterface inst, final Card card, final boolean intrinsic) { public static void addReplacementEffect(final KeywordInterface inst, final Card card, final boolean intrinsic) {
String keyword = inst.getOriginal(); String keyword = inst.getOriginal();
if (keyword.equals("Aftermath")) { if (keyword.equals("Aftermath") && card.getCurrentStateName().equals(CardStateName.RightSplit)) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile "); sb.append("Event$ Moved | ValidCard$ Card.Self | Origin$ Stack | ExcludeDestination$ Exile ");
sb.append("| ValidStackSa$ Spell.Aftermath | Description$ Aftermath"); sb.append("| ValidStackSa$ Spell.Aftermath | Description$ Aftermath");
@@ -3021,8 +3021,6 @@ public class CardFactoryUtil {
re.setOverridingAbility(saExile); re.setOverridingAbility(saExile);
// Aftermath only on Rightsplit
// doesn't make a copy with it
inst.addReplacement(re); inst.addReplacement(re);
} else if (keyword.startsWith("Amplify")) { } else if (keyword.startsWith("Amplify")) {
final String[] ampString = keyword.split(":"); final String[] ampString = keyword.split(":");
@@ -3493,11 +3491,11 @@ public class CardFactoryUtil {
inst.addSpellAbility(newSA); 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 // Aftermath does modify existing SA, and does not add new one
// only target RightSplit of it // only target RightSplit of it
final SpellAbility origSA = card.getState(CardStateName.RightSplit).getFirstAbility(); final SpellAbility origSA = card.getFirstSpellAbility();
origSA.setAftermath(true); origSA.setAftermath(true);
origSA.getRestrictions().setZone(ZoneType.Graveyard); origSA.getRestrictions().setZone(ZoneType.Graveyard);
// The Exile part is done by the System itself // The Exile part is done by the System itself
@@ -3742,9 +3740,9 @@ public class CardFactoryUtil {
inst.addSpellAbility(sa); inst.addSpellAbility(sa);
} else if (keyword.startsWith("Fuse")) { } else if (keyword.startsWith("Fuse") && card.getCurrentStateName().equals(CardStateName.Original)) {
final SpellAbility sa = AbilityFactory.buildFusedAbility(card); final SpellAbility sa = AbilityFactory.buildFusedAbility(card);
card.getState(CardStateName.Original).addNonManaAbility(sa); card.addSpellAbility(sa);
sa.setTemporary(!intrinsic); sa.setTemporary(!intrinsic);
inst.addSpellAbility(sa); inst.addSpellAbility(sa);

View File

@@ -164,9 +164,6 @@ public class CardState extends GameObject {
public final Collection<KeywordInterface> getIntrinsicKeywords() { public final Collection<KeywordInterface> getIntrinsicKeywords() {
return intrinsicKeywords.getValues(); return intrinsicKeywords.getValues();
} }
public final Iterable<String> getIntrinsicKeywordStrings() {
return intrinsicKeywords;
}
public final boolean hasIntrinsicKeyword(String k) { public final boolean hasIntrinsicKeyword(String k) {
return intrinsicKeywords.contains(k); return intrinsicKeywords.contains(k);
} }