[J21] Implemented Wingsteed Trainer

This commit is contained in:
Evan Kranzler 2021-08-06 17:18:21 -04:00
parent 9ba9243db5
commit b45514ecfb
4 changed files with 180 additions and 0 deletions

View file

@ -0,0 +1,94 @@
package mage.abilities.effects.common;
import mage.abilities.Ability;
import mage.abilities.Mode;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.constants.Outcome;
import mage.constants.Zone;
import mage.game.Game;
import mage.players.Player;
import mage.util.CardUtil;
import java.util.HashSet;
import java.util.Set;
/**
* @author TheElk801
*/
public class ConjureCardEffect extends OneShotEffect {
private final String cardName;
private final Zone zone;
private final int amount;
public ConjureCardEffect(String cardName) {
this(cardName, Zone.HAND, 1);
}
public ConjureCardEffect(String cardName, Zone zone, int amount) {
super(Outcome.Benefit);
this.cardName = cardName;
this.zone = zone;
this.amount = amount;
}
private ConjureCardEffect(final ConjureCardEffect effect) {
super(effect);
this.cardName = effect.cardName;
this.zone = effect.zone;
this.amount = effect.amount;
}
@Override
public ConjureCardEffect copy() {
return new ConjureCardEffect(this);
}
@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
if (player == null) {
return false;
}
CardInfo cardInfo = CardRepository
.instance
.findCards(new CardCriteria().nameExact(cardName))
.stream()
.findFirst()
.orElse(null);
if (cardInfo == null) {
return false;
}
Set<Card> cards = new HashSet<>();
for (int i = 0; i < amount; i++) {
Card card = cardInfo.getCard();
cards.add(card);
}
game.loadCards(cards, source.getControllerId());
return player.moveCards(cards, zone, source, game);
}
@Override
public String getText(Mode mode) {
StringBuilder sb = new StringBuilder("conjure ");
sb.append(CardUtil.numberToText(amount, "a"));
sb.append(' ');
sb.append(cardName);
sb.append("card");
sb.append(amount > 1 ? "s " : " ");
switch (zone) {
case HAND:
case GRAVEYARD:
sb.append("into your");
break;
case BATTLEFIELD:
sb.append("onto the");
}
sb.append(zone);
return sb.toString();
}
}