[DSK] Implement Fear of Abduction (#13079)

This commit is contained in:
Cameron Merkel 2024-11-30 11:46:06 -06:00 committed by GitHub
parent ecb5dccfae
commit aaa611679f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 126 additions and 0 deletions

View file

@ -0,0 +1,125 @@
package mage.cards.f;
import java.util.UUID;
import mage.MageInt;
import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.LeavesBattlefieldTriggeredAbility;
import mage.abilities.costs.common.ExileTargetCost;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.constants.Outcome;
import mage.constants.SubType;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.ExileZone;
import mage.game.Game;
import mage.players.Player;
import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetCreaturePermanent;
import mage.util.CardUtil;
/**
* @author Cguy7777
*/
public final class FearOfAbduction extends CardImpl {
public FearOfAbduction(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{4}{W}{W}");
this.subtype.add(SubType.NIGHTMARE);
this.power = new MageInt(5);
this.toughness = new MageInt(5);
// As an additional cost to cast this spell, exile a creature you control.
this.getSpellAbility().addCost(
new ExileTargetCost(new TargetControlledPermanent(StaticFilters.FILTER_CONTROLLED_A_CREATURE)));
// Flying
this.addAbility(FlyingAbility.getInstance());
// When Fear of Abduction enters, exile target creature an opponent controls.
Ability ability = new EntersBattlefieldTriggeredAbility(new FearOfAbductionExileEffect());
ability.addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURE));
this.addAbility(ability);
// When Fear of Abduction leaves the battlefield, put each card exiled with it into its owner's hand.
this.addAbility(new LeavesBattlefieldTriggeredAbility(new FearOfAbductionReturnEffect()));
}
private FearOfAbduction(final FearOfAbduction card) {
super(card);
}
@Override
public FearOfAbduction copy() {
return new FearOfAbduction(this);
}
}
class FearOfAbductionExileEffect extends OneShotEffect {
FearOfAbductionExileEffect() {
super(Outcome.Benefit);
this.staticText = "exile target creature an opponent controls";
}
private FearOfAbductionExileEffect(final FearOfAbductionExileEffect effect) {
super(effect);
}
@Override
public FearOfAbductionExileEffect copy() {
return new FearOfAbductionExileEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
MageObject sourceObject = source.getSourceObject(game);
if (sourceObject != null) {
return new ExileTargetEffect(
// Offset -1 so that opponent's creature is exiled to the same exile zone as your creature
CardUtil.getExileZoneId(game, source, -1),
CardUtil.getSourceName(game, source))
.apply(game, source);
}
return false;
}
}
class FearOfAbductionReturnEffect extends OneShotEffect {
FearOfAbductionReturnEffect() {
super(Outcome.Neutral);
this.staticText = "put each card exiled with it into its owner's hand";
}
private FearOfAbductionReturnEffect(final FearOfAbductionReturnEffect effect) {
super(effect);
}
@Override
public FearOfAbductionReturnEffect copy() {
return new FearOfAbductionReturnEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
// Offset -2 since Fear of Abduction has left the battlefield since last time
ExileZone exileZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, source, -2));
if (exileZone != null) {
controller.moveCards(exileZone, Zone.HAND, source, game);
}
return true;
}
return false;
}
}

View file

@ -80,6 +80,7 @@ public final class DuskmournHouseOfHorror extends ExpansionSet {
cards.add(new SetCardInfo("Ethereal Armor", 7, Rarity.UNCOMMON, mage.cards.e.EtherealArmor.class)); cards.add(new SetCardInfo("Ethereal Armor", 7, Rarity.UNCOMMON, mage.cards.e.EtherealArmor.class));
cards.add(new SetCardInfo("Exorcise", 8, Rarity.UNCOMMON, mage.cards.e.Exorcise.class)); cards.add(new SetCardInfo("Exorcise", 8, Rarity.UNCOMMON, mage.cards.e.Exorcise.class));
cards.add(new SetCardInfo("Fanatic of the Harrowing", 96, Rarity.COMMON, mage.cards.f.FanaticOfTheHarrowing.class)); cards.add(new SetCardInfo("Fanatic of the Harrowing", 96, Rarity.COMMON, mage.cards.f.FanaticOfTheHarrowing.class));
cards.add(new SetCardInfo("Fear of Abduction", 9, Rarity.UNCOMMON, mage.cards.f.FearOfAbduction.class));
cards.add(new SetCardInfo("Fear of Being Hunted", 134, Rarity.UNCOMMON, mage.cards.f.FearOfBeingHunted.class)); cards.add(new SetCardInfo("Fear of Being Hunted", 134, Rarity.UNCOMMON, mage.cards.f.FearOfBeingHunted.class));
cards.add(new SetCardInfo("Fear of Burning Alive", 135, Rarity.UNCOMMON, mage.cards.f.FearOfBurningAlive.class)); cards.add(new SetCardInfo("Fear of Burning Alive", 135, Rarity.UNCOMMON, mage.cards.f.FearOfBurningAlive.class));
cards.add(new SetCardInfo("Fear of Exposure", 177, Rarity.UNCOMMON, mage.cards.f.FearOfExposure.class)); cards.add(new SetCardInfo("Fear of Exposure", 177, Rarity.UNCOMMON, mage.cards.f.FearOfExposure.class));