package magic.model.event; import magic.model.MagicCard; import magic.model.MagicGame; import magic.model.MagicSource; import magic.model.MagicManaCost; import magic.model.MagicPlayer; import magic.model.MagicLocationType; import magic.model.MagicPayedCost; import magic.model.choice.MagicTargetChoice; import magic.model.condition.MagicCondition; import magic.model.target.MagicCardFilterImpl; import magic.model.target.MagicTargetType; import java.util.Arrays; public class MagicTransmuteActivation extends MagicCardAbilityActivation { final MagicManaCost cost; private static MagicTargetChoice getTransmuteChoice(final int cmc) { final MagicCardFilterImpl transmuteFilter = new MagicCardFilterImpl() { public boolean accept(final MagicSource source,final MagicPlayer player,final MagicCard target) { return target.getConvertedCost() == cmc; } public boolean acceptType(final MagicTargetType targetType) { return targetType == MagicTargetType.Library; } }; return new MagicTargetChoice(transmuteFilter,"a card with converted mana cost of " + cmc); } public MagicTransmuteActivation(final MagicManaCost aCost) { super( new MagicCondition[]{MagicCondition.SORCERY_CONDITION}, new MagicActivationHints(MagicTiming.Main,true), "Transmute" ); cost = aCost; } @Override public Iterable<? extends MagicEvent> getCostEvent(final MagicCard source) { return Arrays.asList( new MagicPayManaCostEvent(source, cost), new MagicDiscardSelfEvent(source) ); } @Override public MagicEvent getCardEvent(final MagicCard card, final MagicPayedCost payedCost) { return new MagicEvent( card, card.getConvertedCost(), this, "PN searches his or her library for a card with converted mana cost of RN. " + "Then PN shuffles his or her library." ); } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { game.addEvent(new MagicSearchToLocationEvent( event, getTransmuteChoice(event.getRefInt()), MagicLocationType.OwnersHand )); } }