foul-magics/Mage/src/main/java/mage/abilities/effects/common/ConjureCardEffect.java
xenohedron 869de1eac6
fix getText() overrides ignoring staticText (#11044)
* fix text: SkipNextPlayerUntapStepEffect

* remove old copyright info

* individual card text fixes

* fix overrides ignoring staticText
2023-08-26 20:47:02 -04:00

100 lines
2.7 KiB
Java

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().name(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) {
if (staticText != null && !staticText.isEmpty()) {
return staticText;
}
StringBuilder sb = new StringBuilder("conjure ");
sb.append(CardUtil.numberToText(amount, "a"));
sb.append(' ');
sb.append("card");
sb.append(amount > 1 ? "s " : " ");
sb.append("named ");
sb.append(cardName);
sb.append(' ');
switch (zone) {
case HAND:
case GRAVEYARD:
sb.append("into your");
break;
case BATTLEFIELD:
sb.append("onto the");
}
sb.append(' ');
sb.append(zone.toString().toLowerCase());
return sb.toString();
}
}