From 6d5d0ee60a2f98bf79baf8cef3e1d5a00b0f09bc Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Wed, 23 Aug 2023 01:27:04 +0200 Subject: [PATCH] Fix Gitaxian Anatomist (#10960) --- .../src/mage/cards/g/GitaxianAnatomist.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/g/GitaxianAnatomist.java b/Mage.Sets/src/mage/cards/g/GitaxianAnatomist.java index b672456b1fc..10b61bbe0b7 100644 --- a/Mage.Sets/src/mage/cards/g/GitaxianAnatomist.java +++ b/Mage.Sets/src/mage/cards/g/GitaxianAnatomist.java @@ -1,14 +1,18 @@ package mage.cards.g; import mage.MageInt; +import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; import mage.abilities.effects.common.DoIfCostPaid; import mage.abilities.effects.common.counter.ProliferateEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; +import mage.game.Game; +import mage.game.permanent.Permanent; import java.util.UUID; @@ -27,7 +31,7 @@ public final class GitaxianAnatomist extends CardImpl { // When Gitaxian Anatomist enters the battlefield, you may tap it. If you do, proliferate. this.addAbility(new EntersBattlefieldTriggeredAbility( - new DoIfCostPaid(new ProliferateEffect(), new TapSourceCost().setText("tap it")) + new DoIfCostPaid(new ProliferateEffect(), new GitaxianAnatomistCost()) )); } @@ -40,3 +44,35 @@ public final class GitaxianAnatomist extends CardImpl { return new GitaxianAnatomist(this); } } + +// TapSourceCost just does not work here as it is checking for permanent.canTap(game). +class GitaxianAnatomistCost extends CostImpl { + + public GitaxianAnatomistCost() { + this.text = "tap it"; + } + + public GitaxianAnatomistCost(GitaxianAnatomistCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, Ability source, UUID controllerId, boolean noMana, Cost costToPay) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + paid = permanent.tap(source, game); + } + return paid; + } + + @Override + public boolean canPay(Ability ability, Ability source, UUID controllerId, Game game) { + Permanent permanent = game.getPermanent(source.getSourceId()); + return permanent != null && !permanent.isTapped(); + } + + @Override + public GitaxianAnatomistCost copy() { + return new GitaxianAnatomistCost(this); + } +}