From 9e38671b54e553ca5ebd94e21cae1960b6a11787 Mon Sep 17 00:00:00 2001
From: Evan Kranzler <theelk801@gmail.com>
Date: Fri, 25 Mar 2022 19:23:14 -0400
Subject: [PATCH] [CLB] Implemented Ancient Brass Dragon

---
 .../src/mage/cards/a/AncientBrassDragon.java  | 88 +++++++++++++++++++
 .../CommanderLegendsBattleForBaldursGate.java |  1 +
 ...romGraveyardToBattlefieldTargetEffect.java |  5 +-
 3 files changed, 93 insertions(+), 1 deletion(-)
 create mode 100644 Mage.Sets/src/mage/cards/a/AncientBrassDragon.java

diff --git a/Mage.Sets/src/mage/cards/a/AncientBrassDragon.java b/Mage.Sets/src/mage/cards/a/AncientBrassDragon.java
new file mode 100644
index 0000000000..78fd2a68fd
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/a/AncientBrassDragon.java
@@ -0,0 +1,88 @@
+package mage.cards.a;
+
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
+import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.ReturnFromGraveyardToBattlefieldTargetEffect;
+import mage.abilities.keyword.FlyingAbility;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.ComparisonType;
+import mage.constants.Outcome;
+import mage.constants.SubType;
+import mage.filter.FilterCard;
+import mage.filter.common.FilterCreatureCard;
+import mage.filter.predicate.mageobject.ManaValuePredicate;
+import mage.game.Game;
+import mage.players.Player;
+import mage.target.common.TargetCardInGraveyard;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class AncientBrassDragon extends CardImpl {
+
+    public AncientBrassDragon(UUID ownerId, CardSetInfo setInfo) {
+        super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{5}{B}{B}");
+
+        this.subtype.add(SubType.ELDER);
+        this.subtype.add(SubType.DRAGON);
+        this.power = new MageInt(7);
+        this.toughness = new MageInt(6);
+
+        // Flying
+        this.addAbility(FlyingAbility.getInstance());
+
+        // Whenever Ancient Brass Dragon deals combat damage to a player, roll a d20. When you do, put any number of target creature cards with mana value X or less from graveyards onto the battlefield under your control, where X is the result.
+        this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new AncientBrassDragonEffect(), false));
+    }
+
+    private AncientBrassDragon(final AncientBrassDragon card) {
+        super(card);
+    }
+
+    @Override
+    public AncientBrassDragon copy() {
+        return new AncientBrassDragon(this);
+    }
+}
+
+class AncientBrassDragonEffect extends OneShotEffect {
+
+    AncientBrassDragonEffect() {
+        super(Outcome.Benefit);
+        staticText = "roll a d20. When you do, put any number of target creature cards with mana value X " +
+                "or less from graveyards onto the battlefield under your control, where X is the result";
+    }
+
+    private AncientBrassDragonEffect(final AncientBrassDragonEffect effect) {
+        super(effect);
+    }
+
+    @Override
+    public AncientBrassDragonEffect copy() {
+        return new AncientBrassDragonEffect(this);
+    }
+
+    @Override
+    public boolean apply(Game game, Ability source) {
+        Player player = game.getPlayer(source.getControllerId());
+        if (player == null) {
+            return false;
+        }
+        int result = player.rollDice(outcome, source, game, 20);
+        FilterCard filter = new FilterCreatureCard("creature cards with mana value " + result + " or less");
+        filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, result));
+        ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(
+                new ReturnFromGraveyardToBattlefieldTargetEffect(), false
+        );
+        ability.addTarget(new TargetCardInGraveyard(0, Integer.MAX_VALUE, filter));
+        game.fireReflexiveTriggeredAbility(ability, source);
+        return true;
+    }
+}
diff --git a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java
index fa0bc080b5..575b5c3380 100644
--- a/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java
+++ b/Mage.Sets/src/mage/sets/CommanderLegendsBattleForBaldursGate.java
@@ -21,6 +21,7 @@ public final class CommanderLegendsBattleForBaldursGate extends ExpansionSet {
         this.hasBasicLands = false;
         this.hasBoosters = true;
 
+        cards.add(new SetCardInfo("Ancient Brass Dragon", 111, Rarity.MYTHIC, mage.cards.a.AncientBrassDragon.class));
         cards.add(new SetCardInfo("Bountiful Promenade", 348, Rarity.RARE, mage.cards.b.BountifulPromenade.class));
         cards.add(new SetCardInfo("Fireball", 175, Rarity.UNCOMMON, mage.cards.f.Fireball.class));
         cards.add(new SetCardInfo("Lightning Bolt", 187, Rarity.COMMON, mage.cards.l.LightningBolt.class));
diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java
index 617f651e26..402172e6bc 100644
--- a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java
@@ -84,7 +84,10 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect
             sb.append("target creature");
         } else {
             Target target = mode.getTargets().get(0);
-            if (target.getMaxNumberOfTargets() > 1) {
+            if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE
+                    && target.getMinNumberOfTargets() == 0) {
+                sb.append("any number of ");
+            } else if (target.getMaxNumberOfTargets() > 1) {
                 if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) {
                     sb.append("up to ");
                 }