Refactor Offering (#8199)

This commit is contained in:
tool4ever
2025-07-25 07:02:57 +02:00
committed by GitHub
parent 0d0fdd3c0b
commit af4a6de809
11 changed files with 14 additions and 36 deletions

View File

@@ -495,8 +495,8 @@ public final class GameActionUtil {
String[] k = keyword.split(":");
final Cost cost = new Cost(k[1], false);
costs.add(new OptionalCostValue(OptionalCost.Flash, cost));
} else if (keyword.endsWith(" offering")) {
final String type = keyword.split(" ")[0];
} else if (keyword.startsWith("Offering")) {
final String type = keyword.split(":")[1];
final Cost cost = new Cost("Sac<1/" + type + ">", false);
costs.add(new OptionalCostValue(OptionalCost.Offering, cost));
}

View File

@@ -2726,13 +2726,13 @@ public class Card extends GameEntity implements Comparable<Card>, IHasSVars, ITr
sbLong.append(onlyMana? "" : ".").append(extra);
sbLong.append(!complex ? " (" + (inst.getReminderText()) + ")" : "");
sbLong.append("\r\n");
} else if (keyword.endsWith(" offering")) {
String offeringType = keyword.split(" ")[0];
} else if (keyword.startsWith("Offering")) {
String type = keyword.split(":")[1];
if (sb.length() != 0) {
sb.append("\r\n");
}
sbLong.append(keyword);
sbLong.append(" (").append(Keyword.getInstance("Offering:" + offeringType).getReminderText()).append(")");
sbLong.append(type).append(" offering");
sbLong.append(" (").append(inst.getReminderText()).append(")");
} else if (keyword.startsWith("Equip") || keyword.startsWith("Fortify") || keyword.startsWith("Outlast")
|| keyword.startsWith("Unearth") || keyword.startsWith("Scavenge")
|| keyword.startsWith("Spectacle") || keyword.startsWith("Evoke")

View File

@@ -59,11 +59,8 @@ public final class CardUtil {
"Fortify", "Transfigure", "Champion", "Evoke", "Prowl", "Freerunning",
"Reinforce", "Unearth", "Level up", "Miracle", "Overload", "Cleave",
"Scavenge", "Encore", "Bestow", "Outlast", "Dash", "Surge", "Emerge", "Hexproof:",
"Bands with other", "Landwalk",
"Bands with other", "Landwalk", "Offering",
"etbCounter", "Reflect", "Ward").build();
/** List of keyword endings of keywords that could be modified by text changes. */
public static final ImmutableList<String> modifiableKeywordEndings = ImmutableList.<String>builder().add(
"cycling", "offering").build();
public static boolean isKeywordModifiable(final String kw) {
for (final String modKw : modifiableKeywords) {
@@ -71,11 +68,6 @@ public final class CardUtil {
return true;
}
}
for (final String end : modifiableKeywordEndings) {
if (kw.endsWith(end)) {
return true;
}
}
return false;
}

View File

@@ -360,7 +360,7 @@ public class CostAdjustment {
String offeringType = "";
for (KeywordInterface inst : sa.getHostCard().getKeywords(Keyword.OFFERING)) {
final String kw = inst.getOriginal();
offeringType = kw.split(" ")[0];
offeringType = kw.split(":")[1];
break;
}

View File

@@ -253,20 +253,6 @@ public enum Keyword {
details = "";
}
if (keyword == Keyword.UNDEFINED) {
//check for special keywords that have a prefix before the keyword enum name
int idx = k.indexOf(' ');
String enumName = k.replace(" ", "_").toUpperCase(Locale.ROOT);
String firstWord = idx == -1 ? enumName : enumName.substring(0, idx);
if (idx != -1) {
idx = k.indexOf(' ', idx + 1);
String secondWord = idx == -1 ? enumName.substring(firstWord.length() + 1) : enumName.substring(firstWord.length() + 1, idx);
if (secondWord.equalsIgnoreCase("OFFERING")) {
keyword = Keyword.OFFERING;
details = firstWord;
}
}
}
KeywordInstance<?> inst;
try {
inst = keyword.type.getConstructor().newInstance();

View File

@@ -2,7 +2,7 @@ Name:Blast-Furnace Hellkite
ManaCost:7 R R
Types:Creature Dragon
PT:5/5
K:Artifact offering
K:Offering:Artifact
K:Flying
K:Double Strike
S:Mode$ Continuous | Affected$ Creature.attacking Opponent | AddKeyword$ Double Strike | Description$ Creatures attacking your opponents have double strike.

View File

@@ -2,7 +2,7 @@ Name:Patron of the Akki
ManaCost:4 R R
Types:Legendary Creature Spirit
PT:5/5
K:Goblin offering
K:Offering:Goblin
T:Mode$ Attacks | ValidCard$ Card.Self | TriggerZones$ Battlefield | Execute$ TrigPump | TriggerDescription$ Whenever CARDNAME attacks, creatures you control get +2/+0 until end of turn.
SVar:TrigPump:DB$ PumpAll | ValidCards$ Creature.YouCtrl | NumAtt$ +2
AI:RemoveDeck:All

View File

@@ -2,7 +2,7 @@ Name:Patron of the Kitsune
ManaCost:4 W W
Types:Legendary Creature Spirit
PT:5/6
K:Fox offering
K:Offering:Fox
T:Mode$ Attacks | ValidCard$ Creature | TriggerZones$ Battlefield | Execute$ PatronLife | OptionalDecider$ You | TriggerDescription$ Whenever a creature attacks, you gain 1 life.
SVar:PatronLife:DB$ GainLife | LifeAmount$ 1
AI:RemoveDeck:All

View File

@@ -2,7 +2,7 @@ Name:Patron of the Moon
ManaCost:5 U U
Types:Legendary Creature Spirit
PT:5/4
K:Moonfolk offering
K:Offering:Moonfolk
K:Flying
A:AB$ ChangeZone | Cost$ 1 | ChangeNum$ 2 | Origin$ Hand | Destination$ Battlefield | Tapped$ True | ChangeType$ Land.YouCtrl | SpellDescription$ Put up to two land cards from your hand onto the battlefield tapped.
AI:RemoveDeck:All

View File

@@ -2,7 +2,7 @@ Name:Patron of the Nezumi
ManaCost:5 B B
Types:Legendary Creature Spirit
PT:6/6
K:Rat offering
K:Offering:Rat
T:Mode$ ChangesZone | Origin$ Battlefield | Destination$ Graveyard | TriggerZones$ Battlefield | ValidCard$ Card.OppOwn | Execute$ TrigLoseLife | TriggerDescription$ Whenever a permanent is put into an opponent's graveyard, that player loses 1 life.
SVar:TrigLoseLife:DB$ LoseLife | Defined$ TriggeredCardOwner | LifeAmount$ 1
AI:RemoveDeck:All

View File

@@ -2,7 +2,7 @@ Name:Patron of the Orochi
ManaCost:6 G G
Types:Legendary Creature Spirit
PT:7/7
K:Snake offering
K:Offering:Snake
A:AB$ UntapAll | Cost$ T | ValidCards$ Forest,Creature.Green | ActivationLimit$ 1 | SpellDescription$ Untap all Forests and all green creatures. Activate only once each turn.
AI:RemoveDeck:All
Oracle:Snake offering (You may cast this card any time you could cast an instant by sacrificing a Snake and paying the difference in mana costs between this and the sacrificed Snake. Mana cost includes color.)\n{T}: Untap all Forests and all green creatures. Activate only once each turn.