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 0bf1f24627b..968b0b9d1de 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -3232,8 +3232,17 @@ public class CardFactoryUtil { if (keyword.startsWith("Affinity")) { final String[] k = keyword.split(":"); final String t = k[1]; + String d = ""; + if (k.length > 2) { + final StringBuilder s = new StringBuilder(); + s.append(k[2]).append("s"); + d = s.toString(); + } String desc = "Artifact".equals(t) ? "artifacts" : CardType.getPluralType(t); + if (!d.isEmpty()) { + desc = d; + } StringBuilder sb = new StringBuilder(); sb.append("Mode$ ReduceCost | ValidCard$ Card.Self | Type$ Spell | Amount$ AffinityX | EffectZone$ All"); sb.append("| Description$ Affinity for ").append(desc); diff --git a/forge-game/src/main/java/forge/game/keyword/Keyword.java b/forge-game/src/main/java/forge/game/keyword/Keyword.java index 3f5bed4a1b9..bc393018cc3 100644 --- a/forge-game/src/main/java/forge/game/keyword/Keyword.java +++ b/forge-game/src/main/java/forge/game/keyword/Keyword.java @@ -18,7 +18,7 @@ public enum Keyword { UNDEFINED("", SimpleKeyword.class, false, ""), ABSORB("Absorb", KeywordWithAmount.class, false, "If a source would deal damage to this creature, prevent %d of that damage."), ADAPT("Adapt", KeywordWithCostAndAmount.class, false, "If this creature has no +1/+1 counters on it, put {%2$d:+1/+1 counter} on it."), - AFFINITY("Affinity", KeywordWithType.class, false, "This spell costs you {1} less to cast for each %s you control."), + AFFINITY("Affinity", KeywordWithType.class, false, "This spell costs {1} less to cast for each %s you control."), AFFLICT("Afflict", KeywordWithAmount.class, false, "Whenever this creature becomes blocked, defending player loses %d life."), AFTERLIFE("Afterlife", KeywordWithAmount.class, false, "When this creature dies, create {%1$d:1/1 white and black Spirit creature token} with flying."), AFTERMATH("Aftermath", SimpleKeyword.class, false, "Cast this spell only from your graveyard. Then exile it."), diff --git a/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java b/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java index 3d30c625d9a..8960a920e6a 100644 --- a/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java +++ b/forge-game/src/main/java/forge/game/keyword/KeywordWithType.java @@ -11,6 +11,9 @@ public class KeywordWithType extends KeywordInstance { type = details.toLowerCase(); } else if (details.contains(":")) { type = details.split(":")[0]; + if (this.toString().startsWith("Affinity")) { + type = details.split(":")[1]; + } } else { type = details; } diff --git a/forge-gui/res/cardsfolder/upcoming/junk_winder.txt b/forge-gui/res/cardsfolder/upcoming/junk_winder.txt index df1adbab75e..bb2250d7694 100644 --- a/forge-gui/res/cardsfolder/upcoming/junk_winder.txt +++ b/forge-gui/res/cardsfolder/upcoming/junk_winder.txt @@ -2,9 +2,9 @@ Name:Junk Winder ManaCost:5 U U Types:Creature Serpent PT:5/6 -K:Affinity:Permanent.token +K:Affinity:Permanent.token:token T:Mode$ ChangesZone | Origin$ Any | Destination$ Battlefield | ValidCard$ Permanent.token+YouCtrl | TriggerZones$ Battlefield | Execute$ TrigTap | TriggerDescription$ Whenever a token enters the battlefield under your control, tap target nonland permanent an opponent controls. It doesn't untap during its controller's next untap step. SVar:TrigTap:DB$ Tap | ValidTgts$ Permanent.nonLand+OppCtrl | TgtPrompt$ Choose target nonland permanent an opponent controls | SubAbility$ DBPump -SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ HIDDEN This card doesn't untap during your next untap step. | Permanent$ True +SVar:DBPump:DB$ Pump | Defined$ Targeted | KW$ HIDDEN This card doesn't untap during your next untap step. | Duration$ Permanent DeckNeeds:Ability$Token Oracle:Affinity for tokens (This spell costs {1} less to cast for each token you control.)\nWhenever a token enters the battlefield under your control, tap target nonland permanent an opponent controls. It doesn't untap during its controller's next untap step.