mirror of
https://github.com/correl/mage.git
synced 2024-12-25 03:00:15 +00:00
[ZNR] Implemented Magmatic Channeler
This commit is contained in:
parent
9b865ffe7a
commit
a72fa79007
2 changed files with 136 additions and 0 deletions
135
Mage.Sets/src/mage/cards/m/MagmaticChanneler.java
Normal file
135
Mage.Sets/src/mage/cards/m/MagmaticChanneler.java
Normal file
|
@ -0,0 +1,135 @@
|
|||
package mage.cards.m;
|
||||
|
||||
import mage.MageInt;
|
||||
import mage.MageObjectReference;
|
||||
import mage.abilities.Ability;
|
||||
import mage.abilities.common.SimpleActivatedAbility;
|
||||
import mage.abilities.common.SimpleStaticAbility;
|
||||
import mage.abilities.condition.Condition;
|
||||
import mage.abilities.condition.common.CardsInControllerGraveCondition;
|
||||
import mage.abilities.costs.common.DiscardCardCost;
|
||||
import mage.abilities.costs.common.TapSourceCost;
|
||||
import mage.abilities.decorator.ConditionalContinuousEffect;
|
||||
import mage.abilities.effects.AsThoughEffectImpl;
|
||||
import mage.abilities.effects.OneShotEffect;
|
||||
import mage.abilities.effects.common.continuous.BoostSourceEffect;
|
||||
import mage.cards.*;
|
||||
import mage.constants.*;
|
||||
import mage.filter.StaticFilters;
|
||||
import mage.game.Game;
|
||||
import mage.players.Player;
|
||||
import mage.target.TargetCard;
|
||||
import mage.target.common.TargetCardInExile;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author TheElk801
|
||||
*/
|
||||
public final class MagmaticChanneler extends CardImpl {
|
||||
|
||||
private static final Condition condition = new CardsInControllerGraveCondition(4, StaticFilters.FILTER_CARD_INSTANT_AND_SORCERY);
|
||||
|
||||
public MagmaticChanneler(UUID ownerId, CardSetInfo setInfo) {
|
||||
super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}");
|
||||
|
||||
this.subtype.add(SubType.HUMAN);
|
||||
this.subtype.add(SubType.WIZARD);
|
||||
this.power = new MageInt(1);
|
||||
this.toughness = new MageInt(3);
|
||||
|
||||
// As long as there are four or more instant and/or sorcery cards in your graveyard, Magmatic Channeler gets +3/+1.
|
||||
this.addAbility(new SimpleStaticAbility(new ConditionalContinuousEffect(
|
||||
new BoostSourceEffect(3, 1, Duration.WhileOnBattlefield), condition,
|
||||
"as long as there are four or more instant and/or sorcery cards in your graveyard, {this} gets +3/+1"
|
||||
)));
|
||||
|
||||
// {T}, Discard a card: Exile the top two cards of your library, then choose one of them. You may play that card this turn.
|
||||
Ability ability = new SimpleActivatedAbility(new MagmaticChannelerExileEffect(), new TapSourceCost());
|
||||
ability.addCost(new DiscardCardCost());
|
||||
this.addAbility(ability);
|
||||
}
|
||||
|
||||
private MagmaticChanneler(final MagmaticChanneler card) {
|
||||
super(card);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MagmaticChanneler copy() {
|
||||
return new MagmaticChanneler(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MagmaticChannelerExileEffect extends OneShotEffect {
|
||||
|
||||
MagmaticChannelerExileEffect() {
|
||||
super(Outcome.Benefit);
|
||||
staticText = "Exile the top two cards of your library, then choose one of them. You may play that card this turn.";
|
||||
}
|
||||
|
||||
private MagmaticChannelerExileEffect(final MagmaticChannelerExileEffect effect) {
|
||||
super(effect);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MagmaticChannelerExileEffect copy() {
|
||||
return new MagmaticChannelerExileEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
Player player = game.getPlayer(source.getControllerId());
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 2));
|
||||
player.moveCards(cards, Zone.EXILED, source, game);
|
||||
cards.removeIf(uuid -> game.getState().getZone(uuid) != Zone.EXILED);
|
||||
Card card = null;
|
||||
if (cards.isEmpty()) {
|
||||
return false;
|
||||
} else if (cards.size() == 1) {
|
||||
card = cards.getRandom(game);
|
||||
} else {
|
||||
TargetCard targetCard = new TargetCardInExile(StaticFilters.FILTER_CARD, null);
|
||||
player.choose(outcome, cards, targetCard, game);
|
||||
card = game.getCard(targetCard.getFirstTarget());
|
||||
}
|
||||
if (card == null) {
|
||||
return false;
|
||||
}
|
||||
game.addEffect(new MagmaticChannelerCastFromExileEffect(new MageObjectReference(card, game)), source);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class MagmaticChannelerCastFromExileEffect extends AsThoughEffectImpl {
|
||||
|
||||
private final MageObjectReference mor;
|
||||
|
||||
MagmaticChannelerCastFromExileEffect(MageObjectReference mor) {
|
||||
super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit);
|
||||
this.mor = mor;
|
||||
}
|
||||
|
||||
private MagmaticChannelerCastFromExileEffect(final MagmaticChannelerCastFromExileEffect effect) {
|
||||
super(effect);
|
||||
this.mor = effect.mor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean apply(Game game, Ability source) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MagmaticChannelerCastFromExileEffect copy() {
|
||||
return new MagmaticChannelerCastFromExileEffect(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) {
|
||||
return source.isControlledBy(affectedControllerId)
|
||||
&& mor.refersTo(objectId, game);
|
||||
}
|
||||
}
|
|
@ -162,6 +162,7 @@ public final class ZendikarRising extends ExpansionSet {
|
|||
cards.add(new SetCardInfo("Lotus Cobra", 193, Rarity.RARE, mage.cards.l.LotusCobra.class));
|
||||
cards.add(new SetCardInfo("Lullmage's Familiar", 227, Rarity.UNCOMMON, mage.cards.l.LullmagesFamiliar.class));
|
||||
cards.add(new SetCardInfo("Luminarch Aspirant", 24, Rarity.RARE, mage.cards.l.LuminarchAspirant.class));
|
||||
cards.add(new SetCardInfo("Magmatic Channeler", 148, Rarity.RARE, mage.cards.m.MagmaticChanneler.class));
|
||||
cards.add(new SetCardInfo("Makindi Mesas", 26, Rarity.UNCOMMON, mage.cards.m.MakindiMesas.class));
|
||||
cards.add(new SetCardInfo("Makindi Ox", 25, Rarity.COMMON, mage.cards.m.MakindiOx.class));
|
||||
cards.add(new SetCardInfo("Makindi Stampede", 26, Rarity.UNCOMMON, mage.cards.m.MakindiStampede.class));
|
||||
|
|
Loading…
Reference in a new issue