mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
CardFactoryUtil: reworked ETB Replacement Keywords
This commit is contained in:
@@ -1516,6 +1516,7 @@ public class Card extends GameEntity implements Comparable<Card> {
|
||||
sbLong.append(keyword).append("\r\n");
|
||||
} else if (keyword.startsWith("Strive") || keyword.startsWith("Escalate")
|
||||
|| keyword.startsWith("ETBReplacement")
|
||||
|| keyword.equals("CARDNAME enters the battlefield tapped.")
|
||||
|| keyword.startsWith("UpkeepCost")) {
|
||||
} else if (keyword.startsWith("Provoke") || keyword.startsWith("Ingest") || keyword.equals("Unleash")
|
||||
|| keyword.startsWith("Soulbond") || keyword.equals("Partner") || keyword.equals("Retrace")
|
||||
|
||||
@@ -2201,7 +2201,7 @@ public class CardFactoryUtil {
|
||||
addSpellAbility(keyword, card, null);
|
||||
}
|
||||
else if (keyword.equals("Hideaway")) {
|
||||
card.getCurrentState().addIntrinsicKeyword("CARDNAME enters the battlefield tapped.");
|
||||
addReplacementEffect(keyword, card, null);
|
||||
|
||||
final Trigger hideawayTrigger = TriggerHandler.parseTrigger("Mode$ ChangesZone | Destination$ Battlefield | ValidCard$ Card.Self | Execute$ TrigHideawayDig | TriggerDescription$ When CARDNAME enters the battlefield, look at the top four cards of your library, exile one face down, then put the rest on the bottom of your library.", card, true);
|
||||
card.addTrigger(hideawayTrigger);
|
||||
@@ -2216,6 +2216,14 @@ public class CardFactoryUtil {
|
||||
card.addTrigger(changeZoneTrigger);
|
||||
card.setSVar("DBHideawayRemember", "DB$ Animate | Defined$ Imprinted | RememberObjects$ Remembered | Permanent$ True");
|
||||
card.setSVar("DBHideawayCleanup", "DB$ Cleanup | ClearRemembered$ True");
|
||||
} else if (keyword.equals("CARDNAME enters the battlefield tapped.")) {
|
||||
addReplacementEffect(keyword, card, null);
|
||||
}
|
||||
|
||||
if (keyword.startsWith("ETBReplacement")) {
|
||||
addReplacementEffect(keyword, card, null);
|
||||
} else if (keyword.startsWith("etbCounter")) {
|
||||
addReplacementEffect(keyword, card, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2240,7 +2248,6 @@ public class CardFactoryUtil {
|
||||
}
|
||||
}
|
||||
|
||||
setupEtbKeywords(card);
|
||||
}
|
||||
|
||||
private static ReplacementEffect createETBReplacement(final Card card, ReplacementLayer layer,
|
||||
@@ -2273,33 +2280,6 @@ public class CardFactoryUtil {
|
||||
|
||||
return card.addReplacementEffect(re);
|
||||
}
|
||||
/**
|
||||
* TODO: Write javadoc for this method.
|
||||
* @param card
|
||||
*/
|
||||
public static void setupEtbKeywords(final Card card) {
|
||||
for (String kw : card.getKeywords()) {
|
||||
|
||||
if (kw.startsWith("ETBReplacement")) {
|
||||
String[] splitkw = kw.split(":");
|
||||
ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]);
|
||||
|
||||
final boolean optional = splitkw.length >= 4 && splitkw[3].contains("Optional");
|
||||
|
||||
final String valid = splitkw.length >= 6 ? splitkw[5] : "Card.Self";
|
||||
final String zone = splitkw.length >= 5 ? splitkw[4] : "";
|
||||
createETBReplacement(card, layer, card.getSVar(splitkw[2]), optional, false, true, valid, zone);
|
||||
} else if (kw.startsWith("etbCounter")) {
|
||||
makeEtbCounter(kw, card, true);
|
||||
} else if (kw.equals("CARDNAME enters the battlefield tapped.")) {
|
||||
card.removeIntrinsicKeyword(kw);
|
||||
|
||||
String effect = "DB$ Tap | Defined$ Self | ETB$ True | SpellDescription$ CARDNAME enters the battlefield tapped.";
|
||||
|
||||
createETBReplacement(card, ReplacementLayer.Other, effect, false, false, true, "Card.Self", "");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static ReplacementEffect makeEtbCounter(final String kw, final Card card, final boolean intrinsic)
|
||||
@@ -3718,6 +3698,29 @@ public class CardFactoryUtil {
|
||||
}
|
||||
}
|
||||
|
||||
if (keyword.equals("CARDNAME enters the battlefield tapped.") || keyword.equals("Hideway")) {
|
||||
|
||||
String effect = "DB$ Tap | Defined$ Self | ETB$ True "
|
||||
+ " | SpellDescription$ CARDNAME enters the battlefield tapped.";
|
||||
|
||||
createETBReplacement(
|
||||
card, ReplacementLayer.Other, effect, false, keyword.equals("Hideway"), intrinsic, "Card.Self", ""
|
||||
);
|
||||
}
|
||||
|
||||
if (keyword.startsWith("ETBReplacement")) {
|
||||
String[] splitkw = keyword.split(":");
|
||||
ReplacementLayer layer = ReplacementLayer.smartValueOf(splitkw[1]);
|
||||
|
||||
final boolean optional = splitkw.length >= 4 && splitkw[3].contains("Optional");
|
||||
|
||||
final String valid = splitkw.length >= 6 ? splitkw[5] : "Card.Self";
|
||||
final String zone = splitkw.length >= 5 ? splitkw[4] : "";
|
||||
createETBReplacement(card, layer, card.getSVar(splitkw[2]), optional, false, intrinsic, valid, zone);
|
||||
} else if (keyword.startsWith("etbCounter")) {
|
||||
makeEtbCounter(keyword, card, intrinsic);
|
||||
}
|
||||
|
||||
// No finish yet, need card updates
|
||||
if (keyword.startsWith("PreventAllDamageBy") && keyword.contains(":")) {
|
||||
final String[] k = keyword.split(":");
|
||||
|
||||
Reference in New Issue
Block a user