From 0d3244b8a1102271560e4f91887d2e41b9758f4f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 28 Jun 2013 14:26:32 +0200 Subject: [PATCH] Fixed Jhoira of the Ghitu. --- .../sets/modernmasters/JhoiraOfTheGhitu.java | 23 +++++---- .../abilities/keyword/SuspendAbility.java | 48 ++++++++++++++----- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java b/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java index d791c6277c1..01302ad44dd 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java +++ b/Mage.Sets/src/mage/sets/modernmasters/JhoiraOfTheGhitu.java @@ -31,20 +31,17 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; import mage.MageInt; +import mage.abilities.Abilities; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.Cost; import mage.abilities.costs.common.ExileFromHandCost; import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.continious.GainAbilityTargetEffect; import mage.abilities.keyword.SuspendAbility; import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; -import mage.constants.Duration; import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; @@ -53,7 +50,6 @@ import mage.filter.common.FilterNonlandCard; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInHand; -import mage.target.targetpointer.FixedTarget; /** * @@ -136,9 +132,20 @@ class JhoiraOfTheGhituSuspendEffect extends OneShotEffect { if (card.getManaCost().isEmpty()) { setRuleAtTheTop(true); } - // add triggered ability to remove the counter from the card - Ability ability = new ConditionalTriggeredAbility( - new BeginningOfUpkeepTriggeredAbility(Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), TargetController.YOU, false), - SuspendedCondition.getInstance(), - "At the beginning of your upkeep, if this card is suspended, remove a time counter from it."); - ability.setRuleVisible(false); - card.addAbility(ability); + card.addAbility(new SuspendBeginningOfUpkeepTriggeredAbility()); card.addAbility(new SuspendPlayCardAbility(card.getCardType().contains(CardType.CREATURE))); } @@ -326,16 +322,26 @@ class SuspendPlayCardEffect extends OneShotEffect { Card card = game.getCard(source.getSourceId()); if (player != null && card != null) { // remove temporary suspend ability (used e.g. for Epochrasite) - Ability abilityToRemove = null; + List abilitiesToRemove = new ArrayList(); for (Ability ability : card.getAbilities()) { if (ability instanceof SuspendAbility) { if (((SuspendAbility)ability).isGainedTemporary()) { - abilityToRemove = ability; + abilitiesToRemove.add(ability); } } } - if (abilityToRemove != null) { - card.getAbilities().remove(abilityToRemove); + if (!abilitiesToRemove.isEmpty()) { + for (Ability ability : card.getAbilities()) { + if (ability instanceof SuspendBeginningOfUpkeepTriggeredAbility || ability instanceof SuspendPlayCardAbility ) { + abilitiesToRemove.add(ability); + } + } + // remove the triggered abilities from the game + game.getState().resetTriggersForSourceId(card.getId()); + // remove the continious effects from the game + game.getState().getContinuousEffects().removeGainedEffectsForSource(card.getId()); + // remove the abilities from the card + card.getAbilities().removeAll(abilitiesToRemove); } // cast the card for free player.cast(card.getSpellAbility(), game, true); @@ -381,3 +387,23 @@ class GainHasteEffect extends ContinuousEffectImpl { } } + +class SuspendBeginningOfUpkeepTriggeredAbility extends ConditionalTriggeredAbility { + + public SuspendBeginningOfUpkeepTriggeredAbility() { + super(new BeginningOfUpkeepTriggeredAbility(Zone.EXILED, new RemoveCounterSourceEffect(CounterType.TIME.createInstance()), TargetController.YOU, false), + SuspendedCondition.getInstance(), + "At the beginning of your upkeep, if this card is suspended, remove a time counter from it."); + this.setRuleVisible(false); + + } + + public SuspendBeginningOfUpkeepTriggeredAbility(final SuspendBeginningOfUpkeepTriggeredAbility effect) { + super(effect); + } + + @Override + public SuspendBeginningOfUpkeepTriggeredAbility copy() { + return new SuspendBeginningOfUpkeepTriggeredAbility(this); + } +} \ No newline at end of file