From b70f68d448cae440c9b81c815e9c221ef30aec01 Mon Sep 17 00:00:00 2001 From: Northmoc Date: Fri, 7 Apr 2023 14:49:50 -0400 Subject: [PATCH] Card.keywordsToText improve etb/cast keywords WotC likes give many times --- .../src/main/java/forge/game/card/Card.java | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 22fd0dafac3..0179aeb57d9 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2257,7 +2257,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { || keyword.equals("Exalted") || keyword.equals("Extort")|| keyword.equals("Flanking") || keyword.equals("Horsemanship") || keyword.equals("Infect")|| keyword.equals("Persist") || keyword.equals("Phasing") || keyword.equals("Shadow")|| keyword.equals("Skulk") - || keyword.equals("Undying") || keyword.equals("Wither") || keyword.equals("Cascade") + || keyword.equals("Undying") || keyword.equals("Wither") || keyword.equals("Mentor") || keyword.equals("Training")) { if (sb.length() != 0) { sb.append("\r\n"); @@ -2267,6 +2267,25 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sb.append(" (").append(inst.getReminderText()).append(")"); printedKW.add(keyword); } + } else if (keyword.equals("Cascade")) { // this could become a list for easy keywords that stack + if (printedKW.contains(keyword)) { + continue; + } + if (sb.length() != 0) { + sb.append("\r\n"); + } + + StringBuilder descStr = new StringBuilder(keyword); + int times = 0; + for (KeywordInterface keyw : keywords) { + String kw = keyw.getOriginal(); + if (kw.equals(keyword)) { + descStr.append(times == 0 ? "" : ", " + StringUtils.uncapitalize(keyword)); + times++; + } + } + sb.append(descStr).append(" ").append(" (").append(inst.getReminderText()).append(")"); + printedKW.add(keyword); } else if (keyword.startsWith("Ward")) { final String[] k = keyword.split(":"); final Cost cost = new Cost(k[1], false); @@ -2308,21 +2327,32 @@ public class Card extends GameEntity implements Comparable, IHasSVars { sb.append(" ").append(Localizer.getInstance().getMessage("lblSagaFooter")).append(" ").append(TextUtil.toRoman(getFinalChapterNr())).append("."); sb.append(")").append("\r\n\r\n"); } else if (keyword.startsWith("Backup")) { - final String[] k = keyword.split(":"); - String magnitude = k[1]; - boolean multi = k.length >= 4; - int times = multi ? Integer.parseInt(k[3]) : 1; + if (printedKW.contains("Backup")) { + continue; + } + boolean plural = false; - StringBuilder descStr = new StringBuilder("Backup " + magnitude); - for (int t = times; t > 1; t--) { - descStr.append(", backup ").append(magnitude); + StringBuilder descStr = new StringBuilder("Backup "); + int times = 0; + for (KeywordInterface keyw : keywords) { + String kw = keyw.getOriginal(); + if (kw.startsWith("Backup")) { + final String[] k = keyword.split(":"); + String magnitude = k[1]; + if (times == 0 && k[2].endsWith("s")) { + plural = true; + } + descStr.append(times == 0 ? magnitude : ", backup " + magnitude); + times++; + } } sb.append(descStr).append(" ").append(" ("); String remStr = inst.getReminderText(); - if (k[2].endsWith("s")) { + if (plural) { remStr = remStr.replace("ability", "abilities"); } - sb.append(remStr).append(multi ? " Each backup ability triggers separately." : "").append(")"); + sb.append(remStr).append(times > 1 ? " Each backup ability triggers separately." : "").append(")"); + printedKW.add("Backup"); } else if (keyword.startsWith("MayEffectFromOpening")) { final String[] k = keyword.split(":"); // need to get SpellDescription from Svar