diff --git a/Mage.Sets/src/mage/cards/a/Aeromunculus.java b/Mage.Sets/src/mage/cards/a/Aeromunculus.java index 0dca6864e6..4f2d962f01 100644 --- a/Mage.Sets/src/mage/cards/a/Aeromunculus.java +++ b/Mage.Sets/src/mage/cards/a/Aeromunculus.java @@ -1,9 +1,7 @@ package mage.cards.a; import mage.MageInt; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.keyword.AdaptEffect; +import mage.abilities.keyword.AdaptAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -29,9 +27,7 @@ public final class Aeromunculus extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // {2}{G}{U}: Adapt 1. - this.addAbility(new SimpleActivatedAbility( - new AdaptEffect(1), new ManaCostsImpl("{2}{G}{U}") - )); + this.addAbility(new AdaptAbility(1, "{2}{G}{U}")); } public Aeromunculus(final Aeromunculus card) { diff --git a/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java b/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java index 07dc7cb94c..8048b31642 100644 --- a/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java +++ b/Mage.Sets/src/mage/cards/g/GrowthChamberGuardian.java @@ -2,10 +2,8 @@ package mage.cards.g; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; -import mage.abilities.effects.keyword.AdaptEffect; +import mage.abilities.keyword.AdaptAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; @@ -35,9 +33,7 @@ public final class GrowthChamberGuardian extends CardImpl { this.toughness = new MageInt(2); // {2}{G}: Adapt 2. - this.addAbility(new SimpleActivatedAbility( - new AdaptEffect(2), new ManaCostsImpl("{2}{G}") - )); + this.addAbility(new AdaptAbility(2, "{2}{G}")); // Whenever one or more +1/+1 counters are put on Growth-Chamber Guardian, you may search your library for a card named Growth-Chamber Guardian, reveal it, put it into your hand, then shuffle your library. this.addAbility(new GrowthChamberGuardianTriggeredAbility()); diff --git a/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java b/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java index d373a86a37..1fbf2ef563 100644 --- a/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java +++ b/Mage.Sets/src/mage/cards/z/ZeganaUtopianSpeaker.java @@ -2,14 +2,12 @@ package mage.cards.z; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; -import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; -import mage.abilities.effects.keyword.AdaptEffect; +import mage.abilities.keyword.AdaptAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -56,9 +54,7 @@ public final class ZeganaUtopianSpeaker extends CardImpl { )); // {4}{G}{U}: Adapt 4. - this.addAbility(new SimpleActivatedAbility( - new AdaptEffect(4), new ManaCostsImpl("{4}{G}{U}") - )); + this.addAbility(new AdaptAbility(4, "{4}{G}{U}")); // Each creature you control with a +1/+1 counter on it has trample. this.addAbility(new SimpleStaticAbility( diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java index 0bbc9ebbb5..ed29b59aea 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/AdaptEffect.java @@ -5,6 +5,7 @@ import mage.abilities.effects.OneShotEffect; import mage.constants.Outcome; import mage.counters.CounterType; import mage.game.Game; +import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.util.CardUtil; @@ -40,8 +41,15 @@ public class AdaptEffect extends OneShotEffect { if (permanent == null) { return false; } - if (permanent.getCounters(game).getCount(CounterType.P1P1) == 0) { - permanent.addCounters(CounterType.P1P1.createInstance(adaptNumber), source, game); + GameEvent event = new GameEvent( + GameEvent.EventType.ADAPT, source.getSourceId(), source.getSourceId(), + source.getControllerId(), adaptNumber, false + ); + if (game.replaceEvent(event)) { + return false; + } + if (permanent.getCounters(game).getCount(CounterType.P1P1) == 0 || event.getFlag()) { + permanent.addCounters(CounterType.P1P1.createInstance(event.getAmount()), source, game); } return true; } diff --git a/Mage/src/main/java/mage/abilities/keyword/AdaptAbility.java b/Mage/src/main/java/mage/abilities/keyword/AdaptAbility.java new file mode 100644 index 0000000000..634c38bd4d --- /dev/null +++ b/Mage/src/main/java/mage/abilities/keyword/AdaptAbility.java @@ -0,0 +1,27 @@ + + +package mage.abilities.keyword; + +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.keyword.AdaptEffect; +import mage.constants.Zone; + +/** + * @author TheElk801 + */ +public class AdaptAbility extends ActivatedAbilityImpl { + + public AdaptAbility(int adaptNumber, String manaCost) { + super(Zone.BATTLEFIELD, new AdaptEffect(adaptNumber), new ManaCostsImpl(manaCost)); + } + + public AdaptAbility(final AdaptAbility ability) { + super(ability); + } + + @Override + public AdaptAbility copy() { + return new AdaptAbility(this); + } +} diff --git a/Mage/src/main/java/mage/game/events/GameEvent.java b/Mage/src/main/java/mage/game/events/GameEvent.java index eeb746ce95..622ee3eadd 100644 --- a/Mage/src/main/java/mage/game/events/GameEvent.java +++ b/Mage/src/main/java/mage/game/events/GameEvent.java @@ -1,14 +1,14 @@ package mage.game.events; +import mage.MageObjectReference; +import mage.constants.Zone; + import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import mage.MageObjectReference; -import mage.constants.Zone; /** - * * @author BetaSteward_at_googlemail.com */ public class GameEvent implements Serializable { @@ -232,6 +232,7 @@ public class GameEvent implements Serializable { FLIP, FLIPPED, UNFLIP, UNFLIPPED, TRANSFORM, TRANSFORMED, + ADAPT, BECOMES_MONSTROUS, BECOMES_EXERTED, /* BECOMES_EXERTED @@ -383,12 +384,12 @@ public class GameEvent implements Serializable { } private GameEvent(EventType type, UUID customEventType, - UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) { + UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag) { this(type, customEventType, targetId, sourceId, playerId, amount, flag, null); } private GameEvent(EventType type, UUID customEventType, - UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag, MageObjectReference reference) { + UUID targetId, UUID sourceId, UUID playerId, int amount, boolean flag, MageObjectReference reference) { this.type = type; this.customEventType = customEventType; this.targetId = targetId; @@ -466,7 +467,7 @@ public class GameEvent implements Serializable { /** * used to store which replacement effects were already applied to an event * or or any modified events that may replace it - * + * <p> * 614.5. A replacement effect doesn't invoke itself repeatedly; it gets * only one opportunity to affect an event or any modified events that may * replace it. Example: A player controls two permanents, each with an