From 1453fa46a78d3852c64623f2ef5491b49ef48ecb Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Tue, 3 Oct 2017 15:52:58 -0400 Subject: [PATCH] Fixed Urborg's functionality, also fixed Scarwood Hag not removing forestwalk properly (#4088) --- Mage.Sets/src/mage/cards/u/Urborg.java | 48 +++++++++++++++++-- .../continuous/LoseAbilityTargetEffect.java | 15 +++++- 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/u/Urborg.java b/Mage.Sets/src/mage/cards/u/Urborg.java index 967c4d39bd2..a8f163a894a 100644 --- a/Mage.Sets/src/mage/cards/u/Urborg.java +++ b/Mage.Sets/src/mage/cards/u/Urborg.java @@ -31,15 +31,22 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.continuous.LoseAbilityOrAnotherAbilityTargetEffect; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.LoseAbilityTargetEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.SwampwalkAbility; import mage.abilities.mana.BlackManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; import mage.constants.SuperType; import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; import mage.target.common.TargetCreaturePermanent; /** @@ -49,13 +56,14 @@ import mage.target.common.TargetCreaturePermanent; public class Urborg extends CardImpl { public Urborg(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); addSuperType(SuperType.LEGENDARY); // {tap}: Add {B} to your mana pool. this.addAbility(new BlackManaAbility()); + // {tap}: Target creature loses first strike or swampwalk until end of turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilityOrAnotherAbilityTargetEffect(FirstStrikeAbility.getInstance(), new SwampwalkAbility()), new TapSourceCost()); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new UrborgEffect(), new TapSourceCost()); ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); } @@ -70,4 +78,38 @@ public class Urborg extends CardImpl { } } +class UrborgEffect extends OneShotEffect { + UrborgEffect() { + super(Outcome.Benefit); + this.staticText = "Target creature loses first strike or swampwalk until end of turn."; + } + + UrborgEffect(final UrborgEffect effect) { + super(effect); + } + + @Override + public UrborgEffect copy() { + return new UrborgEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (player == null || permanent == null) { + return false; + } + Ability ability; + if (player.chooseUse(Outcome.UnboostCreature, "Which ability should be lost?", null, "First Strike", "Swampwalk", source, game)) { + ability = FirstStrikeAbility.getInstance(); + } else { + ability = new SwampwalkAbility(); + } + ContinuousEffect effect = new LoseAbilityTargetEffect(ability, Duration.EndOfTurn); +// effect.setTargetPointer(new FixedTarget(permanent, game)); + game.addEffect(effect, source); + return true; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java index 3ac29f83140..a27e56fa95d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java @@ -27,7 +27,9 @@ */ package mage.abilities.effects.common.continuous; +import java.util.Iterator; import mage.abilities.Ability; +import mage.abilities.MageSingleton; import mage.abilities.Mode; import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.Duration; @@ -69,8 +71,17 @@ public class LoseAbilityTargetEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); if (permanent != null) { - while (permanent.getAbilities().contains(ability)) { - permanent.getAbilities().remove(ability); + if (ability instanceof MageSingleton) { + while (permanent.getAbilities().contains(ability)) { + permanent.getAbilities().remove(ability); + } + } else { + for (Iterator iter = permanent.getAbilities().iterator(); iter.hasNext();) { + Ability ab = iter.next(); + if (ab.getClass().equals(ability.getClass())) { + iter.remove(); + } + } } } return true;