Skip to content

Commit 79e9ae4

Browse files
authored
Devour: remove KeywordWithAmountAndType (Card-Forge#9478)
1 parent 0ffbf0d commit 79e9ae4

File tree

7 files changed

+65
-81
lines changed

7 files changed

+65
-81
lines changed

forge-game/src/main/java/forge/game/card/Card.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2635,13 +2635,6 @@ public final String keywordsToText(final Collection<KeywordInterface> keywords)
26352635
sbLong.append(rem.toString());
26362636
}
26372637
sbLong.append(")");
2638-
} else if (keyword.startsWith("Devour ")) {
2639-
final String[] k = keyword.split(":");
2640-
final String[] s = (k[0]).split(" ");
2641-
final String t = s[1];
2642-
sbLong.append(k[0]).append(" ").append(k[1]).append(" (As this enters, you may ");
2643-
sbLong.append("sacrifice any number of ").append(t).append("s. This creature enters ");
2644-
sbLong.append("with that many +1/+1 counters on it.)");
26452638
} else if (keyword.startsWith("Prototype")) {
26462639
final String[] k = keyword.split(":");
26472640
final Cost cost = new Cost(k[1], false);

forge-game/src/main/java/forge/game/card/CardFactoryUtil.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import forge.game.cost.*;
3333
import forge.game.event.GameEventCardForetold;
3434
import forge.game.event.GameEventCardPlotted;
35+
import forge.game.keyword.Devour;
3536
import forge.game.keyword.Keyword;
3637
import forge.game.keyword.KeywordInterface;
3738
import forge.game.player.Player;
@@ -2262,27 +2263,11 @@ public static void addReplacementEffect(final KeywordInterface inst, final CardS
22622263
re.setOverridingAbility(saTransform);
22632264

22642265
inst.addReplacement(re);
2265-
} else if (keyword.startsWith("Devour")) {
2266-
final String[] k = keyword.split(":");
2267-
final String magnitude = k[1];
2268-
String valid = "Creature";
2269-
String type = "creature";
2270-
StringBuilder sbDesc = new StringBuilder("Devour ");
2271-
if (k.length > 2 && !k[2].isEmpty()) {
2272-
valid = k[2];
2273-
type = valid;
2274-
if (CardType.isACardType(type)) {
2275-
type = type.toLowerCase(Locale.ENGLISH);
2276-
}
2277-
sbDesc.append(type).append(" ");
2278-
}
2279-
sbDesc.append(magnitude);
2280-
if (k.length > 3) {
2281-
sbDesc.append(k[3]);
2282-
}
2266+
} else if (keyword.startsWith("Devour") && inst instanceof Devour devour) {
2267+
String valid = devour.getValidType();
22832268

22842269
String sacrificeStr = "DB$ Sacrifice | Defined$ You | Amount$ DevourSacX | RememberSacrificed$ True | Optional$ True"
2285-
+ " | SacValid$ " + valid + ".Other | SacMessage$ another " + type;
2270+
+ " | SacValid$ " + valid + ".Other | SacMessage$ another " + devour.getTypeDescription();
22862271
// TODO find better way to add Devour N to Player Msg
22872272
// Also better lblDoYouWantSacrifice?
22882273

@@ -2293,13 +2278,13 @@ public static void addReplacementEffect(final KeywordInterface inst, final CardS
22932278
sacrificeSA.setSVar("DevourSacX", "Count$Valid " + valid + ".YouCtrl+Other");
22942279

22952280
AbilitySub counterSA = (AbilitySub) AbilityFactory.getAbility(counterStr, card);
2296-
counterSA.setSVar("DevourX", "Count$RememberedSize/Times." + magnitude);
2281+
counterSA.setSVar("DevourX", "Count$RememberedSize/Times." + devour.getAmountString());
22972282
sacrificeSA.setSubAbility(counterSA);
22982283

22992284
AbilitySub cleanupSA = (AbilitySub) AbilityFactory.getAbility(cleanupStr, card);
23002285
counterSA.setSubAbility(cleanupSA);
23012286

2302-
String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | Description$ " + sbDesc + " ("+ inst.getReminderText() + ")";
2287+
String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | ReplacementResult$ Updated | Description$ " + devour.getTitle() + " ("+ inst.getReminderText() + ")";
23032288

23042289
ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, host, intrinsic, card);
23052290

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,58 @@
11
package forge.game.keyword;
22

3+
import java.util.Locale;
4+
35
import forge.card.CardType;
46

5-
public class Devour extends KeywordWithAmountAndType {
7+
public class Devour extends KeywordWithAmount {
8+
protected String type = null;
9+
protected String descType = null;
10+
protected String reminderType = null;
11+
protected String extra = null;
12+
13+
public String getValidType() { return type == null ? "Creature" : type; }
14+
public String getTypeDescription() { return descType; }
15+
16+
public String getTitle() {
17+
StringBuilder sb = new StringBuilder();
18+
sb.append(getKeyword());
19+
if (type != null) {
20+
sb.append(" ").append(getTypeDescription());
21+
}
22+
sb.append(" ").append(getAmountString());
23+
if (extra != null) {
24+
sb.append(extra);
25+
}
26+
return sb.toString();
27+
}
28+
629
@Override
730
protected void parse(String details) {
8-
super.parse(details);
931
String[] d = details.split(":");
10-
type = "creatures";
11-
if (d.length > 1 && !d[1].isEmpty())
12-
type = CardType.getPluralType(d[1]);
32+
if (details.startsWith("X")) {
33+
withX = true;
34+
} else {
35+
amount = Integer.parseInt(d[0]);
36+
}
37+
descType = "Creature";
38+
reminderType = "creatures";
39+
if (d.length > 1 && !d[1].isEmpty()) {
40+
descType = type = d[1];
41+
reminderType = CardType.getPluralType(type);
42+
}
43+
if (CardType.isACardType(descType)) {
44+
descType = descType.toLowerCase(Locale.ENGLISH);
45+
}
46+
if (d.length > 2) {
47+
extra = d[2];
48+
}
49+
}
50+
51+
@Override
52+
protected String formatReminderText(String reminderText) {
53+
if (withX) {
54+
return String.format(reminderText.replaceAll("\\%(\\d+\\$)?d", "%$1s"), "X", reminderType);
55+
}
56+
return String.format(reminderText, amount, reminderType);
1357
}
1458
}

forge-game/src/main/java/forge/game/keyword/KeywordInstance.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,14 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> implements K
3535
private List<SpellAbility> abilities = Lists.newArrayList();
3636
private List<StaticAbility> staticAbilities = Lists.newArrayList();
3737

38-
39-
/* (non-Javadoc)
40-
* @see forge.game.keyword.KeywordInterface#getOriginal()
41-
*/
4238
@Override
4339
public String getOriginal() {
4440
return original;
4541
}
46-
/* (non-Javadoc)
47-
* @see forge.game.keyword.KeywordInterface#getKeyword()
48-
*/
4942
@Override
5043
public Keyword getKeyword() {
5144
return keyword;
5245
}
53-
/* (non-Javadoc)
54-
* @see forge.game.keyword.KeywordInterface#getReminderText()
55-
*/
5646
@Override
5747
public String getReminderText() {
5848
String result = formatReminderText(keyword.reminderText);
@@ -65,13 +55,14 @@ public String getReminderText() {
6555
m.appendTail(sb);
6656
return sb.toString();
6757
}
68-
/* (non-Javadoc)
69-
* @see forge.game.keyword.KeywordInterface#getAmount()
70-
*/
7158
@Override
7259
public int getAmount() {
7360
return 1;
7461
}
62+
@Override
63+
public String getAmountString() {
64+
return String.valueOf(getAmount());
65+
}
7566
protected void initialize(String original0, Keyword keyword0, String details) {
7667
original = original0;
7768
keyword = keyword0;

forge-game/src/main/java/forge/game/keyword/KeywordInterface.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public interface KeywordInterface extends Cloneable, IHasSVars {
2424
String getReminderText();
2525

2626
int getAmount();
27+
String getAmountString();
2728

2829
StaticAbility getStatic();
2930
void setStatic(StaticAbility st);

forge-game/src/main/java/forge/game/keyword/KeywordWithAmount.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ public int getAmount() {
1010
return amount;
1111
}
1212

13+
@Override
14+
public String getAmountString() {
15+
return withX ? "X" : String.valueOf(amount);
16+
}
17+
1318
@Override
1419
protected void parse(String details) {
1520
if (details.startsWith("X")) {

forge-game/src/main/java/forge/game/keyword/KeywordWithAmountAndType.java

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)