package magic.model.event; import magic.model.MagicCard; import magic.model.MagicGame; import magic.model.MagicLocationType; import magic.model.MagicPermanent; import magic.model.MagicPlayer; import magic.model.action.AddTriggerAction; import magic.model.action.MoveCardAction; import magic.model.action.RemoveCardAction; import magic.model.choice.MagicTargetChoice; import magic.model.stack.MagicCardOnStack; import magic.model.trigger.ThisDiesTrigger; public class MagicHauntEvent extends MagicEvent { public MagicHauntEvent(final MagicPermanent permanent, final MagicSourceEvent effect) { this(permanent.getCard(), permanent.getController(), effect); } public MagicHauntEvent(final MagicCardOnStack cardOnStack, final MagicSourceEvent effect) { this(cardOnStack.getCard(), cardOnStack.getController(), effect); } private MagicHauntEvent(final MagicCard card, final MagicPlayer player, final MagicSourceEvent effect) { super( card, player, MagicTargetChoice.TARGET_CREATURE, EVENT_ACTION(effect), "Exile SN haunting target creature$." ); } private static final MagicEventAction EVENT_ACTION(final MagicSourceEvent effect) { return (final MagicGame game, final MagicEvent event) -> { final MagicCard card = event.getCard(); if (card.isInGraveyard()) { event.processTargetPermanent(game, creatureToHaunt -> { // only exile if valid target game.doAction(new RemoveCardAction(card, MagicLocationType.Graveyard)); game.doAction(new MoveCardAction(card, MagicLocationType.Graveyard, MagicLocationType.Exile)); game.doAction(new AddTriggerAction( creatureToHaunt, ThisDiesTrigger.createDelayed(card, event.getPlayer(), effect) )); }); } }; } }