From 2443f1486d9aec88cb08d0d566f94bd9150a38f2 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Thu, 6 Feb 2025 07:40:29 +0100 Subject: [PATCH] Fix Primal Wellspring trigger not working with Chun-Li (#6971) Co-authored-by: tool4EvEr --- .../forge/game/spellability/AbilityManaPart.java | 13 +++++-------- .../java/forge/game/spellability/SpellAbility.java | 2 +- .../game/trigger/TriggerSpellAbilityCastOrCopy.java | 7 +++++++ forge-gui/res/languages/en-US.properties | 4 ++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index 5e58e9b6a22..e9b9ca9072d 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -322,16 +322,13 @@ public class AbilityManaPart implements java.io.Serializable { return this.triggersWhenSpent != null; } - public void addTriggersWhenSpent(SpellAbility saBeingPaid, Card card) { - if (this.triggersWhenSpent == null) - return; - - TriggerHandler handler = card.getGame().getTriggerHandler(); + public void addTriggersWhenSpent(SpellAbility saBeingPaid) { Trigger trig = TriggerHandler.parseTrigger(sVarHolder.getSVar(this.triggersWhenSpent), sourceCard, false, sVarHolder); - if (sVarHolder instanceof SpellAbility) { - trig.setSpawningAbility((SpellAbility) sVarHolder); + trig.addRemembered(saBeingPaid); + if (getSourceSA() != null) { + trig.setSpawningAbility(getSourceSA()); } - handler.registerOneTrigger(trig); + saBeingPaid.getHostCard().getGame().getTriggerHandler().registerThisTurnDelayedTrigger(trig); } public SpellAbility getSourceSA() { diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 69892f92596..cb418a097e1 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -838,7 +838,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit for (Mana mana : getPayingMana()) { if (mana.triggersWhenSpent()) { - mana.getManaAbility().addTriggersWhenSpent(this, host); + mana.getManaAbility().addTriggersWhenSpent(this); } if (mana.addsCounters(this)) { diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java index 82503e54189..6fbad15b2ab 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java @@ -251,6 +251,13 @@ public class TriggerSpellAbilityCastOrCopy extends Trigger { return false; } } + + if (getSpawningAbility() != null && getSpawningAbility().hasParam("TriggersWhenSpent")) { + if (!getTriggerRemembered().contains(spellAbility)) { + return false; + } + } + return true; } diff --git a/forge-gui/res/languages/en-US.properties b/forge-gui/res/languages/en-US.properties index 4a0509c05b6..f6396408b0e 100644 --- a/forge-gui/res/languages/en-US.properties +++ b/forge-gui/res/languages/en-US.properties @@ -1295,8 +1295,8 @@ lblFullControl=Full Control lblFullControlDetails=This feature lets you skip different helpers that streamline gameplay by avoiding somewhat annoying GUI interactions and instead use AI logic to make reasonable decisions for beginners.\nUseful for certain corner cases or if you want to challenge yourself with the Comprehensive Rules:\ne.g. the opposite cost order is needed if activating an animated "Halo Fountain" that's also tapped. lblChooseCostOrder=Choose cost order lblChooseCostReductionOrder=Choose cost reduction order & amount -lblNoPaymentFromManaAbility=Don\'t attempt paying when generating mana -lblNoFreeCombatCostHandling=Don\'t accept attack/block costs of \{0\} +lblNoPaymentFromManaAbility=Don''t attempt paying when generating mana +lblNoFreeCombatCostHandling=Don''t accept attack/block costs of \{0\} lblAllowPaymentStartWithMissingResources=Allow payment start when cost seems unaffordable lblLayerTimestampOrder=Finetune layer timestamp order lblOrderCosts=Order costs