From 22a9b173a56b4437df1427e2e44efc4bf305265e Mon Sep 17 00:00:00 2001 From: Jetz Date: Wed, 12 Nov 2025 09:28:51 -0500 Subject: [PATCH] Replace flavor names into oracle text. --- forge-core/src/main/java/forge/card/CardFace.java | 13 ++++++++++++- forge-core/src/main/java/forge/card/CardRules.java | 5 ----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardFace.java b/forge-core/src/main/java/forge/card/CardFace.java index d7997375c71..bd1d29e1ae8 100644 --- a/forge-core/src/main/java/forge/card/CardFace.java +++ b/forge-core/src/main/java/forge/card/CardFace.java @@ -1,6 +1,7 @@ package forge.card; import forge.card.mana.ManaCost; +import forge.util.Lang; import org.apache.commons.lang3.StringUtils; import java.util.*; @@ -185,7 +186,17 @@ final class CardFace implements ICardFace, Cloneable { } void assignMissingFieldsToVariant(CardFace variant) { - if(variant.oracleText == null) variant.oracleText = this.oracleText; + if(variant.oracleText == null) { + if(variant.flavorName != null && this.oracleText != null) { + Lang lang = Lang.getInstance(); + //Rudimentary name replacement. Can't do pronouns, ability words, or flavored keywords. Need to define variant text manually for that. + String flavoredText = this.oracleText.replaceAll("(?<=\\b|\\\\n)" + this.name + "\\b", variant.flavorName); + flavoredText = flavoredText.replaceAll("(?<=\\b|\\\\n)" + lang.getNickName(this.name) + "\\b", lang.getNickName(variant.flavorName)); + variant.oracleText = flavoredText; + } + else + variant.oracleText = this.oracleText; + } if(variant.manaCost == null) variant.manaCost = this.manaCost; if(variant.color == null) variant.color = ColorSet.fromManaCost(variant.manaCost); diff --git a/forge-core/src/main/java/forge/card/CardRules.java b/forge-core/src/main/java/forge/card/CardRules.java index 6c336d0a6ca..f79125af673 100644 --- a/forge-core/src/main/java/forge/card/CardRules.java +++ b/forge-core/src/main/java/forge/card/CardRules.java @@ -504,16 +504,11 @@ public final class CardRules implements ICardCharacteristics { CardFace variantMain = ((CardFace) mainPart).getOrCreateFunctionalVariant(variantName); variantMain.setFlavorName(nameParts[0]); - //Rudimentary name replacement. Can't do nicknames, pronouns, ability words, or flavored keywords. Need to define variants manually for that. - if(mainPart.getOracleText().contains(mainPart.getName())) - variantMain.setOracleText(mainPart.getOracleText().replace(mainPart.getName(), nameParts[0])); ((CardFace) mainPart).assignMissingFieldsToVariant(variantMain); if(otherPart != null) { CardFace variantOther = ((CardFace) otherPart).getOrCreateFunctionalVariant(variantName); variantOther.setFlavorName(nameParts[1]); - if(otherPart.getOracleText().contains(otherPart.getName())) - variantMain.setOracleText(otherPart.getOracleText().replace(otherPart.getName(), nameParts[1])); ((CardFace) otherPart).assignMissingFieldsToVariant(variantOther); }