package magic.model.event; import magic.model.MagicCard; import magic.model.MagicCardList; import magic.model.MagicGame; import magic.model.MagicLocationType; import magic.model.MagicPlayer; import magic.model.MagicSource; import magic.model.action.ShiftCardAction; import magic.model.condition.MagicCondition; import magic.model.condition.MagicConditionFactory; public class MagicExileTopLibraryEvent extends MagicEvent{ private final MagicCondition cond; public MagicExileTopLibraryEvent(final MagicSource source, final int amount) { this(source, source.getController(), amount); } public MagicExileTopLibraryEvent(final MagicSource source, final MagicPlayer player, final int amount) { super( source, player, amount, EVENT_ACTION, "PN exiles the top RN cards of his or her library." ); cond = MagicConditionFactory.LibraryAtLeast(amount); } private static final MagicEventAction EVENT_ACTION = (final MagicGame game, final MagicEvent event) -> { final MagicCardList exile = new MagicCardList(event.getPlayer().getLibrary().getCardsFromTop(event.getRefInt())); for (final MagicCard card : exile) { game.doAction(new ShiftCardAction(card,MagicLocationType.OwnersLibrary,MagicLocationType.Exile)); } }; @Override public boolean isSatisfied() { return cond.accept(getSource()) && super.isSatisfied(); } }