From 15fca4243d33da0a31a9f86ecc728626b96b4b07 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Sun, 2 Nov 2025 11:50:16 +0100 Subject: [PATCH] Fix reflected only checking activated mana abilities (#9058) --- .../java/forge/game/ability/AbilityUtils.java | 2 +- .../src/main/java/forge/game/card/CardUtil.java | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 828dfbf6d60..04003aa5d43 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -1340,7 +1340,7 @@ public class AbilityUtils { resolvePreAbilities(sa, game); // count times ability resolves this turn - if (!sa.isWrapper()) { + if (!sa.isWrapper() && sa.isAbility()) { final Card host = sa.getHostCard(); if (host != null) { host.addAbilityResolved(sa); diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index cd393a0d8c2..829845df1a4 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -34,6 +34,7 @@ import forge.game.player.Player; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityPredicates; import forge.game.spellability.TargetRestrictions; +import forge.game.trigger.Trigger; import forge.game.zone.ZoneType; import forge.util.TextUtil; import forge.util.collect.FCollection; @@ -304,20 +305,26 @@ public final class CardUtil { } else if (reflectProperty.equals("Produce")) { final FCollection abilities = new FCollection<>(); for (final Card c : cards) { - abilities.addAll(c.getManaAbilities()); + abilities.addAll(c.getSpellAbilities()); + for (Trigger trig : c.getTriggers()) { + abilities.add(trig.ensureAbility()); + } } final List reflectAbilities = Lists.newArrayList(); for (final SpellAbility ab : abilities) { + if (ab.isSpell()) { + continue; + } if (maxChoices == colors.size()) { break; } - if (ab.getApi() == ApiType.ManaReflected) { + // Recursion! Set Activator to controller for appropriate valid comparison + ab.setActivatingPlayer(ab.getHostCard().getController()); + if (ab.getApi() == ApiType.ManaReflected && !"Produced".equals(ab.getParam("ReflectProperty"))) { if (!parents.contains(ab.getHostCard())) { - // Recursion! Set Activator to controller for appropriate valid comparison - ab.setActivatingPlayer(ab.getHostCard().getController()); reflectAbilities.add(ab); parents.add(ab.getHostCard()); }