From e00602db376a423065cef731f0a574a927733659 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Sat, 19 Mar 2011 23:14:41 -0400 Subject: [PATCH] fixed mana filters - added activated abilities as sources --- .../sets/riseoftheeldrazi/EldraziTemple.java | 4 ++ .../sets/scarsofmirrodin/GrandArchitect.java | 69 +++++++++++++++++-- 2 files changed, 66 insertions(+), 7 deletions(-) diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java index ba7b7445ce5..c61d43d2428 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java @@ -30,6 +30,7 @@ package mage.sets.riseoftheeldrazi; import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; +import mage.MageObject; import mage.Mana; import mage.abilities.effects.common.ManaEffect; import mage.abilities.mana.BasicManaAbility; @@ -87,6 +88,9 @@ class EldraziTempleManaAbility extends BasicManaAbility { private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("blue creatures"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("untapped blue creature"); static { filter.getColor().setBlue(true); filter.setUseColor(true); - filter2.getColor().setBlue(true); - filter2.setUseColor(true); - filter2.setTapped(false); - filter2.setUseTapped(true); } public GrandArchitect(UUID ownerId) { @@ -83,8 +83,7 @@ public class GrandArchitect extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, filter, true))); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new GrandArchitectEffect(), new ManaCostsImpl("{U}"))); - this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new ManaEffect(Mana.ColorlessMana(2)), new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter2, true)))); - //TODO: add filter to mana + this.addAbility(new GrandArchitectManaAbility()); } public GrandArchitect(final GrandArchitect card) { @@ -132,3 +131,59 @@ class GrandArchitectEffect extends ContinuousEffectImpl { return "Target artifact creature becomes blue until end of turn"; } } + +class GrandArchitectManaAbility extends ManaAbility { + + private static final String abilityText = "Spend this mana only to cast artifact spells or activate abilities of artifacts. " + + "(Mage Tip: This ability can only be activated when an artifact spell or ability is on the stack.)"; + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("untapped blue creature"); + + static { + filter.getColor().setBlue(true); + filter.setUseColor(true); + filter.setTapped(false); + filter.setUseTapped(true); + } + + GrandArchitectManaAbility ( ) { + super(Zone.BATTLEFIELD, new ManaEffect(Mana.ColorlessMana(2)), new TapTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true))); + this.netMana.setColorless(2); + } + + GrandArchitectManaAbility ( GrandArchitectManaAbility ability ) { + super(ability); + } + + @Override + public boolean canActivate(UUID playerId, Game game) { + boolean artifactSpellBeingCast = false; + + SpellStack stack = game.getStack(); + for ( int idx = 0; idx < stack.size(); idx++ ) { + StackObject stackObject = stack.get(idx); + if ( stackObject.getControllerId().equals(playerId) ) { + artifactSpellBeingCast |= stackObject.getCardType().contains(CardType.ARTIFACT); + MageObject source = game.getObject(stackObject.getSourceId()); + if (source != null) + artifactSpellBeingCast |= source.getCardType().contains(CardType.ARTIFACT); + } + } + + return super.canActivate(playerId, game) && artifactSpellBeingCast; + } + + @Override + public String getRule() { + return super.getRule() + " " + abilityText; + } + + @Override + public String getRule(String source) { + return super.getRule(source); + } + + @Override + public GrandArchitectManaAbility copy ( ) { + return new GrandArchitectManaAbility(this); + } +}