1
0
Fork 0
mirror of https://github.com/correl/mage.git synced 2025-04-10 17:00:08 -09:00

updated implementation of Adapt

This commit is contained in:
Evan Kranzler 2019-01-03 16:20:36 -05:00
parent 618300cdc3
commit 965fa971a3
6 changed files with 50 additions and 26 deletions
Mage.Sets/src/mage/cards
Mage/src/main/java/mage
abilities
effects/keyword
keyword
game/events

View file

@ -1,9 +1,7 @@
package mage.cards.a; package mage.cards.a;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.keyword.AdaptAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.keyword.AdaptEffect;
import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -29,9 +27,7 @@ public final class Aeromunculus extends CardImpl {
this.addAbility(FlyingAbility.getInstance()); this.addAbility(FlyingAbility.getInstance());
// {2}{G}{U}: Adapt 1. // {2}{G}{U}: Adapt 1.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new AdaptAbility(1, "{2}{G}{U}"));
new AdaptEffect(1), new ManaCostsImpl("{2}{G}{U}")
));
} }
public Aeromunculus(final Aeromunculus card) { public Aeromunculus(final Aeromunculus card) {

View file

@ -2,10 +2,8 @@ package mage.cards.g;
import mage.MageInt; import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl; 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.common.search.SearchLibraryPutInHandEffect;
import mage.abilities.effects.keyword.AdaptEffect; import mage.abilities.keyword.AdaptAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
import mage.constants.CardType; import mage.constants.CardType;
@ -35,9 +33,7 @@ public final class GrowthChamberGuardian extends CardImpl {
this.toughness = new MageInt(2); this.toughness = new MageInt(2);
// {2}{G}: Adapt 2. // {2}{G}: Adapt 2.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new AdaptAbility(2, "{2}{G}"));
new AdaptEffect(2), new ManaCostsImpl("{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. // 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()); this.addAbility(new GrowthChamberGuardianTriggeredAbility());

View file

@ -2,14 +2,12 @@ package mage.cards.z;
import mage.MageInt; import mage.MageInt;
import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityAllEffect; 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.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl; import mage.cards.CardImpl;
import mage.cards.CardSetInfo; import mage.cards.CardSetInfo;
@ -56,9 +54,7 @@ public final class ZeganaUtopianSpeaker extends CardImpl {
)); ));
// {4}{G}{U}: Adapt 4. // {4}{G}{U}: Adapt 4.
this.addAbility(new SimpleActivatedAbility( this.addAbility(new AdaptAbility(4, "{4}{G}{U}"));
new AdaptEffect(4), new ManaCostsImpl("{4}{G}{U}")
));
// Each creature you control with a +1/+1 counter on it has trample. // Each creature you control with a +1/+1 counter on it has trample.
this.addAbility(new SimpleStaticAbility( this.addAbility(new SimpleStaticAbility(

View file

@ -5,6 +5,7 @@ import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.counters.CounterType; import mage.counters.CounterType;
import mage.game.Game; import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.util.CardUtil; import mage.util.CardUtil;
@ -40,8 +41,15 @@ public class AdaptEffect extends OneShotEffect {
if (permanent == null) { if (permanent == null) {
return false; return false;
} }
if (permanent.getCounters(game).getCount(CounterType.P1P1) == 0) { GameEvent event = new GameEvent(
permanent.addCounters(CounterType.P1P1.createInstance(adaptNumber), source, game); 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; return true;
} }

View file

@ -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);
}
}

View file

@ -1,14 +1,14 @@
package mage.game.events; package mage.game.events;
import mage.MageObjectReference;
import mage.constants.Zone;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import mage.MageObjectReference;
import mage.constants.Zone;
/** /**
*
* @author BetaSteward_at_googlemail.com * @author BetaSteward_at_googlemail.com
*/ */
public class GameEvent implements Serializable { public class GameEvent implements Serializable {
@ -232,6 +232,7 @@ public class GameEvent implements Serializable {
FLIP, FLIPPED, FLIP, FLIPPED,
UNFLIP, UNFLIPPED, UNFLIP, UNFLIPPED,
TRANSFORM, TRANSFORMED, TRANSFORM, TRANSFORMED,
ADAPT,
BECOMES_MONSTROUS, BECOMES_MONSTROUS,
BECOMES_EXERTED, BECOMES_EXERTED,
/* BECOMES_EXERTED /* BECOMES_EXERTED
@ -383,12 +384,12 @@ public class GameEvent implements Serializable {
} }
private GameEvent(EventType type, UUID customEventType, 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); this(type, customEventType, targetId, sourceId, playerId, amount, flag, null);
} }
private GameEvent(EventType type, UUID customEventType, 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.type = type;
this.customEventType = customEventType; this.customEventType = customEventType;
this.targetId = targetId; this.targetId = targetId;
@ -466,7 +467,7 @@ public class GameEvent implements Serializable {
/** /**
* used to store which replacement effects were already applied to an event * used to store which replacement effects were already applied to an event
* or or any modified events that may replace it * or or any modified events that may replace it
* * <p>
* 614.5. A replacement effect doesn't invoke itself repeatedly; it gets * 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 * only one opportunity to affect an event or any modified events that may
* replace it. Example: A player controls two permanents, each with an * replace it. Example: A player controls two permanents, each with an